文章目录
1、YOLO_v2 VS YOLO_v1
根据 Y O L O YOLO YOLO 的误差分析(参考论文笔记:YOLO), Y O L O YOLO YOLO 定位误差高,而且相比于基于区域提议的方法, Y O L O YOLO YOLO 的召回率偏低。 针对这两点, Y O L O _ v 2 YOLO\_v2 YOLO_v2 做了以下改进:
- 在所有的卷积层后增加 B a t c h N o r m a l i z a t i o n BatchNormalization BatchNormalization 这可以显著改善网络的收敛性,并且有利于正则化模型,防止过拟合。增加 B N BN BN 以后移除网络的 d r o p o u t dropout dropout。这将 m A P mAP mAP 提升 2 % 2\% 2%。
- 高分辨率分类器 Y O L O YOLO YOLO 使用 224 × 224 224\times224 224×224 分辨率图像训练分类网络,并且将分辨率增加到 448 448 448 用于检测。这意味着网络需要同时学习目标检测并且适应新的输入分辨率; Y O L O _ v 2 YOLO\_v2 YOLO_v2 首先在 448 × 448 448\times448 448×448 分辨率图像上微调分类器网络,使其更好地调整卷积核适应高分辨率。微调 10 e p o c h s 10~epochs 10 epochs 以后,再微调网络用于检测任务。 这将 m A P mAP mAP 提升 4 % 4\% 4%。
- 移除全连接层,使用锚框预测边界框 Y O L O _ v 2 YOLO\_v2 YOLO_v2 首先去除了一个池化层使网络卷积层的输出有更大的分辨率。然后收缩网络处理 416 × 416 416\times416 416×416 的输入图像,取代 448 × 448 448\times448 448×448 分辨率图像。这样通过 32 32 32 降采样因子,网络输出特征图大小为 13 × 13 13\times13 13×13; Y O L O _ v 2 YOLO\_v2 YOLO_v2 将类预测机制与空间位置分离,为每个锚框预测类和目标。 Y O L O YOLO YOLO 在每幅图像仅预测 98 98 98 个框,但是 Y O L O _ v 2 YOLO\_v2 YOLO_v2 在每幅图像预测超过 1000 1000 1000 个框。使用锚框导致精度略微下降,但是召回率显著提高。
- 尺寸聚类 通过在训练数据集上运行
k
−
m
e
a
n
s
k-means
k−means 聚类算法,为预测框找到较优的先验尺寸。由于
I
O
U
IOU
IOU 分数独立于框的大小,因此使用以下度量准则:
d ( b o x , c e n t r o i d ) = 1 − I O U ( b o x , c e n t r o i d ) d(box,centroid)=1-IOU(box,centroid) d(box,centroid)=1−IOU(box,centroid)
图 2 2 2 给出了 k k k 值与平均 I O U IOU IOU 的关系,考虑召回率和模型复杂度的折衷,选择 k = 5 k=5 k=5。
- 直接位置预测:由于位置偏移量预测没有约束锚框的中心坐标,随机初始化可能导致要花费很长时间才能使模型稳定下来,因此
Y
O
L
O
_
v
2
YOLO\_v2
YOLO_v2 直接预测相对于网格位置的定位坐标。 输出特征图的每个网格预测
5
5
5 个边界框,每个边界框预测
5
5
5 个坐标值
t
x
,
t
y
,
t
w
,
t
h
,
t
o
t_x,t_y,t_w,t_h,t_o
tx,ty,tw,th,to。若网格偏离图像左上角
(
c
x
,
c
y
)
(c_x,c_y)
(cx,cy) 边界框先验的宽和高为
p
w
,
p
h
p_w,p_h
pw,ph:
b x = σ ( t x ) + c x b y = σ ( t y ) + c y b w = p w e t w b h = p h e t h P r ( o b j e c t ) ∗ I O U ( b , o b j e c t ) = σ ( t o ) \begin{aligned} &b_x=\sigma(t_x)+c_x\\ &b_y=\sigma(t_y)+c_y\\ &b_w=p_we^{t_w}\\ &b_h=p_he^{t_h}\\ P_r(object)&*IOU(b,object)=\sigma(t_o) \end{aligned} Pr(object)bx=σ(tx)+cxby=σ(ty)+cybw=pwetwbh=pheth∗IOU(b,object)=σ(to)
使用尺寸聚类并直接预测边界框中心坐标将 m A P mAP mAP 提高大约 5 % 5\% 5%。 - 细粒度特征 Y O L O _ v 2 YOLO\_v2 YOLO_v2 在 13 × 13 13×13 13×13 特征图上进行检测。虽然这对于大目标来说是足够的,但是对于定位较小目标来说,它可能需要更细粒度的特征。 Y O L O _ v 2 YOLO\_v2 YOLO_v2 简单添加一个 P a s s t h r o u g h Passthrough Passthrough 层,获取 26 × 26 26×26 26×26 分辨率的早期特征。 P a s s t h r o u g h Passthrough Passthrough 层类似于 R e s N e t ResNet ResNet 中的恒等映射,通过将相邻特征堆叠到不同的通道而不是空间位置,来连接高分辨率特征和低分辨率特征。这将 26 × 26 × 512 26×26×512 26×26×512 的特征图转换为 13 × 13 × 2048 13×13×2048 13×13×2048 的特征图,可以与原始特征连接。这使得性能略微提高了 1 % 1\% 1%。
- 多尺度训练
Y
O
L
O
YOLO
YOLO 使用分辨率为
448
×
448
448\times448
448×448 的输入。
Y
O
L
O
_
v
2
YOLO\_v2
YOLO_v2 输入分辨率为
416
×
416
416\times416
416×416。为了使
Y
O
L
O
_
v
2
YOLO\_v2
YOLO_v2 在不同大小的图像上运行更加鲁棒,训练时每
10
b
a
t
c
h
e
s
10~batches
10 batches 网络选择一个新的图像尺寸。由于模型降采样因子为
32
32
32 ,图像尺寸从
{
320
,
352
,
.
.
.
,
608
}
\{320,352,...,608\}
{320,352,...,608} 中选择。这种机制迫使网络学会在各种输入尺寸上进行良好的预测。这意味着相同的网络可以以不同的分辨率预测检测。网络在较小的尺寸下运行更快,因此
Y
O
L
O
v
2
YOLO_v2
YOLOv2 提供了速度和精度之间的简单折衷。
2、Brief Summary
2.1、Bounding Boxes 和 Anchor Boxes 比较
- B o u n d i n g B o x e s Bounding~Boxes Bounding Boxes 对应每个网格,每个 B o u n d i n g B o x e s Bounding~Boxes Bounding Boxes 仅生成 5 5 5 个预测值,即 ( x , y , w , h , p ) (x,y,w,h,p) (x,y,w,h,p)。 ( x , y ) (x,y) (x,y) 为预测框中心相对于网格边界的坐标。 ( w , h ) (w,h) (w,h) 为预测框相对于整幅图像的宽度和高度。每个网格预测 C C C 个类概率值,因此, Y O L O YOLO YOLO 输出为 S × S × ( B × 5 + C ) S\times S\times (B\times5+C) S×S×(B×5+C) 维的张量
- A n c h o r B o x e s Anchor~Boxes Anchor Boxes 是从标记好的训练集中,通过 k − m e a n s k-means k−means 聚类算法获得的目标边界框的先验尺寸。它可以帮助训练过程尽快收敛,增加回归过程的稳定性。每个网格对应 A A A 个锚框,输出大小为 A × ( 5 + C ) A\times(5+C) A×(5+C),每个量的含义见 1.5 1.5 1.5。
其实可以简单地将 A n c h o r B o x e s Anchor~Boxes Anchor Boxes 理解为特殊的 B o u n d i n g B o x e s Bounding~Boxes Bounding Boxes,区别在于 A n c h o r B o x e s Anchor~Boxes Anchor Boxes 在 B o u n d i n g B o x e s Bounding~Boxes Bounding Boxes 的基础上又添加了尺度约束,可以对预测框的尺度大小进行较优的初始化,从而改善收敛。
2.2、YOLO_v1和YOLO_v2设计比较
2.3、YOLO_v1和YOLO_v2性能比较
3、YOLOv3
3.1、YOLOv3 特点
- 系统只为每个 g r o u n d t r u t h ground~truth ground truth 分配一个先验框。如果先验框未分配给 g r o u n d t r u t h ground~truth ground truth ,则不会对坐标或类别预测造成损失,只有目标置信度损失。
- Y O L O v 2 YOLOv2 YOLOv2 每个网格分配 5 5 5 个锚框, Y O L O v 3 YOLOv3 YOLOv3 为每个网格分配 3 3 3 个尺度的锚框,每个尺度分配 3 3 3 个锚框,一共使用 9 9 9 个锚框。输出为 N × N × [ 3 ∗ ( 4 + 1 + 80 ) ] N\times N\times [3*(4+1+80)] N×N×[3∗(4+1+80)] 维度的张量, 80 80 80 为预测的类别数量。
-
Y
O
L
O
v
3
YOLOv3
YOLOv3 并没有像
Y
O
L
O
v
2
YOLOv2
YOLOv2 使用很多技巧来提升性能,主要是网络结构的优化。以下是
d
a
r
k
n
e
t
19
darknet19
darknet19 和
d
a
r
k
n
e
t
53
darknet53
darknet53 的网络结构图。
性能比较:
从图中结果可以看出,
D
a
r
k
n
e
t
53
Darknet53
Darknet53 比
D
a
r
k
n
e
t
19
Darknet19
Darknet19 性能更优,而且比
R
e
s
N
e
t
−
101
ResNet-101
ResNet−101 和
R
e
s
N
e
t
−
152
ResNet-152
ResNet−152 更有效率。
3.2、作者的尝试
锚框偏移量预测
作者尝试使用普通锚框预测机制,使用线性激活将
x
,
y
x,y
x,y 偏移预测为框宽或框高的倍数。最后发现这个描述降低了模型的稳定性,并且效果不太好。
线性 x,y 预测取代 logistic
使用线性激活取代逻辑激活来预测
x
,
y
x,y
x,y 偏移量。这导致
m
A
P
mAP
mAP 下降了几个点。
焦点损失
作者尝试使用焦点损失,导致
m
A
P
mAP
mAP 下降了
2
2
2 点。
Y
O
L
O
v
3
YOLOv3
YOLOv3 对于焦点损失试图解决的问题可能已经很鲁棒了,因为它有独立的目标预测和条件类预测。因此,对于大多数例子来说,类预测没有损失?还是什么?不完全确定。
双 IOU 阈值和真值分配
F
a
s
t
e
r
R
−
C
N
N
Faster~R-CNN
Faster R−CNN在训练中使用两个
I
O
U
IOU
IOU 阈值。如果一个预测与某一
g
r
o
u
n
d
t
r
u
t
h
ground~truth
ground truth 重叠
0.7
0.7
0.7,这是一个正例,
[
.
3
−
.
7
]
[ .3-.7 ]
[.3−.7] 忽略,与所有
g
r
o
u
n
d
t
r
u
t
h
ground~truth
ground truth 重叠小于
0.3
0.3
0.3,则判断为一个负例。作者尝试了类似的策略,但没有得到好的结果。