前言:
昇腾提供了以CANN AscendCL接口开发的样例仓,方便开发者学习。样例仓提供了C&C++、Python两种语言的样例。
每个样例都有Readme,里面详细描述了功能、准备模型,准备数据,编译、运行的步骤。本笔记将根据Readme,完成resnet50_imagenet_classification工程的C++和Python两个版本的推理应用。
一、昇腾sample仓
1、昇腾sample仓概述
CANN AscendCL(Ascend Computing Language)提供Device管理、Context管理、Stream管理、内存管理、模型加载与执行、算子加载与执行、媒体数据处理等C语言API库供用户开发深度神经网络应用,用于实现目标识别、图像分类等功能。用户可以通过第三方框架调用AscendCL接口,以便使用昇腾AI处理器的计算能力;用户还可以使用AscendCL封装实现第三方lib库,以便提供昇腾AI处理器的运行管理、资源管理能力。
昇腾样例仓就是以CANN AscendCL接口进行开发,制作的一系列给开发者进行参考学习的样例。这些样例主要分成“单一功能接口样例level1_single_api”和“推理教学样例level2_simple_inference”,推理教学样例又包含了:数据处理样例、分类样例、检测样例、自然语言处理样例等,基本上囊括了AI的主要方向的推理应用。这些例程提供了C++和Python两种实现,目录如下:
2、sample仓的学习方法
了解了sample仓的目录结构后,我们就可以逐级找到自己感兴趣的例程进行学习,上手跑一下例程。
进入一个具体的工程,首先要看的是Readme,这里面介绍了:工程的功能、工程的目录结构、获取模型和待推理的图片、编译和运行的步骤、关键的功能介绍。我们按照Readme的步骤,一步一步做下去就可以了。
以resnet50_imagenet_classification的C++版为例,目录结构如下:
RESNET50是一个 “图片分类应用”的模型,用来标识图片所属的分类,流程如下:
二、运行Resnet50图片分类样例——C++版
工程路径:samples/cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification。
用Visual Studio code打开工程的Readme文件,如下图所示,按Readme里的说明一步一步即可完成第一个用例。用Mobaxtem连接到ECS上,由于sample仓已经下载,我们直接从第三步“准备模型”开始。
1、准备模型
(1)步骤一:在工程路径下创建 caffe_model目录,并进入caffe_model目录。caffe_model是用来存放resnet50的原始caffe模型的。mkdir caffe_model && cd caffe_model
(2) 步骤二:下载原始网络的模型文件(*.prototxt)、权重文件(*.caffemodel),根据Readme中的文件路径,使用wget获取对应文件。
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/resnet50/resnet50.prototxt
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/resnet50/resnet50.caffemodel
(3)步骤三:在工程目录下,创建model目录,用来存放转换后om格式的离线模型。先执行cd ..,退回到工程目录,再mkdir model创建model目录(因为代码指定om模型路径是工程目录下的model目录。拷贝readme中模型转换命令到mobaXterm中执行。
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
操作截图:
2、准备测试图片
(1)下载图片
进入data目录,用wget命令下载待推理图片2张。
(2)转换图片
切换到“样例目录/data“目录下,执行transferPic.py脚本,将*.jpg转换为*.bin,同时将图片从1024*683的分辨率缩放为224*224。在“样例目录/data“目录下生成2个*.bin文件。
python3 ../script/transferPic.py
执行脚本报错“ModuleNotFoundError: No module named 'PIL'”,则表示缺少Pillow库,使用**pip3 install Pillow --user**命令安装Pillow库。
3、编译
根据Readme,大致过程是:配置环境变量,用cmake工具生成Makefile,编译程序。
4、运行
(1)运行过程
(2)运行结果:
三、运行Resnet50图片分类样例——python版
工程路径:
/samples/python/level2_simple_inference/1_classification/resnet50_imagenet_classification
准备模型和图片的过程与C++版本一致,不再重复。推理结果与C++版本一致。