在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
除了基于Darknet框架的官方实现外,在其他常用框架上也有大量各种流行的实现,这里就不列举了
Pascal VOC 2007 上的实时系统比较的性能和速度。Fast YOLO 是 Pascal VOC 检测记录中最快的模型,而其准确度也是其他实时检测器的两倍。 YOLO 的精度比Fast 版本高 10 mAP,但速度仍远高于其他模型。
架构
在结构上,YOLO 模型由以下部分组成:
- Input ——输入图像被馈送到的输入层
- Backbone ——输入图像以特征形式编码的部分。
- Neck ——这是模型的其他部分,用于处理由特征编码的图像
- Head(s)——一个或多个产生模型预测的输出层。
该网络的第一个版本基于 GoogLeNet 的架构。 它是与 MaxPool 交错的级联卷积层。 级联以两个完全连接的层作为输出。
作者训练了一个更快版本的 Fast YOLO 架构,包含更少的卷积层(9 个而不是 24 个)。 两个模型的输入分辨率都是 448x448,但是网络主要部分的预训练就像一个分辨率为 224x224 的分类器。
在这个架构中,原始图片被分成 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.08242.pdf
Pascal VOC 2007 上的测试。YOLOv2 比以前的方法更快、更准确。 它还可以在不同的分辨率下运行,可以在速度和准确性之间轻松权衡。 每个 YOLOv2 实际上是具有相同权重的相同训练模型,只是以不同的大小进行评估。
上面的时间都是在Geforce GTX Titan X 进行的测试结果。
架构特点
作者对模型的第一个版本进行了多项改进。
在所有卷积层中删除了 dropout 并添加了 batchnorm。
以 448x448 分辨率(YOLOv1 为 224x224)作为分类器进行预训练,然后将最终网络缩小为 416x416 输入以生成奇数个(13x13)单元。
移除了全连接层。 开始使用完全卷积的和锚点来预测 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相对于过滤器应用程序位置的中心坐标。
细粒度特性。特性映射现在是13x13。
多尺度的训练。由于网络是完全卷积的,它的分辨率可以通过简单地改变输入图像的分辨率来动态改变。为了提高网络的鲁棒性,其输入分辨率每10批次改变一次。由于网络缩小了32倍,因此输入分辨率从集合{320,352,…,608}中选择。网络的大小从320x320调整到608x608,并且继续训练。
作为v1的骨干的VGG-16明显已经不合适了,所以在第二个版本中使用了Darknet-19:
训练分类器后,从网络中移除最后一个卷积层,增加3个3x3的1024核卷积层,最后增加一个1x1的卷积输出结果数。以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.02767.pdf
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.10934.pdf
“Scaled-YOLOv4: Scaling Cross Stage Partial Network”2020/11, https://arxiv.org/pdf/2011.08036.pdf
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”这个名字的合法性似乎值得怀疑。 网上也已经有不少关于这个的讨论,但目前这个名字已经确定了,我们这里就按照约定俗成来处理了。
论文未发布,但是发布了源代码。
注意:它是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
精确模型的速度-精度权衡(左)、移动设备上精简模型的尺寸-精度曲线(右)和其他模型对比。
COCO 2017不同模型的速度和精度的比较。所有的模型都训练了300个epoch。
和v5一样,不是官方开发的架构,该模型基于 YOLOv3-Darknet53。
创新点:
解耦头:通过分裂分支来解决分类和回归问题之间的冲突
YOLOv3头和论文所提出的解耦磁头之间的差异。对于FPN的每一层特征,首先采用1x1的conv层,将特征通道减少到256个,然后增加两个并行分支,每个分支有两个3x3的conv层,分别用于分类和回归任务。IoU分支被添加到回归分支中。
数据增强: mosaic, mixup, random horizontal flip, colorjitter.
论文说明在 ImageNet 上进行初步训练并没有带来任何优势,因此所有模型都是从头开始训练的。
Anchorless,Anchor有它们自己的问题——例如。 需要进行初步聚类分析以确定最佳锚点。 锚点还增加了检测头的复杂性和每张图像的预测数量。 摆脱锚点降低了 GFLOPs 并增加了 mAP。
多重正采样, 在没有anchors的情况下,应该从整张图片中只选择一个正样本,这会导致其他高质量的预测被忽略。 使用此类预测可以产生有用的梯度,从而减少训练期间正样本和负样本的不平衡。 因此YOLOX 在中心有一个 3x3 的区域用于正采样,提高了网络的准确性。
SimOTA。高级标记赋值(标记赋值为每个基本真值对象定义了正采样和非活跃采样)。选择样本对的特殊算法加快了学习速度。
其他改进:用于更新权重的指数移动平均数、余弦 lr 调度、回归分支的 IoU 损失、类分支的 BCE 损失、SGD 优化器等。
在COCO验证上,YOLOX-Darknet53的AP(%)。所有模型都在V100上以640x640分辨率进行测试,具有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.12099.pdf
- “PP-YOLOv2: A Practical Object Detector”2021/04, https://arxiv.org/pdf/2104.10419.pdf
- “PP-YOLOE: An evolved version of YOLO” 2022/03, https://arxiv.org/pdf/2203.16250.pdf
该模型基于百度的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