基于 Caffe ResNet-50 网络实现图片分类(仅推理)的实验复现
本文分享自华为云社区《【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 用户
指令:
可以使用 ls 或者 ll 指令随意浏览系统中已有的文件情况。
二、基于咖啡 ResNet-50 网络实现图片分类(仅推理)实验
准备工作完成之后,下面就可以开始正式的实验之旅啦!可以按照仓库里的 readme 文件所述步骤一步步操作,此处也仅仅只是简单的给出实验的步骤和实验图。
仓库资源链接:
1、下载样例代码
克隆 sample 仓里的代码
进入到 resnet50_imagenet_classification 样例的文件夹中
2、获取 ResNet-50 预训练模型
先创建一个用来存储该模型的文件夹,并打开该文件夹
从网页直接通过命令下载预训练模型:权重文件(resnet50.caffemodel)和模型文件(resnet50.prototxt)
3、模型转换
上述下载的预训练模型需要首先运用 ATC 模型转换工具将该模型转换成昇腾 AI 处理器支持的离线模型(.om)
官方文档 ATC 工具学习资源:https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/51RC2alpha005/infacldevg/atctool
流程:
首先先切换到样例目录下(接着上面的操作就是上一级目录)
然后运行模型转换工具
打开 model 文件夹可以看到 resnet50.om 已经转换完成了
4、下载测试图片
进入 data 文件夹,并下载两张 ImageNet 数据集中存在类别的图片
测试的两张图
5、图片格式转换
下载的图片是 JPEG 格式的,需要转换成适合模型输入要求格式的二进制文件(.bin)
在 data 目录下,执行 transferPic.py 脚本,将*.jpg 转换为*.bin,同时将图片从 1024 * 683 的分辨率缩放为 224 * 224。
6、编译运行
进入“cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification”样例目录
设置临时的环境变量,配置程序编译依赖的头文件与库文件路径
建立 build 文件夹,准备编译代码文件
进入 build 文件夹,编译.cpp 文件
可以在样例目录(cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification)下的 out 文件夹中找到编译好的可执行 main 文件,接下来我们直接运行 main 文件
三、替换图片数据进行测试
这里在网上随便找了两张图(一张金鱼 label-1,一张金毛犬 label-207),可以随意找几张图,只要是 JPG 格式的图片即可,图片中的事物类型最好是 ImageNet 数据集标签中的类型。
1、添加图片并转换格式
可以直接下载到本地电脑中,然后直接将文件拖到 MobaXterm 软件的云服务器文件列表中,为了方便直接先在列表中找到前面的 data 文件夹,然后直接拖拽到该文件夹下即可。
按照前面的操作(5、图片格式转换)重新进行图片文件格式的转换,在 data 目录下运行
2、修改 sample_process.cpp 源码,添加新增的两张图片的路径
在 testFile 列表中增加前面新添加的并转换好的那两张 bin 格式的文件路径,路径仿照前两个写即可,不过别忘记不同文件路径间的逗号分隔哦
3、重新编译源码
按照前面的步骤进行即可(6、编译运行),需要注意的是,如果重启过服务器,之前设置的编译临时环境会丢失,需要再次设置临时的环境变量(配置程序编译依赖的头文件与库文件路径),然后可以在 build/intermediates/host 文件下直接运行 make 编译即可,编译器会自动编译修改过的源文件并覆盖。
4、推理
按照前面的步骤重新运行编译好的 main 文件即可(6、编译运行中的最后一步),注意文件的路径,需要在 out 文件夹下运行,因为 main 文件是被保存在这里的。
最后我们可以看到
标签为 1 是金鱼,第一张图是金鱼的概率为 99.7070%
标签为 207 是金毛犬,第二张图是金毛犬的概率为 99.5605%
版权声明: 本文为 InfoQ 作者【华为云开发者联盟】的原创文章。
原文链接:【http://xie.infoq.cn/article/d5ea9b61ab880eb3aaa618ba2】。文章转载请联系作者。
评论