Atlas深度学习模型转换及运行

转换方法

有两个主流的方法

  • onnx->Caffe Model->om(最主流)

  • onnx->om
    使用第一种方法看似麻烦,多了一步,但其实这种转换方式的好处有很多

  • 可以通过修改prototxt的方式实现对网络结构的修改,可以添加一些本没有的算子,故可操作性高

  • Caffe支持的算子更多

  • 实现同样的功能,使用这种方式进行转换的效率会更高(因为我们可以通过编辑算子的方式来让网络进行某些循环操作,比起手写For循环肯定快得多)

  • 在使用昇腾硬件(例如Atlas200)进行模型推理的时候,首先需要使用ATC工具将原始模型转换为适合昇腾硬件的模型(.om),支持原始框架类型为Caffe、TensorFlow、MindSpore、ONNX的模型转换,其中ONNX可以看做是一个中间模型,如果其他模型可以转换为ONNX模型那么也可以在使用ATC进行模型转换,例如pytorch模型转换为ONNX模型,ONNX模型再转换为.om文件。

使用第一种方法转换过程(以YOLOv4为例)

首先,我们要有onnx模型,即PyTorch的训练模型以.pth的方式存储,先通过指令将其转为onnx,随后将onnx转为Caffe文件(使用convertCaffe.py文件,该文件在github上有)。随后对prototxt文件进行修改(添加一些layer层实现自定义算子的功能),随后使用如下指令进行转换

Caffe->om常用参数及指令解释

–model:原始模型文件路径与文件名

–weight:权重文件路径与文件名

–framework:原始模型框架:0是caffe,1是mindspore,3是tensorflow,5是onnx

–input_format:输入数据格式:Caffe默认为NCHW,TensorFlow默认为NHWC

–dynamic_image_size:设置输入图片的动态分辨率参数。适用于执行推理时,每次处理图片宽和高不固定的场景。

–output:存放转换后的离线模型的路径以及文件名

–soc_version:模型转换时指定芯片版本。

–insert_op_conf:插入算子的配置文件路径与文件名,例如aipp预处理算子(包含了图像预处理比如色域转换、减均值等)。

  • 例子:
atc --model=yolov5.prototxt --weight=yolov5.caffemodel --framework=0 --output=yolov5s_caffe2om --soc_version=Ascend310 --insert_op_conf=aipp_nv12.cfg

对模型yolov4.prototxt和权重yolov5.caffemodel的caffe原始模型进行转换,framework为0表示caffe,输出文件名字为yolov5s_caffe2om.om,推理芯片选择Ascend310,算子配置文件为aipp_nv12.cfg。

onnx->om指令

atc --model=yolov5.onnx --framework=5 --output=yolov5 --input_format=NCHW --log=info --soc_version=Ascend310 --input_shape="input:1,3,608,608" -out_nodes="feature_map_1;feature_map_2;feature_map_3"

对名为yolov5的模型进行转换,framework为5表示onnx,输出文件名字为yolov5.om,,日志等级为info,推理芯片选择Ascend310,输入和输出的格式如图所示。

运行过程

首先要搞清楚一点,Atlas开发板仅仅只是程序真正进行推理运行的环境,所以我们在开发板上唯一需要做的就是将在Linux环境下编译好的程序上传上去,然后执行脚本运行,为了方便我们就在官方demo给的文件夹下运行。

执行以下命令将转换好的模型复制到样例中model文件夹中。

 cp ./yolov5.om $HOME/samples/cplusplus/level2_simple_inference/2_object_detection/YOLOV3_coco_detection_picture/model/

执行以下命令,执行编译脚本,开始样例编译。

cd $HOME/samples/cplusplus/level2_simple_inference/2_object_detection/YOLOV3_coco_detection_picture/scripts
bash sample_build.sh

这里注意,这个build的脚本里有好多内容都是要改的,就比如运行文件名称、路径等。
运行build之后,会让填arm还是x86,我们填运行环境arm

你可能感兴趣的:(caffe,人工智能,深度学习)