翻译:YOLOv5 新版本——改进与评估

Posted 架构师易筋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了翻译:YOLOv5 新版本——改进与评估相关的知识,希望对你有一定的参考价值。

2020年 6 月 25 日,第一个正式版 YOLOv5由 Ultralytics 发布。在这篇文章中,我们将讨论第一个YOLOv5版本中部署的新技术,并分析新模型的初步性能结果。

6/25 - YOLOv5 的初始版本显示了最先进的对象检测的前景(引用 YOLOv5 存储库)

在图表中,目标是生成一个相对于其推理时间(X 轴)非常高效(Y 轴)的对象检测器模型。初步结果表明,相对于其他最先进的技术,YOLOv5 在这方面做得非常好。

总之,YOLOv5 的大部分性能改进来自 PyTorch 训练过程,而模型架构仍然接近YOLOv4。

在本文中,我们希望解决以下有关 YOLOv5 的一些问题:

  • YOLO v5 有什么新东西?
  • YOLO v5 有哪些新技术?
  • YOLO v5 与 YOLO v4 相比如何?
  • YOLO v4 和 YOLO v5 有什么不同?
  • 我应该使用 YOLO v4 还是 YOLO v5 进行物体检测?
  • YOLO v5 是“真实的”吗?


Video链接:https://youtu.be/O4jOqVqyAo8

1. YOLOv5 发展历程

1.1 YOLO 的历史

要深入了解 YOLO 的历史,我建议阅读YOLOv4 的完整细分。简而言之,YOLO 模型是一种快速紧凑的物体检测模型,相对于其大小而言性能非常好,并且一直在稳步改进。

1.2 YOLOv3 PyTorch 的扩展

该YOLOv5库是一个自然延伸YOLOv3 PyTorch库由格伦Jocher。YOLOv3 PyTorch 存储库是开发人员将 YOLOv3 Darknet 权重移植到 PyTorch 然后继续生产的热门目的地。许多人(包括我们在 Roboflow 的视觉团队)喜欢 PyTorch 分支的易用性,并会使用这个出口进行部署。

在完全复制 YOLOv3 的模型架构和训练过程后,Ultralytics 开始在重新设计存储库的同时进行研究改进,目标是使成千上万的开发人员能够训练和部署他们自己的自定义对象检测器来检测世界上的任何对象,这是我们在此分享的目标在 Roboflow。

1.3 新的 YOLOv5 存储库进展


这些改进最初被称为 YOLOv4,但由于最近在 Darknet 框架中发布了 YOLOv4,为了避免版本冲突,它被重命名为 YOLOv5。一开始对 YOLOv5命名有很多争论,我们发表了一篇比较 YOLOv4 和 YOLOv5的文章,您可以在自己的数据上并排运行这两种模型。我们在本文中避免自定义数据集比较,仅讨论 YOLO 研究人员在 GitHub 讨论中发布的新技术和指标。

值得注意的是,自从存储库发布以来,YOLOv5 已经发生了重大的研究进展,我们希望继续进行,并且可能会为 YOLO-“绰号”提供一些理由。

2. YOLO 架构概述

对象检测器旨在从输入图像中创建特征,然后通过预测系统将这些特征提供给对象,以在对象周围绘制框并预测它们的类别。

物体检测器的剖析(引文)

YOLO 模型是第一个在端到端可微分网络中将预测边界框与类标签的过程连接起来的对象检测器。

物体检测过程的另一张图(引自 YOLOv4)
YOLO 网络由三个主要部分组成。

  1. Backbone - 一种卷积神经网络,以不同的粒度聚合并形成图像特征。

2)Neck-一系列用于混合和组合图像特征的层,以将它们传递给预测。

  1. Head -使用颈部的特征并进行框和类别预测步骤。

当然,可以采用多种方法来组合每个主要组件的不同架构。YOLOv4 和 YOLOv5 的贡献首先是整合了计算机视觉其他领域的突破,并证明作为一个集合,它们改进了 YOLO 对象检测。

