模型训练 : YOLOv5 目标检测
一、内容和目标
1. 实验内容
本实验主要介绍基于寒武纪 MLU370 (寒武纪处理器,简称MLU) 与寒武纪 PyTorch 框架的YOLOv5(v6.0版本)目标检测训练方法。在官方源码的基础上,只需要进行简单移植和修改便可在 MLU370 加速训练 YOLOv5 算法,实现目标检测的功能。
2. 实验目标
- 掌握使用寒武纪 MLU370 和 PyTorch 框架进行模型训练的基本方法。
- 理解 YOLOv5 模型的整体网络结构及其适配流程。
二、前置知识
1. 寒武纪软硬件平台介绍
- 硬件:寒武纪 MLU370 系列 AI 加速卡
- 框架:PyTorch 1.9
2. 寒武纪 PyTorch 框架
为⽀持寒武纪 MLU 加速卡,寒武纪定制了开源⼈⼯智能编程框架PyTorch(以下简称 Cambricon PyTorch)。
Cambricon PyTorch 借助 PyTorch ⾃⾝提供的设备扩展接⼝将 MLU 后端库中所包含的算⼦操作动态注册到 PyTorch 中,MLU 的后端库可处理 MLU 上的张量和⽹络算⼦的运算。Cambricon PyTorch 会基于 CNNL 库在 MLU 后端实现常⽤⽹络算⼦的计算,并完成数据拷⻉。
Cambricon PyTorch 兼容原⽣ PyTorch 的 Python 编程接⼝和原⽣ PyTorch ⽹络模型,⽀持以在线逐层⽅式进⾏训练和推理。⽹络权重可以从 pth 或 pt 格式⽂件读取,已⽀持的分类和检测⽹络结构由 Torchvision 管理,可以从 Torchvision 中读取。对于训练任务,⽀持 float32 及定点量化模型。
获取更多有关Cambricon PyTorch资料,请参考 [寒武纪官网文档] PyTorch相关内容。
三、网络结构
针对不同大小(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),空间金字塔池化结构,功能不变前提下提升运行速度
四、模型训练
模型训练分为以下四个步骤:
- 【工程准备】:安装依赖环境,下载源码、数据集和模型等
- 【移植修改】:为便于用户移植和修改,本次实验通过patch方式将适配后的训练代码应用于源码,使得能够在寒武纪 MLU 上实现训练
- 【训练】:本文提供了3种训练方式:
-
- Training: 基于数据从头开始训练
- From pretrained training:基于原始代码权重文件进行训练
- Resume Training:在上次训练基础上继续训练
- 【精度验证】:提供脚本测试训练的精度
五、相关链接
实验代码仓库:https://gitee.com/cambricon/practices
ModelZoo仓库:https://gitee.com/cambricon/modelzoo