本文主要是介绍【CANN训练营-模型部署入门】【CANN训练营0基础赢满分秘籍】昇腾310的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算子
算子名称 | 参数 | 类型 | 功能说明 |
---|---|---|---|
YoloPreDetection | Feature Map | 输入 | 经过特征融合网络输出的特征图 |
Bounding Box Anchors | 输入 | 表示预定义的Bounding Box的锚定点 | |
Bounding Box Predictions | 输出 | 表示每个Anchor Box的预测边界框 | |
YoloV5DetectionOutput | 输入 | ||
IOU Threshold | 输入 | IoU阈值 | |
Score Threshold | 输入 | 置信度阈值 |
3.使用ATC工具,将onnx模型转成om模型,如果是C++的应用,可在ATC中需添加AIPP
以下为部分重要参数:
参数名称 | 参数功能 | 常用值 |
---|---|---|
–model | 原始模型文件路径与文件名。 | *****.onnx(文件名) |
–framework | 原始框架类型。 | 0:Caffe1:MindSpore3:TensorFlow5:ONNX |
–output | 转换后的离线模型的路径以及文件名。 | *****(文件名) |
–soc_version | 模型转换时指定芯片版本。 | Ascend310 |
Python版本的官方样例中:
预处理部分:
使用opencv/和numpy实现预处理:按照需要转换RGB格式,并进行数据归一化(/255),图像增强等操作
优化后的C++API下的部署,使用ATC工具配置AIPP(可参考昇腾社区的AIPP模板进行配置)
在AI core中进行图像预处理,实际上就是在模型输入上多加一个算子,把预处理放在NPU上进行
代码部分单独做一篇详细笔记
这篇关于【CANN训练营-模型部署入门】【CANN训练营0基础赢满分秘籍】昇腾310的Yolov5 模型部署全流程课堂笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!