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 中查看以下两个指南中的任何一个:

  • 如何训练 YOLO v4 教程(在 Darknet Repo 中)
  • 如何训练 YOLO v5 教程(在 Ultralytics Repo 中)
    祝你检测顺利!

想要训练自定义模型?

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

参考

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

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

翻译:YOLOv5 新版本——改进与评估相关推荐

  1. 目标检测算法——YOLOv5/YOLOv7改进之结合GAMAttention

    >>>深度学习Tricks,第一时间送达<<< 目录 超越CBAM,全新注意力GAM:不计成本提高精度! (一)前沿介绍 1.GAM结构图 2.相关实验结果 (二) ...

  2. 【YOLOv7/YOLOv5系列改进NO.51】融入多分支空洞卷积结构RFB-Bottleneck改进PANet构成新特征融合网络

    文章目录 前言 一.解决问题 二.基本原理 三.​添加方法 四.总结 前言 作为当前先进的深度学习目标检测算法YOLOv7,已经集合了大量的trick,但是还是有提高和改进的空间,针对具体应用场景下的 ...

  3. 【YOLOv7/YOLOv5系列改进NO.50】超越ConvNeXt!Conv2Former:用于视觉识别的Transformer风格的ConvNet

    文章目录 前言 一.解决问题 二.基本原理 三.​添加方法 四.总结 前言 作为当前先进的深度学习目标检测算法YOLOv7,已经集合了大量的trick,但是还是有提高和改进的空间,针对具体应用场景下的 ...

  4. ​目标检测算法——YOLOv5/YOLOv7改进之结合​SOCA(单幅图像超分辨率)

    >>>深度学习Tricks,第一时间送达<<< 目录 CVPR19 单幅图像超分辨率来了!!! (一)前沿介绍 论文题目:Second-order Attentio ...

  5. [YOLOv7/YOLOv5系列改进NO.44]融入适配GPU的轻量级 G-GhostNet

    文章目录 前言 一.解决问题 二.基本原理 三.​添加方法 四.总结 前言 作为当前先进的深度学习目标检测算法YOLOv7,已经集合了大量的trick,但是还是有提高和改进的空间,针对具体应用场景下的 ...

  6. 目标检测算法——YOLOv5/YOLOv7改进之结合​RepVGG(速度飙升)

    >>>深度学习Tricks,第一时间送达<<< 目录 RepVGG--极简架构,SOTA性能!!! (一)前沿介绍 1.RepVGGBlock模块 2.相关实验结果 ...

  7. 目标检测算法——YOLOv5/YOLOv7改进之结合​PP-LCNet(轻量级CPU网络)

    >>>深度学习Tricks,第一时间送达<<< 目录 ​PP-LCNet--轻量级且超强悍的CPU级骨干网络!! (一)前沿介绍 1.PP-LCNet主要模块 2. ...

  8. 魔改算法——YOLOv5/YOLOv7改进系列汇总

    魔改YOLO系列算法改进: 改进YOLOv5/YOLOv7--魔改YOLOv5/YOLOv7提升检测精度__加勒比海带66的博客 目标检测算法--YOLOv7训练自己的数据集(保姆级教程) 目标检测算 ...

  9. 一次CMMI虚假改进、评估的案例

    早晨起来收到CMMI研究所发给所有主任评估师的一封邮件,是一个老外主任评估师,在中国的最近的一个评估经历.看到之后,心情极其沉重.这不是第一次看到.听到业内的这种做法,虽然以前,CMMI研究所的各方面 ...

  10. 「翻译」SAP MM 供应商评估流程初阶

    SAP MM 供应商评估流程初阶 Part I : 供应商评估流程的几个配置点 定义Weighting Keys 配置路径:SPRO>MM>Purchasing >Vendor Ev ...

最新文章

  1. 基类的析构函数为什么要设置成virtual
  2. 新款 iPad 写代码 真香,包邮送一个!
  3. 《AOSuite 开发手册》之AOSuite 服务端开发
  4. pyharm虚拟环境_手把手教你如何在Pycharm中加载和使用虚拟环境
  5. 高效的组合数计算方法
  6. C#开发ActiveX控件及制作CAB包
  7. 《LUA游戏开发实践指南》学习笔记1
  8. IOS学习笔记04---编写第一个C语言程序-Hello World
  9. vue 文件目录结构详解
  10. linux deploy下载地址,Linux部署 Linux Deploy
  11. 微信内置浏览器 长按识别二维码 功能的两三个坑与解决方案
  12. 简单复制粘贴个linux红帽6
  13. 高通笔记本装linux,在华硕畅370(TP370QL)骁龙笔记本上安装Ubuntu 18.04 ARM64的方法...
  14. voc2007,voc2012数据集快速下载方法
  15. Android日历控件方法,Android日历控件的实现方法
  16. ViewPage实现一屏多页面显示(进阶版)
  17. 笨鸟先飞学编程系列之二 基础代码的编写
  18. 2021-2027全球与中国拆弹机器人市场现状及未来发展趋势
  19. 阿里云的端口映射问题
  20. html3d粒子球,Canvas粒子系统:3D球体

热门文章

  1. 如何删除git本地分支
  2. 多维动态数组c语言,C语言多维动态数组的实现
  3. python语言数值操作符_Python之组合数据类型、逻辑操作符、控制流语句、算术操作符...
  4. java实现水仙花数int_java实现水仙花数的计算|chu
  5. css伪元素总结(内附实例)
  6. 【转】Topshelf 搭建 Windows 服务
  7. vue-router个人总结
  8. vue插件开发练习--实用弹窗
  9. 苹果iCloud大调整:干掉1TB版本,2TB降价
  10. 树莓派 Raspberry-Pi 折腾系列:系统安装及一些必要的配置