YOLO-v4论文详解-- 潘登同学的目标检测笔记
YOLO-v4介绍
YOLO-v4做了很多的实验,将几乎所有的图像识别方法都做了实验,得到了很多在目标检测下的好用的方法,当然很多方法是随着数据集的改变而改变的,不一定普遍适用的…
目标检测One-stage Detector与Two-stage Detector
Bag of freebies
一袋子训练技巧的总结(只在训练的时候涉及、不影响使用):
- data augmentation(数据增强):
- photometric distortions(HSV上的增强),geometric distortions(旋转缩放平移等增强);
- object occlusion(数据遮挡),随机擦除一块区域;将多个图片变成一张图片(相同位置像素点相乘);
- CutMix将一张图片的一部分挖掉,用另一张图片的一部分来填充;
- style transfer GAN用图片风格迁移做数据增强;
- 解决semantic distribution bias:
- hard negative example mining(负样本挖掘,但是只是适合用在two-stage detector上);
- focal loss(正负样本loss权重); label smoothing proposed(用更smoothing的label代替one-hot hard representation,应该是源自知识蒸馏吧)
- BBox regression:
- 因为之前YOLO在预测
(
x
,
y
,
w
,
h
)
(x,y,w,h)
(x,y,w,h)的时候,都是将
(
x
,
y
,
w
,
h
)
(x,y,w,h)
(x,y,w,h)视作独立变量,没有考虑他们之间的关系,在loss中加入IOU loss的话,就能考虑上
(
x
,
y
,
w
,
h
)
(x,y,w,h)
(x,y,w,h)的内在联系了;
- GIOU: 修改IOU的计算式子,
G
I
O
U
:
=
I
O
U
?
∣
A
c
?
U
∣
∣
A
c
∣
GIOU:=IOU - \frac{|A_c-U|}{|A_c|}
GIOU:=IOU?∣Ac?∣∣Ac??U∣?(其中
A
C
A_C
AC?是两个框的最小闭包面积,
U
U
U是两个框的并集) IoU取值[0,1],但GIoU有对称区间,取值范围[-1,1]。在两者重合的时候取最大值1,在两者无交集且无限远的时候取最小值-1,因此GIoU是一个非常好的距离度量指标;与IoU只关注重叠区域不同,GIoU不仅关注重叠区域,还关注其他的非重合区域,能更好的反映两者的重合度;
- DIOU: 在GIOU的基础上,考虑中心点的距离
D
I
O
U
:
=
I
O
U
?
ρ
(
b
,
b
g
t
)
c
2
DIOU:=IOU - \frac{\rho(b,b^{gt})}{c^2}
DIOU:=IOU?c2ρ(b,bgt)?(
ρ
\rho
ρ表示两个中心点的欧式距离,
c
c
c代表的是能够同时包含预测框和真实框的最小闭包区域的对角线距离;DIoU loss可以直接最小化两个目标框的距离,因此比GIoU loss收敛快得多。对于包含两个框在水平方向和垂直方向上这种情况,DIoU损失可以使回归非常快,而GIoU损失几乎退化为IoU损失。
- CIOU: 在DIOU的基础上,考虑比例问题
C
I
O
U
:
=
I
O
U
?
ρ
(
b
,
b
g
t
)
c
2
?
α
v
CIOU:=IOU - \frac{\rho(b,b^{gt})}{c^2} - \alpha v
CIOU:=IOU?c2ρ(b,bgt)??αv其中
V
V
V用来度量长宽比的相似性
v
:
=
4
π
2
(
a
r
c
t
a
n
w
g
t
h
g
t
?
a
r
c
t
a
n
w
h
)
2
v:=\frac{4}{\pi^2}(arctan\frac{w^{gt}}{h^{gt}} - arctan\frac{w}{h})^2
v:=π24?(arctanhgtwgt??arctanhw?)2
- Regularuzation: DropOut, DropPath,Spatial DropOut,DropBlock
Bag of specials
一袋子使用技巧总结(既在训练的是涉及又在测试时候处理)
- SPP: 空间金字塔池化层
- Attention: 注意力机制, 类似于虚化背景,通过掩码将框外的像素缩小,将框内的像素放大
- feature integration: 将feature map进行特征融合(FPN思想),然后也把FPN的思想与Attention思想进行融合
- activation function:各种ReLu家族的激活函数,其中重要的是Swith 和 Mish的激活函数
S
w
i
t
h
=
x
?
σ
(
x
)
M
i
s
h
=
x
?
t
a
n
h
(
ln
?
(
1
+
e
x
)
)
Swith = x * \sigma(x) \\ Mish = x*tanh(\ln(1+e^x)) \\
Swith=x?σ(x)Mish=x?tanh(ln(1+ex))
YOLO-v4的选择
网络结构
- 主干网络: 在分类任务上,CSPResNext50比CSPDarknet53要好;但是处理目标检测任务的时候,CSPDarknet53比CSPResNext50要好,所以选择了CSPDarknet53作为主干网络;
- FPN module: 选择了PANet 作为特征融合的网络层
- head: 直接把YOLO-v3的头部网络拿过来
其他改进
-
Self-Adversarial Training(SAT): 一次迭代包含两次正向传播与反向传播,第一次正向传播反向传播修改数据集x,第二次正向传播反向传播修改w; -
Mosaic: 将四张图片拼在一起当做一张图片(数据增强的方式) -
Cross mini-Batch Normalization(CmBN): 跨迭代的数据归一化操作 -
modify SAM: 修改的SAM,将加和操作改为拼接操作
BoF and BoS
- BoF for backbone: CutMux, Mosaic data augmentation, DropBlock regularization,Class label smooting;
- BoS for backbone: Mish activation, Cross-stage partial connections(CSP), Multi-input weighted residual connections(MiWRC);
- BoF for detector: CIOU-loss,CmBN,DropBlock regularization,Mosaic data augmentation,Self-Adversarial Training, Eliminate grid sensitivity,Using multip anchors for a single ground truth,Cosine annealing scheduler,Optimal hyper-parameters,Random training shapes;
- BoS for detector: Mish activation,SPP-block,SAM-block,PAN path-aggregation block,DIOU-NMS
|