文章目录
- YOLO系列总结:YOLOv1, YOLOv2, YOLOv3, YOLOv4, YOLOv5, YOLOX
-
- 前言
- YOLO v1: You Only Look Once: Unified, Real-Time Object Detection
- YOLO v2: YOLO9000: Better, Faster, Stronger
-
- 简介
- 网络简介
- 网络改进
-
- 1. Batch Normalization
- 2. High resolution classifier(高分辨率图像分类器)
- 3. Convolution with anchor boxes(使用先验框)
- 4. Dimension clusters(聚类提取先验框的尺度信息)
- 5. Direct location prediction(约束预测边框的位置)
- 6. Fine-Grained Features(passthrough层检测细粒度特征)
- 7. Multi-ScaleTraining(多尺度图像训练)
- 8. Darknet-19(backbone网络)
- 9. Hierarchical classification(分层分类)
- YOLOv3: An Incremental Improvement
- YOLO v4: Optimal Speed and Accuracy of Object Detection
- YOLO v5
- YOLO X: Exceeding YOLO Series in 2021
YOLO系列总结:YOLOv1, YOLOv2, YOLOv3, YOLOv4, YOLOv5, YOLOX
前言
本文主要是对YOLO
系列的网络结构总结、优缺点和改进分析,主要包括YOLOv1
, YOLOv2
, YOLOv3
, YOLOv4
, YOLOv5
, YOLOX
这6个网络
YOLO v1: You Only Look Once: Unified, Real-Time Object Detection
简介
论文下载:https://arxiv.org/abs/1506.02640
代码下载:https://github.com/pjreddie/darknet
核心思想: 将整张图作为网络的输入,直接在输出层对BBox的位置和类别进行回归。
网络简介
因为YOLO v1
时间比较长了,也就不多讲网络了,大概说一下网络的主要逻辑:
(1) 给个一个输入图像,首先将图像划分成
7
×
7
7 \times 7
7×7的网格
(2) 对于每个网格,我们都预测
2
2
2个边框(包括每个边框是目标的置信度以及每个边框区域在多个类别上的概率)
(3) 根据上一步可以预测出
7
×
7
×
2
7 \times 7 \times 2
7×7×2个目标窗口,然后根据阈值去除可能性比较低的目标窗口,最后NMS去除冗余窗口即可
优缺点
优点
- 快速,pipline简单.
- 背景误检率低。
- 通用性强。
YOLO v1
对于艺术类作品中的物体检测同样适用。它对非自然图像物体的检测率远远高于DPM
和RCNN
系列检测方法。
缺点
- 由于输出层为全连接层,因此在检测时,
YOLO v1
训练模型只支持与训练图像相同的输入分辨率。 - 虽然每个格子可以预测
B
B
YOLO v1
方法的一个缺陷。 YOLO v1
loss函数中,大物体IOU误差和小物体IOU误差对网络训练中loss贡献值接近(虽然采用求平方根方式,但没有根本解决问题)。因此,对于小物体,小的IOU误差也会对网络优化过程造成很大的影响,从而降低了物体检测的定位准确性。
YOLO v2: YOLO9000: Better, Faster, Stronger
简介
论文下载:https://arxiv.org/abs/1612.08242
代码下载:https://github.com/yjh0410/yolov2-yolov3_PyTorch
核心思想:
- 该论文使用一种新颖的多尺度训练方法,
YOLOv2
可以在不同的尺寸下运行,在速度和精度之间提供了一个简单的权衡。在67
F
P
S
67 FPS
YOLO v2
在VOC 2007上获得76.8
76.8
40
F
P
S
40 FPS
YOLO v2
获得78.6
78.6
- 最后提出了一种目标检测与分类的联合训练方法,利用该方法在COCO检测数据集和ImageNet分类数据集上同时训练
YOLO 9000
,它可以预测9000
9000
网络简介
YOLO v2
相对v1
版本,在继续保持处理速度的基础上,从预测更准确(Better),速度更快(Faster),**识别对象更多(Stronger)**这三个方面进行了改进。其中识别更多对象也就是扩展到能够检测
9000
9000
9000种不同对象,称之为YOLO 9000
。
文章提出了一种新的训练方法–联合训练算法,这种算法可以把这两种的数据集混合到一起。使用一种分层的观点对物体进行分类,用巨量的分类数据集数据来扩充检测数据集,从而把两种不同的数据集混合起来。
联合训练算法的基本思路就是:同时在检测数据集和分类数据集上训练物体检测器(Object Detectors ),用检测数据集的数据学习物体的准确位置,用分类数据集的数据来增加分类的类别量、提升健壮性。
YOLO9000
就是使用联合训练算法训练出来的,他拥有
9000
9000
9000类的分类信息,这些分类信息学习自ImageNet分类数据集,而物体位置检测则学习自COCO检测数据集。
网络改进
YOLO v2
相比于 YOLO v1
的改进如下:
1. Batch Normalization
mAP提升
2.4
%
2.4\%
2.4%。
关于BN的详细信息,感兴趣的可以看本人专栏深度学习基础下的深度学习七 —— BN & LN & IN & GN
这里不多做讲述
2. High resolution classifier(高分辨率图像分类器)
mAP提升了
3.7
%
3.7\%
3.7%。
图像分类的训练样本很多,而标注了边框的用于训练对象检测的样本相比而言就比较少了,因为标注边框的人工成本比较高。所以对象检测模型通常都先用图像分类样本训练卷积层,提取图像特征。但这引出的另一个问题是,图像分类样本的分辨率不是很高。所以YOLO v1
使用ImageNet的图像分类样本采用
224
×
224
224 \times 224
224×224 作为输入,来训练CNN卷积层。然后在训练对象检测时,检测用的图像样本采用更高分辨率的
448
×
448
448 \times 448
448×448 的图像作为输入。但这样切换对模型性能有一定影响。
所以YOLO v2
在采用
224
×
224
224 \times 224
224×224 图像进行分类模型预训练后,再采用
448
×
448
448 \times 448
448×448 的高分辨率样本对分类模型进行微调(
10
10
10个epoch),使网络特征逐渐适应
448
×
448
448 \times 448
448×448 的分辨率。然后再使用
448
×
448
448 \times 448
448×448 的检测样本进行训练,缓解了分辨率突然切换造成的影响。
3. Convolution with anchor boxes(使用先验框)
召回率大幅提升到
88
%
88\%
88%,同时mAP轻微下降了
0.2
0.2
0.2左右。
YOLO v1
包含有全连接层,从而能直接预测Bounding Boxes的坐标值。 Faster R-CNN
的方法只用卷积层与Region Proposal Network来预测Anchor Box的偏移值与置信度,而不是直接预测坐标值。作者发现通过预测偏移量而不是坐标值能够简化问题,让神经网络学习起来更容易。
借鉴Faster RCNN
的做法,YOLO v2
也尝试采用先验框(anchor)。在每个grid预先设定一组不同大小和宽高比的边框,来覆盖整个图像的不同位置和多种尺度,这些先验框作为预定义的候选区在神经网络中将检测其中是否存在对象,以及微调边框的位置。
之前YOLO v1
并没有采用先验框,并且每个grid只预测
2
2
2个bounding box,整个图像
98
98
98个。YOLO v2
如果每个grid采用
9
9
9个先验框,总共有
13
×
13
×
9
=
1521
13 \times 13 \times 9=1521
13×13×9=1521个先验框。所以最终YOLO v2
去掉了全连接层,使用Anchor Boxes来预测 Bounding Boxes。作者去掉了网络中一个Pooling层,这让卷积层的输出能有更高的分辨率。收缩网络让其运行在
416
×
416
416 \times 416
416×416 而不是
448
×
448
448 \times 448
448×448。
由于图片中的物体都倾向于出现在图片的中心位置,特别是那种比较大的物体,所以有一个单独位于物体中心的位置用于预测这些物体。YOLO v2
的卷积层采用
32
32
32这个值来下采样图片,所以通过选择
416
×
416
416 \times 416
416×416用作输入尺寸最终能输出一个
13
×
13
13 \times 13
13×13的Feature Map。 使用Anchor Box会让精度稍微下降,但用了它能让YOLO v2
能预测出大于一千个框,同时recall从
81
%
81\%
81%达到
88
%
88\%
88%,mAP达到
69.2
%
69.2\%
69.2%。
召回率升高,mAP轻微下降的原因是: 因为YOLO v2
不使用anchor boxes时,每个图像仅预测
98
98
98个边界框。但是使用anchor boxes,YOLO v2
模型预测了一千多个框,由于存在很多无用的框,这就导致了mAP值的下降。但是由于预测的框多了,所以能够预测出来的属于ground truth的框就多了,所以召回率就增加了。目标检测不是只以mAP为指标的,有些应用场景下要求召回率高。
4. Dimension clusters(聚类提取先验框的尺度信息)
之前Anchor Box的尺寸是手动选择的,所以尺寸还有优化的余地。 YOLO v2
尝试统计出更符合样本中对象尺寸的先验框,这样就可以减少网络微调先验框到实际位置的难度。YOLO v2
的做法是对训练集中标注的边框进行K-mean聚类分析,以寻找尽可能匹配样本的边框尺寸
关于K-Means聚类的详细内容,有需要可以看本人专栏 图像算法 中的图像算法六 —— K-Means和KNN
5. Direct location prediction(约束预测边框的位置)
借鉴Faster RCNN
的先验框的方法,在训练的早期阶段,其位置预测容易不稳定。位置预测公式通常为:
x
=
(
t
x
×
w
a
)
+
x
a
x = (t_x \times w_a) + x_a
x=(tx×wa)+xa
y
=
(
t
y
×
h
a
)
+
y
a
y = (t_y \times h_a) + y_a
y=(ty×ha)+ya
其中,
x
,
y
x, y
x,y——预测边框的中心,
x
a
,
y
a
x_a, y_a
xa,ya——anchor的中心点坐标,
w
a
,
h
a
w_a, h_a
wa,ha——anchor的宽和高,
t
x
,
t
y
t_x, t_y
tx,ty——学习的参数。
注意:YOLO
中用的是
x
=
(
t
x
×
w
a
)
−
x
a
x = (t_x \times w_a) – x_a
x=(tx×wa)−xa,Fasteer RCNN
中用的是
+
+
+。
由于
t
x
,
t
y
t_x, t_y
tx,ty 的取值没有任何约束,因此预测边框的中心可能出现在任何位置,训练早期阶段不容易稳定。
YOLO v2
调整了预测公式,将预测边框的中心约束在特定gird网格内,如下图所示:
其中,
b
x
,
b
y
,
b
w
,
b
h
b_x, b_y, b_w, b_h
bx,by,bw,bh——预测框的中心点和宽高,
c
x
,
c
y
c_x, c_y
cx,cy——当前网格左上角到图像左上角的距离,
σ
\sigma
σ——
s
i
g
m
o
i
d
sigmoid
sigmoid函数,
t
x
,
t
y
,
p
w
,
p
h
t_x, t_y, p_w, p_h
tx,ty,pw,ph——学习参数,用于预测边框的中心和宽高。
因为使用了限制让数值变得参数化,也让网络更容易学习、更稳定。
6. Fine-Grained Features(passthrough层检测细粒度特征)
passthrough层检测细粒度特征使mAP提升
1
%
1\%
1%。
对象检测面临的一个问题是图像中对象会有大有小,输入图像经过多层网络提取特征,最后输出的特征图中(比如YOLO v2
中输入
416
×
416
416 \times 416
416×416经过卷积网络下采样最后输出是
13
×
13
13 \times 13
13×13),较小的对象可能特征已经不明显甚至被忽略掉了。
为了更好的检测出一些比较小的对象,最后输出的特征图需要保留一些更细节的信息。
YOLO v2
引入一种称为passthrough层的方法在特征图中保留一些细节信息。
具体来说,就是在最后一个pooling之前,特征图的大小是
26
×
26
×
512
26 \times 26 \times 512
26×26×512,将其
1
1
1拆
4
4
4,直接传递(passthrough)到pooling后(并且又经过一组卷积)的特征图,两者叠加到一起作为输出的特征图。
另外,根据YOLO v2
的代码,特征图先用
1
×
1
1 \times 1
1×1卷积从
26
×
26
×
512
26 \times 26 \times 512
26×26×512 降维到
26
×
26
×
64
26 \times 26 \times 64
26×26×64,再做
1
1
1拆
4
4
4并passthrough。
7. Multi-ScaleTraining(多尺度图像训练)
作者希望YOLO v2
能健壮的运行于不同尺寸的图片之上,所以把这一想法用于训练model中。
区别于之前的补全图片的尺寸的方法,YOLO v2
每迭代几次都会改变网络参数。每
10
10
10个Batches,网络会随机地选择一个新的图片尺寸,由于使用了下采样参数是
32
32
32,所以不同的尺寸大小也选择为
32
32
32的倍数
320
,
352
…
.
.
608
{320,352…..608}
320,352…..608,最小
320
×
320
320 \times 320
320×320,最大
608
×
608
608 \times 608
608×608,网络会自动改变尺寸,并继续训练的过程。
这一政策让网络在不同的输入尺寸上都能达到一个很好的预测效果,同一网络能在不同分辨率上进行检测。当输入图片尺寸比较小的时候跑的比较快,输入图片尺寸比较大的时候精度高,所以你可以在YOLO v2
的速度和精度上进行权衡。
8. Darknet-19(backbone网络)
Darknet-19有
19
19
19个卷积层和
5
5
5个maxpooling层,采用全局平均池化的方法进行预测,并采用
1
×
1
1 \times 1
1×1 卷积来压缩
3
×
3
3 \times 3
3×3 卷积之间的特征表示。使用批处理归一化来稳定训练,加快收敛速度,并对模型进行规范化。
9. Hierarchical classification(分层分类)
作者提出了一种在分类数据集和检测数据集上联合训练的机制。使用检测数据集的图片去学习检测相关的信息,例如bounding boxes 坐标预测,是否包含物体以及属于各个物体的概率。使用仅有类别标签的分类数据集图片去扩展可以检测的种类。
作者通过ImageNet训练分类、COCO和VOC数据集来训练检测,这是一个很有价值的思路,可以让我们达到比较优的效果。 通过将两个数据集混合训练,如果遇到来自分类集的图片则只计算分类的Loss,遇到来自检测集的图片则计算完整的Loss。
但是ImageNet对应分类有
9000
9000
9000种,而COCO则只提供
80
80
80种目标检测,作者使用multi-label模型,即假定一张图片可以有多个label,并且不要求label间独立。
通过作者Paper里的图来说明,由于ImageNet的类别是从WordNet选取的,作者采用以下策略重建了一个树形结构(称为分层树):
- 遍历Imagenet的label,然后在WordNet中寻找该label到根节点(指向一个物理对象)的路径;
- 如果路径直有一条,那么就将该路径直接加入到分层树结构中;
- 否则,从剩余的路径中选择一条最短路径,加入到分层树。
这个分层树我们称之为 WordTree,作用就在于将两种数据集按照层级进行结合。
YOLOv3: An Incremental Improvement
简介
论文下载:https://arxiv.org/abs/1804.02767
代码下载:https://github.com/yjh0410/yolov2-yolov3_PyTorch
核心思想:
YOLO v3
的核心思想在于多尺度的预测,也就是使用三种不同的网格来划分原始图像。其中
13
×
13
13 \times 13
13×13的网格划分的每一块最大,用于预测大目标。
26
×
26
26 \times 26
26×26的网格划分的每一块中等大小,用于预测中等目标。
52
×
52
52 \times 52
52×52的网格划分的每一块最小,用于预测小目标。
网络介绍
由于原作者并没有给出网络图,就自己画了一个网络图,有问题请大家指正。
网络改进
简述
- 多尺度预测 (引入FPN)。
- 更好的基础分类网络(darknet-53, 类似于ResNet引入残差结构)。
- 分类器不在使用Softmax,分类损失采用binary cross-entropy loss(二分类交叉损失熵)
1. Darknet-53
下图是Darknet-53
的网络结构图
-
此结构主要由
53
53
53个卷积层构成,卷积层对于分析物体特征最为有效。由于没有使用全连接层,该网络可以对应任意大小的输入图像。
-
此外,池化层也没有出现在其中,取而代之的是将卷积层设置
s
t
r
i
d
e
=
2
stride=2
stride=2来达到下采样的效果,同时将尺度不变特征传送到下一层。
-
除此之外,
Darknet-53
中还使用了类似ResNet
的结构
2. 边框回归
一个回归框是由
4
4
4个参数决定——
x
,
y
,
w
,
h
x, y, w, h
x,y,w,h 。YOLO v3
是在训练的数据集上聚类产生prior boxes的一系列宽高(是在图像
416
×
416
416 \times 416
416×416的坐标系里),默认
9
9
9种。YOLO v3
思想理论是将输入图像分成
S
×
S
S \times S
S×S个格子(有三处进行检测,分别是在
52
×
52
52 \times 52
52×52,
26
×
26
26 \times 26
26×26,
13
×
13
13 \times 13
13×13的feature map上,即
S
S
S会分别为
52
,
26
,
13
52,26,13
52,26,13),若某个物体Ground truth的中心位置的坐标落入到某个格子,那么这个格子就负责检测中心落在该栅格中的物体。
三次检测,每次对应的感受野不同:
-
32
32
(
13
×
13
)
(13 \times 13)
3
3
(
116
,
90
)
,
(
156
,
198
)
,
(
373
,
326
)
(116 ,90),(156 ,198),(373 ,326)
-
16
16
(
26
×
26
)
(26 \times 26)
(
30
,
61
)
,
(
62
,
45
)
,
(
59
,
119
)
(30,61), (62,45),(59,119)
-
8
8
(
52
×
52
)
(52 \times 52)
(
10
,
13
)
,
(
16
,
30
)
,
(
33
,
23
)
(10,13), (16,30), (33,23)
所以当输入为
416
×
416
416 \times 416
416×416时,实际总共有
(
52
×
52
+
26
×
26
+
13
×
13
)
×
3
=
10647
(52 \times 52+26 \times 26+13 \times 13) \times 3 = 10647
(52×52+26×26+13×13)×3=10647个proposal boxes。
YoLo v3
对每个bounding box预测偏移量和尺度缩放四个值
t
x
,
t
y
,
t
w
,
t
h
t_x, t_y, t_w, t_h
tx,ty,tw,th (网络学习的参数),对于预测的cell(一幅图划分成
S
×
S
S \times S
S×S个网格cell)根据图像左上角的偏移
(
c
x
,
c
y
)
(cx, cy)
(cx,cy) ,每个grid cell在feature map中的宽和高均为
1
1
1,以及预先设的anchor box的宽和高
p
w
,
p
h
p_w, p_h
pw,ph (预设聚类的宽高需要除以
s
t
r
i
d
e
stride
stride映射到feature map上)。最终得到的边框坐标值是
b
b
b,而网络学习目标是
t
∗
t^*
t∗,用
s
i
g
m
o
d
sigmod
sigmod函数、指数转换。可以对bounding box按如上图的方式进行预测。
3. 多尺度预测:更好地对应不同大小的目标物体
每种尺度预测
3
3
3个box, anchor的设计方式仍然使用聚类,得到
9
9
9个聚类中心,将其按照大小均分给
3
3
3个尺度.
- 尺度
1
1
- 尺度
2
2
×
2
\times 2
16
×
16
16 \times 16
1
1
2
2
- 尺度
3
3
2
2
32
×
32
32 \times 32
之后在
Y
O
L
O
v
3
YOLO v3
YOLOv3中,采用FPN层对多尺度的特征进行融合使用。
4. ResNet残差结构:更好地获取物体特征
YOLO v3
中使用了ResNet
结构(对应着在上面的YOLO v3
结构图中的ResBlock
)。ResBlock是有一系列卷基层和一条shortcut path组成。shortcut如下图所示:
图中曲线箭头代表的便是shortcut path。除此之外,此结构与普通的CNN结构并无区别。
但是,随着网络越来越深,学习特征的难度也就越来越大。但是如果我们加一条shortcut path的话,学习过程就从直接学习特征,变成在之前学习的特征的基础上添加某些特征,来获得更好的特征。这样一来,一个复杂的特征
H
(
x
)
H(x)
H(x),之前是独立一层一层学习的,现在就变成了这样一个模型。
H
(
x
)
=
F
(
x
)
+
x
H(x)=F(x)+x
H(x)=F(x)+x,其中
x
x
x是shortcut开始时的特征,而
F
(
x
)
F(x)
F(x)就是对x进行的填补与增加,成为残差。因此学习的目标就从学习完整的信息,变成学习残差了。这样学习优质特征的难度就大大减小了。
5. 替换softmax层:对应多重label分类
S
o
f
t
m
a
x
Softmax
Softmax层被替换为一个
1
×
1
1 \times 1
1×1的卷积层
+
+
+
l
o
g
i
s
t
i
c
logistic
logistic激活函数的结构。使用
s
o
f
t
m
a
x
softmax
softmax层的时候其实已经假设每个输出仅对应某一个单个的
c
l
a
s
s
class
class,但是在某些
c
l
a
s
s
class
class存在重叠情况(例如woman和person)的数据集中,使用
s
o
f
t
m
a
x
softmax
softmax就不能使网络对数据进行很好的拟合。
常见问题
YOLOv3为什么不使用Softmax对每个框进行分类?
主要考虑因素有两个:
-
S
o
f
t
m
a
x
Softmax
Softmax使得每个框分配一个类别(score最大的一个),而对于Open Images这种数据集,目标可能有重叠的类别标签,因此
S
o
f
t
m
a
x
Softmax
Softmax不适用于多标签分类。
-
S
o
f
t
m
a
x
Softmax
Softmax可被独立的多个logistic分类器替代,且准确率不会下降。
分类损失采用binary cross-entropy loss。
Bounding box的预测公式中,为什么使用sigmoid函数呢?
YOLO v3
不预测边界框中心的绝对坐标,它预测的是偏移量,预测的结果通过一个
s
i
g
m
o
i
d
sigmoid
sigmoid函数,迫使输出的值在
0
0
0~
1
1
1之间。
例如,若对中心的预测是
(
0.4
,
0.7
)
(0.4,0.7)
(0.4,0.7),左上角坐标是
(
6
,
6
)
(6,6)
(6,6),那么中心位于
13
×
13
13\times13
13×13特征地图上的(6.4,6.7)。若预测的
x
,
y
x,y
x,y坐标大于
1
1
1,比如
(
1.2
,
0.7
)
(1.2,0.7)
(1.2,0.7),则中心位于
(
7.2
,
6.7
)
(7.2,6.7)
(7.2,6.7)。注意现在中心位于图像的第
7
7
7排第
8
8
8列单元格,这打破了
Y
O
L
O
v
3
YOLO v3
YOLOv3背后的理论,因为如果假设原区域负责预测某个目标,目标的中心必须位于这个区域中,而不是位于此区域旁边的其他网格里。
为解决这个问题,输出是通过一个
s
i
g
m
o
i
d
sigmoid
sigmoid函数传递的,该函数在
0
0
0~
1
1
1的范围内缩放输出,有效地将中心保持在预测的网格中。
YOLO v4: Optimal Speed and Accuracy of Object Detection
简介
论文下载:https://arxiv.org/abs/2004.10934
代码下载:https://github.com/AlexeyAB/darknet
核心思想:
从本质上,YOLO v4
就是筛选了一些从YOLO v3
发布至今,被用在各式各样检测器上,能够提高检测精度的tricks,并以YOLO v3
为基础进行改进的目标检测模型。YOLO v4
在保证速度的同时,大幅提高模型的检测精度(相较于YOLO v3
)。
网络结构
由于YOLO v4
实在是综合了太多的技巧,就从知乎一个大佬那借图一展,我主要从下一节的网络改进来详细讲
网络改进
简述
YOLO v4
由于结合了太多的技巧,所以就大概列一部分主要的,如下:
- 相较于
YOLO v3
的DarkNet53,YOLO v4
用了CSPDarkNet53 - 相较于
YOLO v3
的FPN,YOLO v4
用了SPP+PAN - CutMix数据增强和马赛克(Mosaic)数据增强
- DropBlock正则化
- 等等
1. BackBone:CSPDarknet53
作者在选在BackBone的时候选择了CSPDarknet53,原因也很简单,在论文中也有提到,当时在目标检测领域,该网络精度最好。
有兴趣的可以去看CSPDarknet53的原文,不多讲述:CSPNet: A New Backbone that can Enhance Learning Capability of CNN
2. Neck:SPP+PAN
SSP不多讲,有兴趣看何凯明大神的论文
SSP:Spatial Pyramid Pooling in Deep ConvolutionalNetworks for Visual Recognition
而SSP+PAN借鉴的是18年CVPR的PANet,当时主要应用于图像分割领域,作者将其拆分应用到YOLO v4
中,进一步提高特征提取的能力。
YOLO v4
在FPN层的后面还添加了一个自底向上的特征金字塔, 其中包含两个PAN结构。
这样结合操作,FPN层自顶向下传达强语义特征,而特征金字塔则自底向上传达强定位特征,两两联手,从不同的主干层对不同的检测层进行参数聚合
4. CutMix数据增强和马赛克(Mosaic)数据增强
-
CutMix数据增强:就是将一部分区域cut掉但不填充
0
0
0像素而是随机填充训练集中的其他数据的区域像素值,分类结果按一定的比例分配
-
Mosaic数据增强:核心思想是随机
4
4
4张图拼合成一张送入网络
5. DropBlock正则化
Dropout 被广泛地用作全连接层的正则化技术,但是对于卷积层,通常不太有效。Dropout 在卷积层不 work 的原因可能是由于卷积层的特征图中相邻位置元素在空间上共享语义信息, 所以尽管某个单元被 dropout 掉,但与其相邻的元素依然可以保有该位置的语义信息,信息仍然可以在卷积网络中流通。
因此,针对卷积神经网络就需要一种结构形式的dropout 来正则化,即按块来丢弃。
DropBlock是一种结构化的 dropout 形式,它将 feature map 相邻区域中的单元放在一起 drop 掉。除了卷积层外,在跳跃连接中应用 DropBlock 可以提高精度。
此外,在训练过程中,逐渐增加 dropped unit 的数量会有更好的准确性和对超参数选择的鲁棒性。
YOLO v5
简介
2020年2月YOLO
之父Joseph Redmon宣布退出计算机视觉研究领域,2020 年 4 月 23 日YOLOv4
发布,2020 年 6 月 10 日YOLO v5
发布,但是两个版本的改进都属于多种技术堆积版本,且两个版本差异不大。
YOLO v5
性能与YOLO v4
不相伯仲,同样也是现今最先进的对象检测技术,并在推理速度上是目前最强。
论文下载:YOLO v5目前暂无论文
代码下载:https://github.com/ultralytics/yoloV5
优点
- 使用
Pytorch
框架,对用户非常友好,能够方便地训练自己的数据集,相对于YOLO v4
采用的Darknet
框架,Pytorch
框架更容易投入生产。 - 代码易读,整合了大量的计算机视觉技术,非常有利于学习和借鉴。
- 不仅易于配置环境,
模型训练也非常快速
,并且批处理推理产生实时结果。 - 能够直接对单个图像,批处理图像,视频甚至网络摄像头端口输入进行有效推理。
- 能够轻松的将
Pytorch
权重文件转化为安卓使用的ONXX
格式,然后可以转换为OpenCV
的使用格式,或者通过CoreML
转化为IOS
格式,直接部署到手机应用端。 - 有非常轻量级的模型大小,
YOLO v5
的大小仅有27
M
B
27MB
Darknet
架构的YOLO v4
有244
M
B
244MB
- 最后
YOLO v5
高达140
F
P
S
140FPS
YOLO X: Exceeding YOLO Series in 2021
简介
YOLO X
是旷视科技在目标检测方面的最新技术总结,同时也是CVPR2021自动驾驶竞赛冠军方案的技术总结。其将近两年来目标检测领域的各个角度的优秀进展与YOLO
进行了巧妙地集成组合(比如解耦头、数据增广、标签分配、Anchor-free机制等)得到了YOLO X
,性能取得了大幅地提升,同时仍保持了YOLO系列一贯地高效推理。
论文下载:https://arxiv.org/abs/2107.08430
代码下载:https://github.com/Megvii-BaseDetection/YOLOX
网络改进
简述
作者将YOLO
检测器调整为了Anchor-Free
形式并集成了其他先进检测技术(比如decoupled head、label assignment SimOTA)取得了SOTA性能,比如:
- 对于
YOLO-Nano
,所提方法仅需0.91
M
0.91M
+
1.08
G
+1.08G
25.3
%
25.3\%
1.8
%
1.8\%
- 对于
YOLO v3
,所提方法将指标提升到了47.3
%
47.3\%
3
%
3\%
- 具有与
YOLOv4-CSP
、YOLOv5-L
相当的参数量,YOLOX-L
取得了50.0
%
50.0\%
68.9
f
p
s
68.9fps
YOLOv5-L
1.8
%
1.8\%
YOLOX-L
凭借单模型取得了Streaming Perception(Workshop on Autonomous Driving at CVPR 2021)竞赛冠军。
值得一提的是,作者使用的baseline是 YOLO v3 + DarkNet53
(所谓的YOLO v3-SSP
)
1. Decoupled Head 解耦头
作者研究发现,检测头耦合会影响模型性能。采用解耦头替换YOLO
的检测头可以显著改善模型收敛速度。因此,作者将YOLO
的检测头替换为轻量解耦头:它包含一个
1
×
1
1\times 1
1×1卷积进行通道降维,后接两个并行分支(均为
3
×
3
3 \times 3
3×3卷积)。注:轻量头可以带来
1.1
m
s
1.1ms
1.1ms的推理耗时。
2. Mosaic + Mixup 数据增强
- Mosaic数据增强
- Mixup数据增强: 对图像进行混类增强的算法,它将不同类之间的图像进行混合,从而扩充训练数据集
3. Anchor-free
YOLO v4
、YOLO v5
均采用了YOLO v3
原始的anchor设置。然而anchor机制存在诸多问题:
- (1) 为获得最优检测性能,需要在训练之前进行聚类分析以确定最佳anchor集合,这些anchor集合存在数据相关性,泛化性能较差;
- (2) anchor机制提升了检测头的复杂度。
Anchor-free检测器在过去两年得到了长足发展并取得了与anchor检测器相当的性能。
将YOLO转换为anchor-free形式非常简单,我们将每个位置的预测从3下降为1并直接预测四个值:即两个offset以及高宽。这种改进可以降低检测器的参数量于GFLOPs进而取得更快更优的性能:42.9%AP。
4. Multi positives
为确保与YOLOv3的一致性,前述anchor-free版本仅仅对每个目标赋予一个正样本,而忽视了其他高质量预测。参考FCOS,我们简单的赋予中心3×3区域为正样本。此时模型性能提升到45.0%,超过了当前最佳U版YOLOv3的44.3%。
5. SimOTA
OTA从全局角度分析了标签分配并将其转化为最优运输问题取得了SOTA性能。
然而,作者发现:最优运输问题优化会带来
25
%
25\%
25%的额外训练耗时。因此,我们将其简化为动态
t
o
p
−
k
top-k
top−k策略以得到一个近似解(SimOTA)。SimOTA不仅可以降低训练时间,同时可以避免额外的超参问题。SimOTA的引入可以将模型的性能从
45.0
%
45.0\%
45.0%提升到
47.3
%
47.3\%
47.3%,大幅超越U版YOLOv的
44.3
%
44.3\%
44.3%。
6. End-to-End YOLO
YOLO X
参考PSS添加了两个额外的卷积层,one-to-one标签分配以及stop gradient。这些改进使得目标检测器进化成了端到端形式,但会轻微降低性能与推理速度。
因此,我们将该改进作为可选模块,并未包含在最终模型中。