3. YOLO 训练程序概述

训练过程对于目标检测系统的最终性能同样重要,尽管它们通常很少被讨论。

  • 数据增强 -数据增强对基础训练数据进行转换,以将模型暴露在比单独训练集更广泛的语义变化中。

  • 损失计算 - YOLO 从组成损失函数 - GIoU、obj 和类损失计算总损失函数。这些可以仔细构建以最大化平均精度的目标。

4. PyTorch 翻译


YOLOv5 最大的贡献是将 Darknet 研究框架转化为 PyTorch 框架。Darknet 框架主要用 C 编写,对编码到网络中的操作提供细粒度的控制。在许多方面,对低级语言的控制对研究来说是一种福音,但它会使新研究见解的移植速度变慢,因为每个新添加的内容都会编写自定义梯度计算。

在 YOLOv3 中将 Darknet 中的训练程序翻译(并超越)到 PyTorch 的过程是不小的壮举。

5. YOLOv5 中的数据增强

要深入了解数据增强如何改进对象检测模型,我建议阅读这篇关于YOLOv4 中数据增强的文章

这是 YOLOv5 中增强训练图像的图片。

YOLOv5 中的增强

对于每个训练批次,YOLOv5 通过数据加载器传递训练数据,该数据加载器在线增加数据。数据加载器进行三种增强:缩放、色彩空间调整和马赛克增强。其中最新颖的是马赛克数据增强,它将四个图像组合成四个随机比例的图块。

镶嵌数据加载原产于YOLOv3 PyTorch现在YOLOv5回购。

Mosaic 增强对于流行的COCO 对象检测基准特别有用,可帮助模型学习解决众所周知的“小对象问题” ——其中小对象的检测不如大对象准确。

值得注意的是,值得尝试使用您自己的一系列增强功能来最大限度地提高自定义任务的性能。

6. 自动学习边界框锚

为了进行框预测,YOLO 网络将边界框预测为与锚框尺寸列表的偏差。

(引用 YOLOv3 论文)

在 YOLOv3 PyTorch repo 中,Glenn Jocher 介绍了使用 K-means 和遗传学习算法基于自定义数据集中边界框的分布来学习锚框的想法。这对于自定义任务非常重要,因为边界框大小和位置的分布可能与 COCO 数据集中预设的边界框锚点有很大不同。

如果我们试图检测像非常高而瘦的长颈鹿或非常宽而平坦的蝠鲼之类的东西,则可能会出现锚框的最极端差异。

# parameters
nc: 80  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple

# anchors
anchors:
  - [116,90, 156,198, 373,326]  # P5/32
  - [30,61, 62,45, 59,119]  # P4/16
  - [10,13, 16,30, 33,23]  # P3/8

# YOLOv5 backbone

YOLOv5 配置文件中的锚点现在可以根据训练数据自动学习。

当您输入自定义数据时,所有 YOLO 锚框都会在 YOLOv5 中自动学习。

7. 16 位浮点精度

PyTorch 框架允许将训练和推理中的浮点精度从 32 位精度降低到 16 位精度的一半。这显着加快了 YOLOv5 模型的推理时间。

但是,这种改进带来的速度提升目前仅适用于特定 GPU——即 V100 和 T4。也就是说,NVIDIA 已经写下意图来扩大他们对这种效率提升的覆盖范围。

8. 新模型配置文件

YOLOv5 在 中制定模型配置.yaml,而不是.cfg 暗网中的文件。这两种格式的主要区别在于,.yaml文件被压缩为仅指定网络中的不同层,然后将它们乘以块中的层数。新.yaml格式如下所示:

# parameters
nc: 80  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple

# anchors
anchors:
  - [116,90, 156,198, 373,326]  # P5/32
  - [30,61, 62,45, 59,119]  # P4/16
  - [10,13, 16,30, 33,23]  # P3/8

