【2023·CANN训练营第一季】ResNet50图片分类应用——预处理

100 阅读2分钟

转换图片和模型

请注意,下文中的样例目录均指“cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification”目录。

export APP_HOME=$HOME/samples/cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification
# 样例目录

1. 转换模型为om模型

ResNet-50原始模型转换为适配昇腾AI处理器的离线模型(*.om文件

没有原始模型文件和权重文件的先阅读昨天的准备资源文章准备好资源哦

cd $APP_HOME/caffe_model	# 切换到原始模型目录下
# 转换模型
atc --model=./resnet50.prototxt --weight=./resnet50.caffemodel --framework=0 --output=../model/resnet50 --soc_version=Ascend310 --input_format=NCHW --input_fp16_nodes=data --output_type=FP32 --out_nodes=prob:0

atc命令

概要

昇腾张量编译器(Ascend Tensor Compiler,简称ATC是昇腾CANN架构体系下的模型转换工具

  • 它可以将开源框架的网络模型(如CaffeTensorFlow等)以及Ascend IR定义的单算子描述文件转换为昇腾AI处理器支持的离线模型。

  • 模型转换过程中,ATC会进行算子调度优化、权重数据重排、内存使用优化等具体操作,对原始的深度学习模型进行进一步的调优,从而满足部署场景下的高性能需求,使其能够高效执行在昇腾AI处理器上。

选项

  • --model原始模型文件路径

  • --weight权重文件路径

  • --framework原始框架类型

    0:表示Caffe

    1:表示MindSpore

    3:表示TensorFlow

    5:表示ONNX

  • --soc_version昇腾AI处理器的版本

    进入“CANN软件安装目录/compiler/data/platform_config”目录,".ini"文件的文件名即为昇腾AI处理器的版本,请根据实际情况选择。

  • --input_format输入数据的Format

  • --input_fp16_nodes指定输入数据类型FP16的输入节点名称。

  • --output_type和--out_nodes:这2个参数配合使用,指定prob节点的第一个输出的数据类型为float32

  • --output:生成的resnet50.om文件存放在“样例目录/model“目录下。建议使用命令中的默认设置,否则在编译代码前,您还需要修改sample_process.cpp中的omModelPath参数值。

等待数分钟后出现ATC run success即表示模型转换成功,转换后的om文件保存在$APP_HOME/model文件夹里

2. 转换图片为指定规格

切换到“样例目录/data“目录下,执行transferPic.py脚本,将``.jpg转换为.bin,同时将图片从1024683的分辨率缩放为224224`。

cd $APP_HOME/data	# 数据目录
su	# 切换为超级管理员用户
python3 ../script/transferPic.py	# 执行脚本

常见问题

如果执行脚本报错“ModuleNotFoundError: No module named 'PIL'”,则表示缺少Pillow库,请使用**pip3 install Pillow --user**命令安装Pillow库。

如果安装了Pillow库还是报错,请在超级管理员用户下执行脚本

su 	# 切换为超级管理员用户
pip3 install Pillow --user	# 安装所需的Pillow库

在“样例目录/data“目录下生成2个*.bin文件。

好了,对模型和图片进行预处理就讲到这里,明天我们讲解如何编译并运行图片分类应用实例