YOLO V8 曾经在本月公布了,咱们这篇文章的目标是对整个 YOLO 家族进行比拟剖析。理解架构的演变能够更好地晓得哪些改良进步了性能,并且明确哪些版本是基于那些版本的改良,因为 YOLO 的版本和变体的命名是目前来说最乱的,心愿看完这篇文章之后你能对整个家族有所理解。
在 YOLO 呈现之前,检测图像中对象的次要办法是应用不同大小的滑动窗口顺次通过原始图像的各个局部,以便分类器显示图像的哪个局部蕴含哪个对象。这种办法是合乎逻辑的,但十分缓慢。
通过了一段时间的倒退,一个非凡的模型呈现了:它能够裸露感兴趣的区域,但即使是这样还是太多了。速度最快的算法 Faster R-CNN 均匀在 0.2 秒内解决一张图片,也就是每秒 5 帧。
在以前的办法中,原始图像的每个像素都须要被神经网络解决几百次甚至几千次。每次这些像素都通过同一个神经网络进行雷同的计算。有没有可能做些什么来防止反复同样的计算?
事实证明这是可能的。然而为了这个,咱们必须略微从新定义这个问题。如果早些时候它是一个分类工作,那么当初它曾经变成了一个回归工作。
YOLO / YOLOv1
第一个 YOLO 模型,也称为 YOLOv1。
Joseph Redmon, Santosh Divvala, Ross Girshick, Ali Farhadi
“You Only Look Once: Unified, Real-Time Object Detection”2015/06 https://arxiv.org/pdf/1506.02…,
除了基于 Darknet 框架的官网实现外,在其余罕用框架上也有大量各种风行的实现,这里就不列举了
Pascal VOC 2007 上的实时零碎比拟的性能和速度。Fast YOLO 是 Pascal VOC 检测记录中最快的模型,而其准确度也是其余实时检测器的两倍。YOLO 的精度比 Fast 版本高 10 mAP,但速度仍远高于其余模型。
架构
在结构上,YOLO 模型由以下局部组成:
- Input ——输出图像被馈送到的输出层
- Backbone ——输出图像以特色模式编码的局部。
- Neck ——这是模型的其余局部,用于解决由特色编码的图像
- Head(s)——一个或多个产生模型预测的输入层。
该网络的第一个版本基于 GoogLeNet 的架构。它是与 MaxPool 交织的级联卷积层。级联以两个齐全连贯的层作为输入。
作者训练了一个更快版本的 Fast YOLO 架构,蕴含更少的卷积层(9 个而不是 24 个)。两个模型的输出分辨率都是 448×448,然而网络次要局部的预训练就像一个分辨率为 224×224 的分类器。
在这个架构中,原始图片被分成 S x S 个单元格(最后 7 x 7),每个单元格(cells)预测 B 个边界框(bbox)和这些边界框中任何对象存在的置信度,以及对象所属分类 C 的概率。每边的单元格数是奇数,因而图像的核心有一个单元格。这比偶数有劣势,因为照片的核心通常有一个次要主题。次要预测是在核心单元格中进行的。在单元格数量为偶数的状况下,核心可能位于四个地方单元格中的某个地位,这会升高网络的置信度。
而置信度值示意模型对给定的边界框蕴含某个对象的置信度以及边界框预测其地位的准确度。其实这是 IoU(truth, pred)对一个物体存在的概率的乘积。如果单元格中没有对象,则置信度为零。
每个边界框由 5 个数字组成:x、y、w、h 和 confidence。(x, y) — bbox-a 核心在单元格内的坐标,w 和 h — bbox-a 的宽度和高度绝对于整个图片的尺寸,即归一化从 0- 1 示意. 置信度是 bbox 预测值和实在值之间的 IoU。每个单元格还预测对象类别的 C 的条件概率。无论 bbox B 的数量如何,每个单元格只预测一个分类。
所以在一次前向流传中预测出 S *S* B 个边界框。然而这里大多数的置信度很低,所以通过设置肯定的阈值,能够过滤掉很大一部分。然而与其余的模型相比,这样的检出率进步了几个数量级。这是十分合乎逻辑的,因为当初所有类别的所有边界框都能够在一次流传中预测进去,这就是 You Only Look Once 的由来。原始论文中也给出了在 Titan X GPU 上的 FPS 从 45 到 155 的微小晋升。
尽管 mAP 的准确率与之前的算法相比还是有一些降落,然而在一些问题上实时检测更为重要,也就是说它是在不就义性能的状况下在速度上失去了微小的晋升。
获取边界框
因为与物体核心相邻的 cells 也会产生 bboxes,导致会呈现很多的后果,所以须要从中选出最好的。所以这里应用了非最大克制技术,其工作原理如下。类的所有 bboxes 置信度低于给定阈值的那些将被抛弃。对于其余部分,执行通过 IoU 进行成对比拟。如果两个比拟的 IoU > 0.5,则抛弃置信度较低的 bbox。否则两个 bbox 都保留在列表中。因而类似的 bboxes 被稠密化了(也就是合并了)。
损失函数
复合函数模式为:
第一项是对象核心坐标的损失,第二项是 bbox 的维度,第三项是对象的类别,第四项是对象不存在时的类别,第五项是在 bbox 中找到某个物体的概率损失。
lambda 系数是用来避免因为大多数单元格中没有对象的状况下导致置信度变为零。1(obj, i) 示意对象的核心是否呈现在单元格 i 中,1(obj, i, j) 示意单元格 i 中的第 j 个 bbox 负责此预测。
长处
- 速度十分快:比过后的竞争对手有更好的概括能力 - 在另一个畛域测试 (图片; 在 ImageNet 上进行训练) 体现出更好的体现。
- 缩小了图像背景局部的误报。
问题
- 因为每个单元格 2 个框和一类对象。所以如果有一堆小物体则很难被辨认。
- 原始图像间断几次下采样导致精度不高。
- 损失同样惩办大框和小框上的谬误。作者试图通过取大小的根来弥补这种影响,但这并没有齐全打消这种影响。
YOLOv2 / YOLO9000
Joseph Redmon, Ali Farhadi
“YOLO9000: Better, Faster, Stronger”2016/12 https://arxiv.org/pdf/1612.08…
Pascal VOC 2007 上的测试。YOLOv2 比以前的办法更快、更精确。它还能够在不同的分辨率下运行,能够在速度和准确性之间轻松衡量。每个 YOLOv2 实际上是具备雷同权重的雷同训练模型,只是以不同的大小进行评估。
下面的工夫都是在 Geforce GTX Titan X 进行的测试后果。
架构特点
作者对模型的第一个版本进行了多项改良。
在所有卷积层中删除了 dropout 并增加了 batchnorm。
以 448×448 分辨率(YOLOv1 为 224×224)作为分类器进行预训练,而后将最终网络放大为 416×416 输出以生成奇数个(13×13)单元。
移除了全连贯层。开始应用齐全卷积的和锚点来预测 bbox(如 Faster RCNN)。这缩小了空间信息的损失(就像在 v1 中的齐全连贯层中一样)。
删除了一个 maxpool 以减少特色的细节(分辨率)。在 v1 中,每张图片只有 98 个 bbox;在 v2 中应用 anchors,后果是 1000 多个 bbox,尽管 mAP 降落了一点,但召回率显着进步,这使得进步整体准确率成为可能。
维度先验,bboxes 的大小和地位不是像 FasterRCNN 那样手动随机抉择的,而是通过 k-means 聚类主动抉择的。在小 bbox 上应用具备欧式间隔的规范 k-means 会导致检测误差更高,所以为 k -means 抉择了另一个间隔度量,1 – IoU(box, centroid)。抉择 5 作为簇数量的折衷选项。测试表明,对于以这种形式抉择的 5 个质心,均匀 IoU 与 9 个 anchors 大致相同。
间接地位预测,最后应用 anchors 时,与确定核心坐标 (x, y) 相干的网络训练存在不稳定性——这是因为网络权重是随机初始化的,并且坐标预测是线性的,系数不受限制。所以预测绝对于 anchor 核心的偏移量,其中系数的正确范畴是 [-1;1] 是比较复杂的,所以更改预测 bbox 绝对于单元格核心的系数——范畴 [0; 1] 并应用 sigmoid 对其进行限度。网络为每个单元格预测 5 个 bbox,每个 bbox 有 5 个数字:tx、ty、tw、th、to。bboxes 的预测参数计算如下:
具备维度先验和地位预测的 bbox,会预测 bbox 的宽度和高度作为簇质心的偏移。而后应用 sigmoid 函数预测 bbox 绝对于过滤器应用程序地位的核心坐标。
细粒度个性。个性映射当初是 13×13。
多尺度的训练。因为网络是齐全卷积的,它的分辨率能够通过简略地扭转输出图像的分辨率来动静扭转。为了进步网络的鲁棒性,其输出分辨率每 10 批次扭转一次。因为网络放大了 32 倍,因而输出分辨率从汇合 {320,352,…,608} 中抉择。网络的大小从 320×320 调整到 608×608,并且持续训练。
作为 v1 的骨干的 VGG-16 显著曾经不适合了,所以在第二个版本中应用了 Darknet-19:
训练分类器后,从网络中移除最初一个卷积层,减少 3 个 3 ×3 的 1024 核卷积层,最初减少一个 1 ×1 的卷积输入后果数。以 VOC 为例,输入为 5 个 bbox,每个 bbox 有 5 个坐标,每个 bbox 有 20 个类,总共有 125 个卷积核。
档次分类,在 v1 中分类是属于同一类对象并且互相排挤,而在 v2 中引入了 WordNet 树结构,这是一个有向图。每个类别中的类都是互斥的,并且有本人的 softmax。所以如果图片显示模型已知的种类的狗,则将返回该狗和特定种类的类别。如果它是模型未知种类的狗,那么它只会返回狗,而不显示种类。所以呈现了 YOLO9000:具备 3 个先验而不是 5 个和 9418 个对象类的 v2。
ImageNet 与 WordTree 的预测。大多数 ImageNet 模型应用一个大的 softmax 来预测概率分布。应用 WordTree,对下标执行多个 softmax 操作。
应用 WordTree 层次结构组合数据集。构建了一个视觉概念的档次树。通过将数据集中的类映射到树中的同义词集来合并数据集。上图这是一个用于演示的简化 WordTree 视图。
长处
- 不仅在速度上,而且在 mAP 上都是 SotA
- 能够更好地检测小物体
毛病
在过后还没有找到毛病
YOLOv3
Joseph Redmon, Ali Farhadi
“YOLOv3: An Incremental Improvement”2018/04 https://arxiv.org/pdf/1804.02…
YOLOv3 的运行速度显著快于具备雷同性能的其余检测办法。无论是在 M40 还是 Titan X 上
架构
能够说它是对模型的增量更新,即没有根本的变动,只有一组几个改良小技巧:
- 应用 sigmoid 计算每个 bbox 的对象得分,即给定 bbox 中存在对象的概率。
- 从多类别分类转向多标签分类,解脱了 softmax,转而采纳二元穿插熵。
- 对三个尺度的 bbox 进行预测,输入张量大小:N N (3 * (4 + 1 + num_classes))
- 应用 k-means 从新计算了先验,并在三个尺度上失去了 9 个 bbox。
- 新的、更深、更精确的骨干 / 特征提取器 Darknet-53
在精度方面,Darknet-53 与 ResNet-152 相当,但能够对 GPU 更无效应用,它须要的操作少了近 1.5 倍,FPS 高了 2 倍。
论文也提出了一些测试后有效的办法
- bbox 应用线性激活而不是 logistic 激活来协调位移预测。
- 应用 focal loss,mAP 降落了 2 个点。
- 用于确定真值的双重 IoU:在 Faster R-CNN 中,IOU 有两个阈值,通过它们确定正例或负例(>0.7 正例,0.3–0.7 疏忽,<0.3 负例)
长处
公布时的检出率和检测精度高于竞争对手
毛病
在过后还没有找到毛病
Joseph Redmon 退出计算机视觉畛域
Joseph Redmon 在 YOLOv3 当前尽管发表退出计算机视觉畛域,即便他不再钻研改良 YOLO,也一直有后来者持续进步 YOLO 算法的精度与速度,YOLOv4、YOLOv5,YOLOX 等的呈现也阐明了 YOLO 算法不会因为 Joseph Redmon 的退出而止步不前,然而凌乱的命名就开始到来了。
YOLOv4
Alexey Bochkovskiy, Chien-Yao Wang, Hong-Yuan Mark Liao
“YOLOv4: Optimal Speed and Accuracy of Object Detection”2020/04 , https://arxiv.org/pdf/2004.10…
“Scaled-YOLOv4: Scaling Cross Stage Partial Network”2020/11, https://arxiv.org/pdf/2011.08…
YOLOv4 的运行速度比 efferentdet 快两倍,但性能相当。别离进步了 10% 和 12% 的 AP 和 FPS。
组成 v4 的局部如下:
在 v4 中,采纳了比 v3 中更弱小的 CSPDarknet53 网络作为骨干网络。CSP 意味着存在跨阶段局部连贯:一种网络非相邻层之间的连贯。层数放弃不变,并增加 SPP 模块。
瓶颈层:由一个 PANet 模块组成。它不是用于 FPN,而是用于门路聚合,即用于连贯 (不是求和) 来自不同规模的激活。
输入头的概念放弃不变
除了架构上的变动之外,还对学习过程进行了一些改良。
- 利用了 SAT(自我反抗训练)- 一种由 2 个阶段组成的加强办法。在第一个阶段,在第一阶段,不是进行网络的权重训练,将图片批改为让网络认为所需的对象不在其上时状态(对抗性攻打)。在第二阶段,网络训练检测在第一阶段扭转的图片中的对象。
- 感触野减少,留神机制被应用。
- 利用许多附加类型的图像增强和类均衡。
对于骨干用于训练时减少了 CutMix +Mosaic 加强,DropBlock 正则化,类标签平滑,用于推理应用 Mish 激活,跨阶段局部连贯(CSP),多输出加权残余连贯(MiWRC)
检测器的训练改良,ciu -loss, CmNN, DropBlock,Mosaic,SAT,打消网格敏感性,繁多高空真谛的多锚,余弦退火学习率调度,最优超参数,训练期间的随机形态,推理时 Mish, SPP-block(空间金字塔池),SAM-block(空间注意力模块),PAN, DIoU-NMS
应用更新的网络训练,不影响 FPS,但进步了准确性。
Mosaic 是一种新的数据加强办法
利用一些加强的类型
批改的 SAM
批改的 PAN
Scaled YOLOv4
在对于 v4 的第一篇公布六个月后,作者又公布了另一篇论文,在其中他们公布了扩大网络架构的机制。该机制不仅包含对输出分辨率、网络宽度和深度的缩放,还包含对网络结构自身的缩放。
虚线仅示意模型推理的延迟时间,实线包含模型推理和后处理。
YOLOv4-large 的体系结构,包含 YOLOv4-P5、YOLOv4-P6 和 YOLOv4-P7。虚线箭头示意将相应的 CSPUp 块替换为 CSPSPP 块。
长处
v4 不仅比竞争对手更快、更精确,而且还能够在绝对较弱的设施上进行训练(例如一台 1080Ti)。为了进行比拟,EfficientDet 须要在 v3 – 32 TPU 类型(v3) – 32 TPU v3 核 - 512 GiB Total TPU 内存上进行训练。
v4 也内置在 OpenCV 中,能够间接调用,而不须要 darknet 模型
许可证容许任何应用,没有限度
YOLOv5
Glenn Jocher
因为改做者没有参加 YOLO 之前版本的架构开发,只是参加了实现,所以从伦理的角度来看,应用“YOLOv5”这个名字的合法性仿佛值得狐疑。网上也曾经有不少对于这个的探讨,但目前这个名字曾经确定了,咱们这里就依照约定俗成来解决了。
论文未公布,然而公布了源代码:
https://github.com/ultralytic…, 10.7k/29.8k, GPL-3.0 license
留神:它是 v3(不是 v4)的改良版本,是在 v4 公布后 2 个月后公布。性能比 v3 好,但比 v4 差。
Yolo5 的网络架构由三局部组成:(1)Backbone: CSPDarknet,(2) Neck: PANet,(3) Head: Yolo Layer。数据首先输出到 CSPDarknet 进行特征提取,而后输出到 PANet 进行特色交融。最初 Yolo 层输入检测后果(类别、分数、地位、大小)。
加强形式:scaling, color space adjustments, mosaic.
在 v5 中,与 v4 一样,实现了:
- CSP 个性的瓶颈
- 用于特色聚合的 PANet
长处
- 代码实现很容易让人看懂
- 可能部署到挪动和低功耗设施。
- 疾速训练
毛病
- 在一些测试中比 v4 差
- GPL-3.0 许可证要求后续使用者公开源代码(对于商业不敌对)
YOLOX
Zheng Ge, Songtao Liu, Feng Wang, Zeming Li, Jian Sun
“YOLOX: Exceeding YOLO Series in 2021”2021/07, https://arxiv.org/pdf/2107.08…,
准确模型的速度 - 精度衡量 (左)、挪动设施上精简模型的尺寸 - 精度曲线(右) 和其余模型比照。
COCO 2017 不同模型的速度和精度的比拟。所有的模型都训练了 300 个 epoch。
和 v5 一样,不是官网开发的架构,该模型基于 YOLOv3-Darknet53。
翻新点:
解耦头: 通过决裂分支来解决分类和回归问题之间的抵触
YOLOv3 头和论文所提出的解耦磁头之间的差别。对于 FPN 的每一层特色,首先采纳 1 ×1 的 conv 层,将特色通道缩小到 256 个,而后减少两个并行分支,每个分支有两个 3 ×3 的 conv 层,别离用于分类和回归工作。IoU 分支被增加到回归分支中。
数据加强:mosaic, mixup, random horizontal flip, colorjitter.
论文阐明在 ImageNet 上进行初步训练并没有带来任何劣势,因而所有模型都是从头开始训练的。
Anchorless,Anchor 有它们本人的问题——例如。须要进行初步聚类分析以确定最佳锚点。锚点还减少了检测头的复杂性和每张图像的预测数量。解脱锚点升高了 GFLOPs 并减少了 mAP。
多重正采样,在没有 anchors 的状况下,应该从整张图片中只抉择一个正样本,这会导致其余高质量的预测被疏忽。应用此类预测能够产生有用的梯度,从而缩小训练期间正样本和负样本的不均衡。因而 YOLOX 在核心有一个 3×3 的区域用于正采样,进步了网络的准确性。
SimOTA。高级标记赋值(标记赋值为每个根本真值对象定义了正采样和非沉闷采样)。抉择样本对的非凡算法放慢了学习速度。
其余改良:用于更新权重的指数挪动平均数、余弦 lr 调度、回归分支的 IoU 损失、类分支的 BCE 损失、SGD 优化器等。
在 COCO 验证上,YOLOX-Darknet53 的 AP(%)。所有模型都在 V100 上以 640×640 分辨率进行测试,具备 fp16 精度和 batch=1。本表中的提早和 FPS 均为未通过后处理的测量值。
长处
- 公布时的检测精度,检出率高于竞争对手
- Apache-2.0 凋谢许可证(商业敌对)
PP-YOLOv1/v2/E
Baidu Inc.
- “PP-YOLO: An Effective and Efficient Implementation of Object Detector”2020/07, https://arxiv.org/pdf/2007.12…
- “PP-YOLOv2: A Practical Object Detector”2021/04, https://arxiv.org/pdf/2104.10…
- “PP-YOLOE: An evolved version of YOLO”2022/03, https://arxiv.org/pdf/2203.16…
该模型基于百度的 PADDLE 框架编写,意义不大,晓得就行了(这是我集体意见,供参考)
PP-YOLOE- I 在 COCO 上实现了 51.4 mAP,在 Tesla V100 上实现了 78.1 FPS,与 PP-YOLOv2 相比进步了 1.9 AP 和 9.2 FPS。
PP-YOLO
作者没有寻找适合的 backbone,也没有各种裁减,也没有通过 NAS 优化超参数。他们没有采纳 Darknet-53,而是采纳了罕用的 ResNet50-vd,并将一些卷积层替换为可变形的卷积层。加强应用了根本的 MixUp。
应用技巧:
从 64 批减少到 192 批,相应修改了 LR;
网络权重的指数挪动均匀(EMA): lambda = 0.9998 - 扩散因子。
DropBlock 是一种 dropout 变体,其中特色图区域被一起抛弃。仅实用于 FPN,如果用于 backbone 导致性能降落。
IoU 损失,在 YOLOv3 中有 L1,但这不是 bboxes 最无效的损失。作者应用了 IoU 损失。
IoU Aware — 在 YOLOv3 中,对于置信度值,类概率乘以对象值,并没有进步定位精度。为了解决这个问题,增加了一个 IoU 预测分支来测量定位精度。在训练 IoU aware 时,损失参加 IoU 预测分支的训练。通过推理,预测的 IoU 乘以类别概率和客观性,从而提供更好的定位精度,而计算复杂度实际上并没有减少。
网格敏感
Matrix NMS
CoordConv — 卷积 SPP(空间金字塔池)的附加通道
ImageNet 预训练蒸馏模型
融化钻研如上图所示
PP-YOLOv2 改良
FPN 被 PANet 取代
Mish 激活
减少了输出图像的大小
批改了 IoU aware 损失:
融化钻研:
PP-YOLOv2 的 detection neck 架构
试了但没胜利的技巧:
余弦学习率衰减
在再训练期间解冻权重会升高 mAP
PP-YOLOE 改良
Anchorless
CSPRepResNet backbone
Task Assignment Learning,一种无效抉择批次样本的算法
ET-head,一种代替解耦 head loss 的办法。VFL = varifocal loss, DFL = distribution focal loss
融化钻研
架构
长处
- 在 TensorRT 上部署的能力
- 性能良好
- Apache-2.0 凋谢许可证
毛病
非标准框架(PADDLE 不是正经框架😉)
训练须要大量的显卡(PP-YOLO: 8x V100 GPU)
上篇完结,今天咱们公布下篇,包含YOLOR, YOLOv6, YOLOv7,还有刚公布的 v8
https://avoid.overfit.cn/post/2a446d31ab824cde8f35b2aef7104984
作者:Maxim Ivanov