# YOLOv5 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Focus, [64, 3]],  # 0-P1/2
   [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
   [-1, 3, BottleneckCSP, [128]],
   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
   [-1, 9, BottleneckCSP, [256]],
   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
   [-1, 9, BottleneckCSP, [512]],
   [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32
   [-1, 1, SPP, [1024, [5, 9, 13]]],
  ]

# YOLOv5 head
head:
  [[-1, 3, BottleneckCSP, [1024, False]],  # 9

   [-1, 1, Conv, [512, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P4
   [-1, 3, BottleneckCSP, [512, False]],  # 13

   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 4], 1, Concat, [1]],  # cat backbone P3
   [-1, 3, BottleneckCSP, [256, False]],
   [-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1]],  # 18 (P3/8-small)

   [-2, 1, Conv, [256, 3, 2]],
   [[-1, 14], 1, Concat, [1]],  # cat head P4
   [-1, 3, BottleneckCSP, [512, False]],
   [-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1]],  # 22 (P4/16-medium)

   [-2, 1, Conv, [512, 3, 2]],
   [[-1, 10], 1, Concat, [1]],  # cat head P5
   [-1, 3, BottleneckCSP, [1024, False]],
   [-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1]],  # 26 (P5/32-large)

   [[], 1, Detect, [nc, anchors]],  # Detect(P5, P4, P3)
  ]

9. CSP骨干网

YOLOv4 和 YOLOv5 都实现了 CSP Bottleneck 来制定图像特征 - 研究信用指向WongKinYiu和他们最近关于卷积神经网络主干的跨阶段部分网络的论文。CSP 解决了其他较大的 ConvNet 主干中的重复梯度问题,导致参数更少,FLOPS 更少,具有可比的重要性。这对 YOLO 家族极其重要,其中推理速度和小模型尺寸至关重要。

CSP 模型基于 DenseNet。DenseNet 旨在连接卷积神经网络中的层,其动机如下:减轻梯度消失问题(很难通过非常深的网络反向传播损失信号),支持特征传播,鼓励网络重用特征,并减少网络参数的数量。


在 CSPResNext50 和 CSPDarknet53 中,DenseNet 已被编辑以通过复制它并通过密集块发送一个副本并将另一个直接发送到下一阶段来分离基础层的特征图。CSPResNext50 和 CSPDarknet53 的想法是消除 DenseNet 中的计算瓶颈,并通过传递未经编辑的特征图版本来改进学习。

10. PA-网颈

YOLOv4 和 YOLOv5 都实现了 PA-NET 颈部来进行特征聚合。

上面的每个 P_i 都代表 CSP 主干中的一个特征层。

上图来自谷歌大脑对EfficientDet对象检测架构的研究。EfficientDet 的作者发现 BiFPN 是检测颈部的最佳选择,这可能是 YOLOv4 和 YOLOv5 与其他实现一起探索的进一步稳定的领域。

这里当然值得注意的是,YOLOv5 借用了 YOLOv4 的研究调查来决定其架构的最佳颈部。YOLOv4 研究了最佳 YOLO 琴颈的各种可能性,包括:

  • FPN
  • PAN
  • NAS-FPN
  • BiFPN
  • ASFF
  • SFAM

11. 开发人员的一般生活质量更新

与其他对象检测框架相比,YOLOv5对于将计算机视觉技术实施到应用程序中的开发人员来说非常容易使用。我将这些生活质量更新分为以下几类。

  • 轻松安装- YOLOv5 只需要安装Torch 和一些轻量级的 Python 库。
  • 快速培训-该YOLOv5模型快速培训极为打造属于您的模型,有助于削减成本的试验。
  • 有效的推理端口- 您可以使用 YOLOv5 对单个图像、批处理图像、视频源或网络摄像头端口进行推理。
  • 直观的布局 - 开发时文件夹布局直观且易于导航
  • 轻松转换到移动设备 -您可以轻松地将 YOLOv5 从 PyTorch 权重转换为 ONXX 权重,再到 CoreML 到 ios

