基于Caffe ResNet-50网络实现图片分类(仅推理)的实验复现
摘要:本实验主要是以基于Caffe ResNet-50网络实现图片分类(仅推理)为例,学习如何在已经具备预训练模型的情况下,将该模型部署到昇腾AI处理器上进行推理。
本文分享自华为云社区《【CANN训练营】【2022第二季】【新手班】基于Caffe ResNet-50网络实现图片分类(仅推理)的实验复现》,作者: StarTrek 。
本实验主要是以基于Caffe ResNet-50网络实现图片分类(仅推理)为例,学习如何在已经具备预训练模型的情况下,将该模型部署到昇腾AI处理器上进行推理。该实验的主要任务有:
1、将Caffe ResNet-50网络的模型文件转换为适配昇腾AI处理器的离线模型( * .om文件);
2、加载该om文件,对2张 * .jpg图片进行同步推理,分别得到推理结果后,再对推理结果进行处理,输出top5置信度的类别标识;
3、将测试的图片替换为自己的图片并重新编译运行。
一、云服务器的使用
首先为了更好的让我们能够了解并学习昇腾的相关知识,华为CANN训练营为每一位学员都给予了一定的云服务器资源,关于云服务器的使用简单总结如下:
本次提供的共享镜像是:Ubuntu 18.04(系统) + 5.1.RC2.alpha005(CANN环境版本)
登陆华为云->进入控制台->申请ESC弹性云服务器->获取弹性公网IP->运用SSH远程访问云服务器->正常按照ubuntu系统的终端命令来操作使用服务器
资源链接:
远程终端软件推荐MobaXterm:https://mobaxterm.mobatek.net/
软件使用方法:https://blog.csdn.net/xuanying_china/article/details/120080644
进入终端后为root用户,需要进入HwHiAiUser用户
指令:
cd /home/
su - HwHiAiUser
可以使用ls或者ll指令随意浏览系统中已有的文件情况。
![](https://pic1.zhimg.com/80/v2-4b0ba8b5cc73d0357d53a0f261ccdf48_720w.jpg)
二、基于Caffe ResNet-50网络实现图片分类(仅推理)实验
准备工作完成之后,下面就可以开始正式的实验之旅啦!可以按照仓库里的readme文件所述步骤一步步操作,此处也仅仅只是简单的给出实验的步骤和实验图。
1、下载样例代码
克隆sample仓里的代码
git clone https://gitee.com/ascend/samples.git
![](https://pic3.zhimg.com/80/v2-9ac1992829539a87da84a672796bddd6_720w.jpg)
进入到resnet50_imagenet_classification样例的文件夹中
cd samples/
cd cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification
![](https://pic4.zhimg.com/80/v2-a9886801557d8cbef8b4867754ef1f73_720w.jpg)
2、获取ResNet-50预训练模型
先创建一个用来存储该模型的文件夹,并打开该文件夹
mkdir caffe_model
cd caffe_model
从网页直接通过命令下载预训练模型:权重文件(resnet50.caffemodel)和模型文件(resnet50.prototxt)
wegt https://modelzoo-train-atc.obs.cn-north-4.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/resnet50/resnet50.prototxt wegt https://modelzoo-train-atc.obs.cn-north-4.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/resnet50/resnet50.caffemodel
![](https://pic1.zhimg.com/80/v2-2eda4a6dd96a4ced7d35c4fa62192c50_720w.jpg)
3、模型转换
上述下载的预训练模型需要首先运用ATC模型转换工具将该模型转换成昇腾AI处理器支持的离线模型(.om)
官方文档ATC工具学习资源:
https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/51RC2alpha005/infacldevg/atctool
流程:
首先先切换到样例目录下(接着上面的操作就是上一级目录)
cd ../
然后运行模型转换工具
atc --model=caffe_model/resnet50.prototxt --weight=caffe_model/resnet50.caffemodel --framework=0 --output=model/resnet50 --soc_version=Ascend310 --input_format=NCHW --input_fp16_nodes=data --output_type=FP32 --out_nodes=prob:0
![](https://pic3.zhimg.com/80/v2-f8142faf27f5525cbcc5f99b7cf9a98a_720w.jpg)
打开model文件夹可以看到resnet50.om已经转换完成了
![](https://pic4.zhimg.com/80/v2-a4a9a7c314a037d53436814010ab3e8b_720w.jpg)
4、下载测试图片
进入data文件夹,并下载两张ImageNet数据集中存在类别的图片
cd ../data/ wget https://c7xcode.obs.cn-north-4.myhuaweicloud.com/models/aclsample/dog1_1024_683.jpg wget https://c7xcode.obs.cn-north-4.myhuaweicloud.com/models/aclsample/dog2_1024_683.jpg
![](https://pic1.zhimg.com/80/v2-9a912f1ee503c85b871c69835d6a13bc_720w.jpg)
测试的两张图
![](https://pic4.zhimg.com/80/v2-7006cffe18c4230ce7303cd86b23427f_720w.jpg)
![](https://pic1.zhimg.com/80/v2-966ed913ac950dfe40675f9b9e32f31c_720w.jpg)
5、图片格式转换
下载的图片是JPEG格式的,需要转换成适合模型输入要求格式的二进制文件(.bin)
在data目录下,执行transferPic.py脚本,将*.jpg转换为*.bin,同时将图片从1024 * 683的分辨率缩放为224 * 224。
python3 ../script/transferPic.py
![](https://pic4.zhimg.com/80/v2-af5f4fdcf16f4105fa32debd5fa68da3_720w.jpg)
6、编译运行
进入“cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification”样例目录
cd ../
设置临时的环境变量,配置程序编译依赖的头文件与库文件路径
export DDK_PATH=$HOME/Ascend/ascend-toolkit/latest
export NPU_HOST_LIB=$DDK_PATH/acllib/lib64/stub
![](https://pic4.zhimg.com/80/v2-3bb9240884963a2214449285341afac3_720w.jpg)
建立build文件夹,准备编译代码文件
mkdir -p build/intermediates/host
![](https://pic4.zhimg.com/80/v2-d40d3915a7c93e4d5a1bf2f190522043_720w.jpg)
进入build文件夹,编译.cpp文件
cd build/intermediates/host cmake ../../../src -DCMAKE_CXX_COMPILER=g++ -DCMAKE_SKIP_RPATH=TRUE make
![](https://pic4.zhimg.com/80/v2-c1e0a0286332f4f1e83aa9474693a047_720w.jpg)
![](https://pic3.zhimg.com/80/v2-775a04ea44ec923b2496666960571b9a_720w.jpg)
可以在样例目录(cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification)下的out文件夹中找到编译好的可执行main文件,接下来我们直接运行main文件
cd ../../../out/ ./main
![](https://pic4.zhimg.com/80/v2-336e3188e0c206acbd4e9d25b29470fb_720w.jpg)
三、替换图片数据进行测试
这里在网上随便找了两张图(一张金鱼label-1,一张金毛犬label-207),可以随意找几张图,只要是JPG格式的图片即可,图片中的事物类型最好是ImageNet数据集标签中的类型。
1、添加图片并转换格式
可以直接下载到本地电脑中,然后直接将文件拖到MobaXterm软件的云服务器文件列表中,为了方便直接先在列表中找到前面的data文件夹,然后直接拖拽到该文件夹下即可。
![](https://pic3.zhimg.com/80/v2-1320163392aff471fa79628aeb6be9da_720w.jpg)
![](https://pic3.zhimg.com/80/v2-f359f09967bbf1a94dbb03fa53ad01fa_720w.jpg)
按照前面的操作(5、图片格式转换)重新进行图片文件格式的转换,在data目录下运行
python3 ../script/transferPic.py
![](https://pic2.zhimg.com/80/v2-c09dc158e6c14877a05ae7c490683779_720w.jpg)
2、修改sample_process.cpp源码,添加新增的两张图片的路径
在testFile列表中增加前面新添加的并转换好的那两张bin格式的文件路径,路径仿照前两个写即可,不过别忘记不同文件路径间的逗号分隔哦
![](https://pic1.zhimg.com/80/v2-01f00d17e38587b2dea451daea48a058_720w.jpg)
3、重新编译源码
按照前面的步骤进行即可(6、编译运行),需要注意的是,如果重启过服务器,之前设置的编译临时环境会丢失,需要再次设置临时的环境变量(配置程序编译依赖的头文件与库文件路径),然后可以在build/intermediates/host文件下直接运行make编译即可,编译器会自动编译修改过的源文件并覆盖。
![](https://pic1.zhimg.com/80/v2-f81a9839cecc8698896a8e6de37f9ce0_720w.jpg)
4、推理
按照前面的步骤重新运行编译好的main文件即可(6、编译运行中的最后一步),注意文件的路径,需要在out文件夹下运行,因为main文件是被保存在这里的。
![](https://pic2.zhimg.com/80/v2-279f871b19e6fa93805dbd2bbf0f7a75_720w.jpg)
最后我们可以看到
标签为1是金鱼,第一张图是金鱼的概率为99.7070%
标签为207是金毛犬,第二张图是金毛犬的概率为99.5605%
相关文章
- 计算机的运行原理
- 操作系统高频面试题(2022最新整理)
- 利用宝塔面板搭建nginx及PhpMyadmin等环境
- 一键卸载宝塔Linux面板及运行环境命令
- 微信小程序Video组件实现视频、自定义播放按钮、封面图、封面图文字demo
- 微信小程序页面跳转传值
- Win10家庭版使用远程桌面连接失败
- 耶鲁两栖机器龟登Nature封面,一种部件搞定水上、陆地行动
- Crane 发布国内首个云原生应用碳排放计算优化器
- 7 Papers & Radios | 两栖机器龟登上Nature封面;深度去模糊综述论文入选IJCV
- SIGGRAPH Asia 2022|告别手Key!上科大提出实时面捕,精细到微表情
- 图灵奖得主Jack Dongarra:超级计算顶部还有很大空间
- 云图说丨手把手教你为容器应用配置弹性伸缩策略
- Spark优化之小文件是否需要合并?
- 如何让“哑”终端进化,你知道吗?
- Web前端性能优化,应该怎么做?
- 看DLI服务4核心如何提升云服务自动化运维
- 5G从小就梦想着自己要迎娶:高速率、低时延、大容量三个老婆
- 一文读懂GaussDB(for Mongo)的计算存储分离架构
- 9个常用ES6特性归纳(一般用这些就够了)