模型推理:YOLOv5 目标检测

模型推理:YOLOv5 目标检测

本实验主要介绍基于MagicMind的YOLOv5m 目标检测推理应用的开发方法。
难易程度: 中级|实验人次:2118

一、内容和目标

 

1. 实验内容

  1. 本实验主要介绍基于寒武纪 MLU370 MagicMind 平台的YOLOv5m (PyTorch, Python, INT8)目标检测推理应用的开发方法,其中性能优化操作包括:INT8量化、集成后处理自定义算子。

  2. 基于 YOLOv5m 检测网络和寒武纪 MLU370 MagicMind 平台,您可以读取本地图像数据作为输入,对图像数据中的目标物体进行时识别,得到物体的在图像中的坐标、置信度以及类别。

 

2. 实验目标

  1. 掌握使用寒武纪推理引擎 MagicMind 进行模型量化推理及融合算子的基本方法。

  2. 理解 YOLOv5m 模型的整体网络结构及其开发调试细节。

 

二、前置知识

 

1. 寒武纪软硬件平台介绍

  • 硬件:寒武纪 MLU370 AI 加速卡

  • 框架:PyTorch 1.6、MagicMind 0.14.0

 

2. MagicMind 介绍

MagicMind 是⾯向寒武纪 MLU370 (寒武纪处理器,简称MLU) 的推理加速引擎。 MagicMind 能将人工智能框架(TensorFlow,PyTorch 等)训练好的算法模型转换成 MagicMind 统⼀计算图表⽰,并提供端到端的模型优化、代码⽣成以及推理业务部署能⼒。用户无需过多关注底层硬件细节,只需专注于推理业务开发。

获取更多有关 MagicMind 资料,请参考 寒武纪官网文档中的相关内容。

 

三、网络结构

针对不同大小(n,s,m,l,x)的网络,YOLOv5的整体架构不变,但会根据yaml文件中定义的depth_mutiplewidth_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),空间金字塔池化结构,功能不变前提下提升运行速度

注意后处理部分也使用 MLU 进行计算得出。

 

四、模型推理

模型推理整体流程如下图所示,主要包含模型工程准备,模型转换和模型推理三部分。

 

STEP 1. 工程准备

  1. 原生工程下载:下载原始 YOLOv5 工程,本实验已经提供工程环境,yolov5源代码在src/models/目录下。

  2. 预训练模型下载:下载 yolov5m 预训练模型,并将其放置于yolov5_model目录下,本实验的sh已自动操作。

  3. 搭建环境:安装本实验所需的额外环境,本实验的sh 已自动操作。

 

STEP 2. 模型转换

  1. 删除yolov5m模型的原始后处理算子:需要修改 models/yolo.py Detect类代码,然后重新生成不带后处理的 YOLOv5m pt 模型。

  2. 重新生成pt 的模型

  3. 配置量化数据校准器:MagicMind 提供了量化校准器(Calibrator),它⽀持 post-training 量化功能,能够基于浮点模型和样本数据计算并设置数据的分布范围,并且可以根据权重数据的分布特点,选择不同的量化粒度。

  4. 添加MagicMind 高性能 yolov5后处理算子:MagicMind 框架算子库中已集成高性能 yolov5 后处理算子。基于寒武纪硬件平台,该算子使用寒武纪 BANG C 语言编写,相对原始 YOLOv5 后处理算子做了线性代数加速操作,使得性能大幅提升。

  5. 执行量化并保存MagicMind 模型:使用 MagicMind 模型生成接口可以生成MagicMind 二进制模型,用于下一步的 MagicMind 推理。

 

STEP 3. 模型推理

  1. 前处理:通过缩放比例,padding处理返回处理后的图像数据。

  2. 利用 MagicMind 进行推理:

   3. 后处理:MagicMind 统一处理 NMS 等后处理操作。

 

五、相关链接

实验代码仓库:https://gitee.com/cambricon/practices

Modelzoo仓库:https://gitee.com/cambricon/modelzoo

 

申 请 试 用