12. 初步评估指标

本节中提供的评估指标是初步的,我们可以期待在研究工作完成并且对 YOLO 模型系列做出更多新贡献时,将在 YOLOv5 上发表正式的研究论文。也就是说,在研究论文发表之前,为正在考虑使用哪种框架的开发人员提供这些指标很有用。

下面的评估指标基于 COCO 数据集的性能,该数据集包含包含 80 个对象类的广泛图像。有关性能指标更详细,请参阅这篇文章W¯¯帽子地图。

YOLOv4 官方论文发布了以下评估指标,它们在 V100 GPU 上的 COCO 数据集上运行他们的训练网络:

随着第一个 YOLOv5 V1 模型的初始发布,YOLOv5 存储库发布了以下内容:


这些图反转了 X 轴 - FPS 与 ms/img,但我们可以快速反转 YOLOv5 轴以估计相同 V100 GPU 上大约 200-300FPS 的 FPS 数字,同时实现更高的 mAP。

同样重要的是要注意YOLOv4-tiny的新版本,这是暗网存储库中一个非常小且性能非常好的模型。

YOLOv4-tiny的评估指标如下:

这意味着它非常快且非常高效。但这里要注意的重要一点是评估指标是 AP_50 - 这意味着 50% iOU 时的平均精度。考虑到这个更宽松的指标,我们必须与 YOLOv5 的完整表进行比较:

我们可以看到 YOLOv5s(速度和模型大小相似的模型)达到了 55.8 AP_50。

由于 YOLOv4-tiny 模型是在 1080Ti 上评估的,这比 YOLOv5 表中使用的 V100 慢 2 倍,因此这里的比较稍微复杂一些。

毋庸置疑,将会有更多精确匹配的基准测试出现,并且一些正在此 GitHub 问题中进行。WongKinYiu 是上述 CSP 存储库的作者和 YOLOv4 的第二作者,提供了可比较的基准。


从这个角度来看,YOLOv4 成为了更优秀的架构。然而值得注意的是,在这个比较中,YOLOv4 在 Ultralytics YOLOv3 存储库(不是原生暗网)中进行了训练,包括 YOLOv5 存储库中的大部分训练增强,显示了 mAP 的改进。

更多来这里我相信。

13. 结论

退后一步,现在是从事计算机视觉工作的好时机,其中最先进的技术发展如此迅速。

YOLOv5的初始版本非常快速、高性能且易于使用。虽然 YOLOv5 尚未对 YOLO 模型系列引入新颖的模型架构改进,但它引入了一个新的 PyTorch 训练和部署框架,改进了对象检测器的最新技术。此外,YOLOv5 非常用户友好,可以“开箱即用”地用于自定义对象。

如果您有兴趣使用最先进的 YOLO 模型来训练自定义检测器,我们鼓励您在 Google Colab 中查看以下两个指南中的任何一个:

想要训练自定义模型?

跳过这篇文章,直接跳到我们的YOLOv5 教程。您将在几分钟内在自定义数据上拥有一个经过训练的 YOLOv5 模型。

参考

https://blog.roboflow.com/yolov5-improvements-and-evaluation/

https://zhuanlan.zhihu.com/p/161083602

以上是关于翻译:YOLOv5 新版本——改进与评估的主要内容,如果未能解决你的问题,请参考以下文章

ES5.0 新版本的特性与改进

改进YOLOv5系列:增加Swin-Transformer小目标检测头

技术|TensorFlow和PyTorch发布新版本,都更新了什么?

改进YOLOv5系列:8.增加ACmix结构的修改,自注意力和卷积集成

博客3:YOLOv5车牌识别实战教程:模型训练与评估

Pytorch机器学习—— YOLOV5中NMS非极大值抑制与DIOU-NMS等改进