翻译:yolov5新版本——改进与评估(代码片段)

架构师易筋 架构师易筋     2022-12-25     739

关键词:

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系列:增加swin-transformer小目标检测头(代码片段)

💡统一使用YOLOv5代码框架,结合不同模块来构建不同的YOLO目标检测模型。🌟本项目包含大量的改进方式,降低改进难度,改进点包含【Backbone特征主干】、【Neck特征融合】、【Head检测头】、【注意力机制】、【IoU损失... 查看详情

改进yolov5系列:8.增加acmix结构的修改,自注意力和卷积集成(代码片段)

...进🏆、创新点改进👇💡YOLOAir项目:基于YOLOv5代码框架,结合不同模块来构建不同的YOLO目标检测模型。🌟本项目包含大量的改进方式,降低改进难度,改进点包含Backbone、Neck、Head、注意力机制、IoU损失函数... 查看详情

yolov5改进技巧详解(代码片段)

本文以yolov5-7.0的代码进行讲解yolov5的改进技巧。1.使用yolov5-p6以及yolov5-p7模型yolov5官方实现的代码,提供了多种架构的模型配置文件,包括:yolov3-spp,yolov5-bifpn,yolov5-p6,yolov5-p7,yolov5-panet,yolov5-transformer如果想训练不同架构的模型,... 查看详情

sh翻译:“osx10.10yosemite本地开发环境,apache,php和mysql与homebrew”:6。在较新版本的osx中,sites文件夹非默认存在:(代码片段)

查看详情

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

Elasticsearch5.0新版本的特性与改进时间 2016-07-2707:39:26  公众账号原文  http://mp.weixin.qq.com/s?__biz=MzA5NzkxMzg1Nw==&mid=2653160245&idx=1&sn=7e9482ec410cc89cf40c0f21724dae32&am 查看详情

yolov5改进之yolov5+gsconv+slimneck(代码片段)

论文题目:Slim-neckbyGSConv:Abetterdesignparadigmofdetectorarchitecturesforautonomousvehicles论文:https://arxiv.org/abs/2206.02424代码:https://github.com/AlanLi1997/Slim-neck-by-GSConv直接步入 查看详情

yolov5解析|第三篇:如何改进yolov5?(代码片段)

大家好,我是K同学啊!在前面的文章YOLOv5解析|第二篇:用YOLOv5训练自己的数据集(超级详细完整版)中我们介绍了使用训练自己的数据集。这一篇文章,我将带大家一起解析YOLOv5的6.0版本结构并改进模型&... 查看详情

php注册新版本的jquery与cdn(代码片段)

查看详情

yolov5解析|绘制results.csv文件数据对比图(代码片段)

...描述我们在写论文过程中,通常是需要附带上改进后YOLOv5算法与改进前YOLOv5算法的mAP_0.5值对比图,可以使用下面的代码来生成这个对比图。代码实现importcsvimportmatplotlib.pyplotaspltimportpandasaspdimportnumpyasnpplt.rcParams['font.san... 查看详情

目标识别yolov5针对小目标检测的改进模型/添加帧率检测(代码片段)

问题背景众所周知,YOLOv5会对输入的图片进行放缩,并进行32倍下采样。对于一些分辨率很高的遥感/无人机图片,小目标难以被训练识别。本篇博文就来尝试这篇博文YOLOV5模型和代码修改——针对小目标识别所提到的... 查看详情

jmeter之最佳实践(代码片段)

...方文档:http://jmeter.apache.org/usermanual/best-practices.html 翻译:16.最佳实践16.1始终使用最新版本的JMeterJMeter的性能正在不断提高,因此强烈建议用户使用最新版本。确保始终阅读更改列表以了解新的改进和组件。一定要避免使用... 查看详情

改进yolov5系列:10.最新hornet结合yolo应用首发!|eccv2022出品,多种搭配,即插即用|backbone主干递归门控卷积的高效高阶空间交互(代码片段)

...ir:面向小白科研的YOLO检测项目-GitHub💡统一使用YOLOv5代码框架,结合不同模块来构建不同的YOLO目标检测模型。🌟本项目包含大量的改进方式,降低改进难度,改进点包含【Backbone特征主干】、【Neck特征融合】、【H... 查看详情

芒果改进目录一览|改进yolov5yolov7等yolo模型全系列目录(代码片段)

...进文章,内均包含多种模型改进方式,均适用于YOLOv5系列以及YOLOv7系列改进(重点)!!!🔥专栏创新点教程均有不少同学反应和我说已经在自己的数据集上有效涨点啦!!包括COCO数据集... 查看详情

23年车辆检测+车距检测+行人检测+车辆识别+车距预测(附yolov5最新版源码)(代码片段)

我们先看一下效果2023年最新版yolo车距行人识别yolov5和v7对比yolo车距其他步骤参考另外一篇文章:yolo车辆测距+车辆识别+单目测距(双目测距)_SYBH.的博客-CSDN博客_yolo测距基于yolo目标检测算法实现的车前道路中... 查看详情

目标检测算法——yolov5/yolov7改进之结合​repvgg(速度飙升)(代码片段)

关注“PandaCVer”公众号>>>深度学习Tricks,第一时间送达<<<目录RepVGG——极简架构,SOTA性能!!!(一)前沿介绍1.RepVGGBlock模块2.相关实验结果(二)YOLOv5/YOLOv7改进之结合​RepV 查看详情

yolox改进之模型轻量化(lite)(代码片段)

文章内容:给YOLOv5-Lite系列轻量级模型换上YOLOX头部环境:pytorch1.7+cuda11.0注意:YOLOv5版本为5.0,可以匹配YOLOX的主干网络与neck部分一、参考资料参考资料1:YOLOv5-Lite:代码链接:https://github.com/ppogg/YOL... 查看详情

pytorch机器学习——yolov5中nms非极大值抑制与diou-nms等改进(代码片段)

Pytorch机器学习(八)——YOLOV5中NMS非极大值抑制与DIOU-NMS等改进目录Pytorch机器学习(八)——YOLOV5中NMS非极大值抑制与DIOU-NMS等改进前言一、NMS非极大值抑制算法二、Hard-NMS非极大值代码三、DIOU-NMS 四、soft-NMS前... 查看详情

yolov5结构分析与理解—图解(代码片段)

...detect.py测试 各个模块 整体结构其他资料4种网络的宽度yolov5各个网络模型性能比较 yolov5结构​ yolov5四种网络的深度 yolov5网络结构图一些工具代码voc2yolo.py        YOLOv5是一种单阶段目标检测算法,该算法在YOLOv4的基... 查看详情