模型训练 : YOLOv5 目标检测

模型训练 : YOLOv5 目标检测

本实验主要介绍基于寒武纪 MLU370 与寒武纪 PyTorch 框架的YOLOv5(v6.0版本)目标检测训练方法
难易程度: 初级|实验人次:5498

一、内容和目标

 

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_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),空间金字塔池化结构,功能不变前提下提升运行速度

 

四、模型训练

模型训练分为以下四个步骤:

  1. 【工程准备】:安装依赖环境,下载源码、数据集和模型等
  2. 【移植修改】:为便于用户移植和修改,本次实验通过patch方式将适配后的训练代码应用于源码,使得能够在寒武纪 MLU 上实现训练
  3. 【训练】:本文提供了3种训练方式:
    • Training: 基于数据从头开始训练
    • From pretrained training:基于原始代码权重文件进行训练
    • Resume Training:在上次训练基础上继续训练
  1. 【精度验证】:提供脚本测试训练的精度

 

五、相关链接

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

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

申 请 试 用