写点什么

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

  • 2022 年 7 月 25 日
  • 本文字数:2590 字

    阅读完需:约 8 分钟

基于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 用户


指令:


	cd /home/	su - HwHiAiUser
复制代码


可以使用 ls 或者 ll 指令随意浏览系统中已有的文件情况。


二、基于咖啡 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
复制代码



进入到 resnet50_imagenet_classification 样例的文件夹中


	cd samples/	cd cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification
复制代码


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
复制代码


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
复制代码



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


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
复制代码



测试的两张图



5、图片格式转换


下载的图片是 JPEG 格式的,需要转换成适合模型输入要求格式的二进制文件(.bin)


在 data 目录下,执行 transferPic.py 脚本,将*.jpg 转换为*.bin,同时将图片从 1024 * 683 的分辨率缩放为 224 * 224。


	python3 ../script/transferPic.py
复制代码


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
复制代码



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


	mkdir -p build/intermediates/host
复制代码



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


	cd build/intermediates/host	cmake ../../../src -DCMAKE_CXX_COMPILER=g++ -DCMAKE_SKIP_RPATH=TRUE	make
复制代码




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


	cd ../../../out/	./main
复制代码

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


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

1、添加图片并转换格式


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




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


	python3 ../script/transferPic.py
复制代码


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


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


3、重新编译源码


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


4、推理


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



最后我们可以看到


标签为 1 是金鱼,第一张图是金鱼的概率为 99.7070%


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


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

发布于: 18 小时前阅读数: 24
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
基于Caffe ResNet-50网络实现图片分类(仅推理)的实验复现_人工智能_华为云开发者联盟_InfoQ写作社区