欢迎光临散文网 会员登陆 & 注册

【CANN训练营-模型部署入门】【CANN训练营0基础赢满分秘籍】Yolov5 模型部署课堂笔记

2023-04-23 12:41 作者:白子不摆烂版  | 我要投稿

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上进行


代码部分单独做一篇详细笔记


【CANN训练营-模型部署入门】【CANN训练营0基础赢满分秘籍】Yolov5 模型部署课堂笔记的评论 (共 条)

分享到微博请遵守国家法律