样例使用指导
功能描述
该样例主要是基于Onnx ResNet-50网络(单输入、单Batch)实现图片分类的功能。
在该样例中:
- 先使用样例提供的脚本transfer_pic.py,将2张*.jpg图片都转换为*.bin格式,同时将图片从1024*683的分辨率缩放为224*224。
- 加载离线模型om文件,对2张图片进行同步推理,分别得到推理结果,再对推理结果进行处理,输出top5置信度的类别标识。
在加载离线模型前,提前将Onnx ResNet-50网络的模型文件转换为适配昇腾AI处理器的离线模型。
目录结构
├── data
│ ├── dog1_1024_683.jpg // 测试数据,需要按指导获取测试图片,放到data目录下
│ ├── dog2_1024_683.jpg // 测试数据,需要按指导获取测试图片,放到data目录下
├── model
│ ├── resnet50.om // Onnx ResNet-50网络的模型文件,需要按指导获取atc转换后的om文件,放到model目录下
├── scripts
│ ├── build.sh // sample编译脚本
│ ├── run.sh // sample运行脚本
│ ├── transfer_pic.py // 将*.jpg转换为*.bin,同时将图片从1024*683的分辨率缩放为224*224
├── src
│ ├── acl.json // 系统初始化的配置文件
│ ├── CMakeLists.txt // 编译配置脚本
│ ├── sample_resnet50_imagenet_classification.cpp // 主函数,图片分类功能的实现文件
├── CMakeLists.txt // 编译脚本,调用src目录下的CMakeLists文件
环境准备
-
通过安装指导 环境准备正确安装
toolkit和ops包 -
设置环境变量 (假设包安装在
/usr/local/Ascend/)source /usr/local/Ascend/cann/set_env.sh
实现步骤
-
以运行用户登录开发环境。
-
下载代码并上传至环境后,请先进入根目录下"examples/acl/1_sample_resnet50_imagenet_classification"样例目录。
请注意,下文中的样例目录均指"examples/acl/1_sample_resnet50_imagenet_classification"目录。
-
准备ResNet-50模型。
-
获取ResNet-50原始模型。
您可以从以下链接中获取ResNet-50网络的模型文件,并以运行用户将获取的文件上传至开发环境的"样例目录/model"目录下。如果目录不存在,需要自行创建。
- ResNet-50网络的模型文件(*.onnx):单击Link下载该文件。
-
将ResNet-50原始模型转换为适配昇腾AI处理器的离线模型(*.om文件)。
切换到样例目录,执行如下命令(以Atlas A2系列产品为例):
cd "样例目录/model" atc --model=resnet50_Opset16.onnx --framework=5 --output=resnet50 --soc_version=Ascend910B1 --input_format=NCHW --output_type=FP32-
--model:原始模型文件路径。
-
--framework:原始框架类型。0:表示Caffe;1:表示MindSpore;3:表示TensorFlow;5:表示ONNX。
-
--soc_version:昇腾AI处理器的版本。版本获取可参考Link。
-
--output_type:指定输出的数据类型为float32。
-
--output:生成的resnet50.om文件存放在"样例目录/model"目录下。建议使用命令中的默认设置,否则在编译代码前,您还需要修改sample_resnet50_imagenet_classification.cpp 中的omModelPath参数值。
const char* omModelPath = "../model/resnet50.om";
-
-
-
准备测试图片。
-
可以按照以下命令获取样例的输入图片,输入图片需要放置到"样例目录/data"目录下。如果目录不存在,需自行创建。如果wget失败,您也可以直接在浏览器中输入以下链接下载后上传至"样例目录/data"目录。
cd "样例目录/data" wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/dog1_1024_683.jpg wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/dog2_1024_683.jpg -
切换到"样例目录/data"目录下,执行transfer_pic.py脚本,将*.jpg转换为*.bin,同时将图片从1024*683的分辨率缩放为224*224。在"样例目录/data"目录下生成2个*.bin文件。
python3 ../scripts/transfer_pic.py如果执行脚本报错"ModuleNotFoundError: No module named 'PIL'",则表示缺少Pillow库,请使用pip3 install Pillow --user命令安装Pillow库。
-
构建验证
-
以运行用户登录开发环境。
-
请先进入根目录下"examples/acl/1_sample_resnet50_imagenet_classification"样例目录。
请注意,下文中的样例目录均指"examples/acl/1_sample_resnet50_imagenet_classification"目录。
-
切换到"样例目录/scripts",编译程序。
bash build.sh -
运行程序
bash run.sh -
执行结果
执行成功后,在屏幕上的关键提示信息示例如下,提示信息中的index表示类别标识、value表示该分类的最大置信度,这些值可能会根据版本、环境有所不同,请以实际情况为准:
[INFO] acl init success [INFO] open device 0 success [INFO] create context success [INFO] create stream success [INFO] load model ../model/resnet50.om success [INFO] start to process file:../data/dog1_1024_683.bin [INFO] model execute success [INFO] top 1: index[161] value[xxxxxx] [INFO] top 2: index[xxx] value[xxxxxx] [INFO] top 3: index[xxx] value[xxxxxx] [INFO] top 4: index[xxx] value[xxxxxx] [INFO] top 5: index[xxx] value[xxxxxx] [INFO] output data success [INFO] start to process file:../data/dog2_1024_683.bin [INFO] model execute success [INFO] top 1: index[267] value[xxxxxx] [INFO] top 2: index[xxx] value[xxxxxx] [INFO] top 3: index[xxx] value[xxxxxx] [INFO] top 4: index[xxx] value[xxxxxx] [INFO] top 5: index[xxx] value[xxxxxx] [INFO] output data success [INFO] SAMPLE PASSED说明: 类别标签和类别的对应关系与训练模型时使用的数据集有关,本样例使用的模型是基于imagenet数据集进行训练的,您可以在互联网上查阅imagenet数据集的标签及类别的对应关系。 当前屏显信息中的类别标识与类别的对应关系如下: "161": ["basset", "basset hound"]、 "267": ["standard poodle"]。