【CANN训练营-模型部署入门】【CANN训练营0基础赢满分秘籍】Yolov5 模型部署课堂笔记
2023 · CANN训练营第一季:310的Yolov5 模型部署全流程课堂笔记
课程例程实现目标:
使用yolov5模型实现目标检测 YOLOv5的网络结构主要包含3个部分,分别是骨干网络、特征融合网络和头网络 基于python的Yolov5例程中,样例的实现主要分为三个部分:

部署实现步骤:
1.模型导出后转换
模型训练完成后会产生pt文件,而昇腾310可以加载的模型格式为om,转换步骤如下:

.pt转换为.onnx
torch.onnx.export(
model,#(torch.nn.Module)要导出的模型
im,#模型的输入:非Tensor参数将被硬编码到模型中,tensor参数成为导出模型的输入, 并按照输入顺序进行输入
f, #导出的onnx文件名
verbose=False, #log输出模型的描述
opset_version=opset,#onnx算子集标本
training=torch.onnx.TrainingMode.TRAINING if train else torch.onnx.TrainingMode.EVAL,#在训练模式还是推理模式下导出模型
do_constant_folding=not train,#是否进行常量折叠优化
input_names=['images'],#输入张量的名称
output_names=['output'],#输出张量的名称
dynamic_axes={'images': {0: 'batch', 2: 'height', 3: 'width'}, # shape(1,3,640,640)
'output': {0: 'batch', 1: 'anchors'} # shape(1,25200,85)
} if dynamic else None#指定输入输出张量的哪些维度为动态
2.将导出的模型进行后处理
运用YoloPreDetection和YoloV5DetectionOutput算子

3.使用ATC工具,将onnx模型转成om模型,如果是C++的应用,可在ATC中需添加AIPP
以下为部分重要参数:

Python版本的官方样例中:
预处理部分:
使用opencv/和numpy实现预处理:按照需要转换RGB格式,并进行数据归一化(/255),图像增强等操作
优化后的C++API下的部署,使用ATC工具配置AIPP(可参考昇腾社区的AIPP模板进行配置)
在AI core中进行图像预处理,实际上就是在模型输入上多加一个算子,把预处理放在NPU上进行
代码部分单独做一篇详细笔记