模型推理 : YOLOv5 目标检测
本实验主要介绍基于寒武纪推理引擎 MagicMind 的 YOLOv5m (PyTorch, Python, FP32) 目标检测推理应用的开发方法
难易程度: 初级 |实验人次:5465
一、内容及目标
1. 实验内容
- 本实验主要介绍基于寒武纪推理引擎 MagicMind 的 YOLOv5m (PyTorch, Python, FP32) 目标检测推理应用的开发方法。
- 基于 YOLOv5m 检测网络和寒武纪推理引擎 MagicMind,您可以读取本地图像数据作为输入,对图像数据中的目标物体进行时识别,得到物体的在图像中的坐标、置信度以及类别。
2. 实验目标
- 掌握使用寒武纪推理引擎 MagicMind 进行模型推理的基本方法。
- 理解 YOLOv5m 模型的整体网络结构及其开发调试细节。
二、前置知识
1. 寒武纪软硬件平台介绍
- 硬件:寒武纪 MLU370 系列 AI 加速卡
- 框架:PyTorch 1.6、MagicMind 0.14.0
2. MagicMind介绍
MagicMind 是⾯向寒武纪 MLU370 (寒武纪处理器,简称MLU) 的推理加速引擎。 MagicMind 能将人工智能框架(Tensorflow,PyTorch 等)训练好的算法模型转换成 MagicMind 统⼀计算图表⽰,并提供端到端的模型优化、代码⽣成以及推理业务部署能⼒。用户无需过多关注底层硬件细节,只需专注于推理业务开发。
获取更多有关 MagicMind 资料,请参考 [寒武纪官网文档] MagicMind 相关内容。
三、网络结构
针对不同大小(n,s,m,l,x)的网络,YOLOv5的整体架构不变,但会根据yaml文件中定义的depth_mutiple
和width_mutiple
参数,对每个子模块进行不同深度和宽度的缩放。
以 [YOLOv5m] 为例,其网络结构主要由以下几部分组成:
- Backbone: Conv(CBS), C3, SPPF
- Head: Conv(CBS), C3, Upsample, Concat
- Detect: Decode, nms, topk (CPU端运行,不参与训练)
网络结构如下图所示:
其中:
- CBS: 由 Conv + BN2d + SiLU 三者组成
- C3: [CSP Bottleneck] with 3 convolutions,结构图上图所示
- SPPF: Spatial Pyramid Pooling (Fast),空间金字塔池化结构,功能不变前提下提升运行速度
四、模型推理
模型推理整体流程如下图所示,主要包含模型工程准备,模型生成和模型推理三部分:
1. 工程准备
- 原生工程下载:下载原始 YOLOv5 工程,本实验已经提供工程环境,yolov5 源代码在
src/models/
目录下。 - 预训练模型下载:下载 yolov5m 预训练权重,并将其放置于
yolov5_model
目录下。 - 搭建环境:安装本实验所需要的额外环境。
2. 模型生成
- 构建融合图:用 PyTorch 框架构建 yolov5m 模型,使用 jit.trace 工具把网络编译为融合图并保存,方便 MagicMind 后期 parser 操作。
- Network 和 BuildConfig 配置: MagicMind ⽀持直接导⼊框架训练好的模型,并表⽰成 Network 对象。模型导⼊⼯作由 Parser 来完成。MagicMind 还提供了BuilderConfig 来配置 Builder 的行为,通过 BuilderConfig 设置,用户可配置硬件平台,输入摆数,归一化参数等信息。
- 生成 MagicMind 模型:调用 MagicMind 的
build_model
接口生成模型,build_model
⽣成的模型中包含MLU指令、权值、图结构等静态数据。⽣成的模型可以序列化到⽂件或内存,或从⽂件或内存反序列化,从⽽满⾜跨平台部署需求。
3. 模型推理
- 前处理:通过缩放比例,padding 处理返回处理后的图像数据。
- 利用 MagicMind 进行推理的具体过程如下图所示:
iii. 后处理:MagicMind 处理完后,还需要在 CPU 上进行 NMS ,坐标映射回原图等操作。
五、相关链接
实验代码仓库:https://gitee.com/cambricon/practices
ModelZoo仓库:https://gitee.com/cambricon/modelzoo