8

基于Caffe ResNet-50网络实现图片分类(仅推理)的实验复现

 2 years ago
source link: https://blog.51cto.com/u_15214399/5510160
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

基于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指令随意浏览系统中已有的文件情况。

基于Caffe ResNet-50网络实现图片分类(仅推理)的实验复现_Caffe

二、基于Caffe ResNet-50网络实现图片分类(仅推理)实验

准备工作完成之后,下面就可以开始正式的实验之旅啦!可以按照仓库里的readme文件所述步骤一步步操作,此处也仅仅只是简单的给出实验的步骤和实验图。

仓库资源链接:​ ​https://gitee.com/ascend/samples/tree/master/cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification​​​ ​​

1、下载样例代码

克隆sample仓里的代码

git clone https://gitee.com/ascend/samples.git
基于Caffe ResNet-50网络实现图片分类(仅推理)的实验复现_CANN_02

进入到resnet50_imagenet_classification样例的文件夹中

cd samples/
cd cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification
基于Caffe ResNet-50网络实现图片分类(仅推理)的实验复现_CANN_03

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
基于Caffe ResNet-50网络实现图片分类(仅推理)的实验复现_Caffe_04

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_versinotallow=Ascend310 --input_format=NCHW --input_fp16_nodes=data --output_type=FP32 --out_nodes=prob:0
基于Caffe ResNet-50网络实现图片分类(仅推理)的实验复现_CANN_05

打开model文件夹可以看到resnet50.om已经转换完成了

基于Caffe ResNet-50网络实现图片分类(仅推理)的实验复现_ResNet-50_06

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
基于Caffe ResNet-50网络实现图片分类(仅推理)的实验复现_CANN_07

测试的两张图

基于Caffe ResNet-50网络实现图片分类(仅推理)的实验复现_CANN_08
基于Caffe ResNet-50网络实现图片分类(仅推理)的实验复现_CANN_09

5、图片格式转换

下载的图片是JPEG格式的,需要转换成适合模型输入要求格式的二进制文件(.bin)
在data目录下,执行transferPic.py脚本,将*.jpg转换为*.bin,同时将图片从1024 * 683的分辨率缩放为224 * 224。

python3 ../script/transferPic.py
基于Caffe ResNet-50网络实现图片分类(仅推理)的实验复现_ResNet-50_10

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
基于Caffe ResNet-50网络实现图片分类(仅推理)的实验复现_推理_11

建立build文件夹,准备编译代码文件

mkdir -p build/intermediates/host
基于Caffe ResNet-50网络实现图片分类(仅推理)的实验复现_推理_12

进入build文件夹,编译.cpp文件

cd build/intermediates/host
cmake ../../../src -DCMAKE_CXX_COMPILER=g++ -DCMAKE_SKIP_RPATH=TRUE
make
基于Caffe ResNet-50网络实现图片分类(仅推理)的实验复现_推理_13

基于Caffe ResNet-50网络实现图片分类(仅推理)的实验复现_昇腾AI处理器_14

可以在样例目录(cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification)下的out文件夹中找到编译好的可执行main文件,接下来我们直接运行main文件

cd ../../../out/
./main
基于Caffe ResNet-50网络实现图片分类(仅推理)的实验复现_Caffe_15

三、替换图片数据进行测试

这里在网上随便找了两张图(一张金鱼label-1,一张金毛犬label-207),可以随意找几张图,只要是JPG格式的图片即可,图片中的事物类型最好是ImageNet数据集标签中的类型。

1、添加图片并转换格式

可以直接下载到本地电脑中,然后直接将文件拖到MobaXterm软件的云服务器文件列表中,为了方便直接先在列表中找到前面的data文件夹,然后直接拖拽到该文件夹下即可。

基于Caffe ResNet-50网络实现图片分类(仅推理)的实验复现_CANN_16
基于Caffe ResNet-50网络实现图片分类(仅推理)的实验复现_CANN_17

按照前面的操作(5、图片格式转换)重新进行图片文件格式的转换,在data目录下运行

python3 ../script/transferPic.py
基于Caffe ResNet-50网络实现图片分类(仅推理)的实验复现_Caffe_18

2、修改sample_process.cpp源码,添加新增的两张图片的路径

在testFile列表中增加前面新添加的并转换好的那两张bin格式的文件路径,路径仿照前两个写即可,不过别忘记不同文件路径间的逗号分隔哦

基于Caffe ResNet-50网络实现图片分类(仅推理)的实验复现_昇腾AI处理器_19

3、重新编译源码

按照前面的步骤进行即可(6、编译运行),需要注意的是,如果重启过服务器,之前设置的编译临时环境会丢失,需要再次设置临时的环境变量(配置程序编译依赖的头文件与库文件路径),然后可以在build/intermediates/host文件下直接运行make编译即可,编译器会自动编译修改过的源文件并覆盖。

基于Caffe ResNet-50网络实现图片分类(仅推理)的实验复现_推理_20

按照前面的步骤重新运行编译好的main文件即可(6、编译运行中的最后一步),注意文件的路径,需要在out文件夹下运行,因为main文件是被保存在这里的。

基于Caffe ResNet-50网络实现图片分类(仅推理)的实验复现_推理_21

最后我们可以看到

标签为1是金鱼,第一张图是金鱼的概率为99.7070%
标签为207是金毛犬,第二张图是金毛犬的概率为99.5605%

 ​点击关注,第一时间了解华为云新鲜技术~


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK