YOLOv5 模型原理及代码解析
五,YOLOv5
YOLOv5
仅在 YOLOv4
发表一个月之后就公布了,这导致很多人对 YOLOv5
的命名有所质疑,因为相比于它的前代 YOLOv4
,它在理论上并没有明显的差异,虽然集成了最近的很多新的创新,但是这些集成点又和 YOLOv4
类似。我个人觉得之所以出现这种命名冲突应该是发布的时候出现了 “撞车”,毕竟 YOLOv4
珠玉在前(早一个月),YOLOv5
也只能命名为 5
了。但是,我依然认为 YOLOv5
和 YOLOv4
是不同的,至少在工程上是不同的,它的代码是用 Python
(Pytorch
) 写的,与 YOLOv4
的 C代码 (基于 darknet
框架)有所不同,所以代码更简单、易懂,也更容易传播。
另外,值得一提的是,YOLOv4
中提出的关键的 Mosaic
数据增强方法,作者之一就是 YOLOv5
的作者 Glenn Jocher
。同时,YOLOv5
没有发表任何论文,只是在 github
上开源了代码。
5.1,网络架构
通过解析代码仓库中的 .yaml
文件中的结构代码,YOLOv5
模型可以概括为以下几个部分:
Backbone
:Focus structure
,CSP network
Neck
:SPP block
,PANet
Head
:YOLOv3 head using GIoU-loss
5.2,创新点
5.2.1,自适应anchor
在训练模型时,YOLOv5
会自己学习数据集中的最佳 anchor boxes
,而不再需要先离线运行 K-means
算法聚类得到 k
个 anchor box
并修改 head
网络参数。总的来说,YOLOv5
流程简单且自动化了。
5.2.2, 自适应图片缩放
在常用的目标检测算法中,不同的图片长宽都不相同,因此常用的方式是将原始图片统一缩放到一个标准尺寸,再送入检测网络中。
5.2.3,Focus结构
Focus 结构可以简单理解为将 大小的输入图片 4 个像素分别取 1 个(类似于邻近下采样)形成新的图片,这样 1 个通道的输入图片会被划分成 4 个通道,每个通道对应的 WH 尺寸大小都为原来的 1/2,并将这些通道组合在一起。这样就实现了像素信息不丢失的情况下,提高通道数(通道数对计算量影响更小),减少输入图像尺寸,从而大大减少模型计算量。
以 Yolov5s 的结构为例,原始 640x640x3 的图像输入 Focus 结构,采用切片操作,先变成 320×320×12 的特征图,再经过一次 32 个卷积核的卷积操作,最终变成 320×320×32 的特征图。
5.3,四种网络结构
YOLOv5 通过在网络结构问价 yaml
中设置不同的 depth_multiple
和 width_multiple
参数,来创建大小不同的四种 YOLOv5
模型:Yolv5s、Yolv5m、Yolv5l、Yolv5x。
5.4,实验结果
各个版本的 YOLOv5
在 COCO
数据集上和 V100 GPU
平台上的模型精度和速度实验结果曲线如下所示。
参考资料
- 你一定从未看过如此通俗易懂的YOLO系列(从v1到v5)模型解读 (上)
- 你一定从未看过如此通俗易懂的YOLO系列(从v1到v5)模型解读 (中)
- 目标检测|YOLO原理与实现
- YOLO论文翻译——中英文对照
- Training Object Detection (YOLOv2) from scratch using Cyclic Learning Rates
- 目标检测|YOLOv2原理与实现(附YOLOv3)
- YOLO v1/v2/v3 论文
- https://github.com/BobLiu20/YOLOv3_PyTorch/blob/master/nets/yolo_loss.py
- https://github.com/Peterisfar/YOLOV3/blob/03a834f88d57f6cf4c5016a1365d631e8bbbacea/utils/datasets.py#L88
- 深入浅出Yolo系列之Yolov3&Yolov4&Yolov5&Yolox核心基础知识完整讲解
EVOLUTION OF YOLO ALGORITHM AND YOLOV5: THE STATE-OF-THE-ART OBJECT DETECTION ALGORITHM
- 点赞
- 收藏
- 关注作者
评论(0)