YOLO V4论文解读

2021-06-21 17:57:19 浏览数 (1)

YOLO V4论文解读

  • 一、YOLOV3回顾
  • 二、YOLOV4中
  • 三、Bag of freebies
    • 数据扩充:
    • 模拟对象遮挡:
    • 结合多幅图像进行数据扩充:
    • 解决类别不平衡:
    • label smoothing
    • bbox:
    • Yolov4-use:
  • 四、Bag of specials
    • 1、 enhance receptive field(扩充接受阈): SPP, ASPP, RFB
    • 2、 attention module:
    • 3、feature integration:(特征集成)
    • 4、activation function:
    • 5、post-processing method:
    • YOLOv4 - use:
  • 五、Selection of architecture (网络结构的选择)
  • 六、Additional improvements
  • 七、细节
    • 1、 Mosaic data augmentation(马赛克数据增强)
    • 2、 DropBlock regularization
    • 3、 Class label smoothing
    • 4、 CIou-Loss
    • 5、 DIou-soft NMS
    • 6、 CmBN
    • 7、 Self-Adversarial Training(自对抗训练)
    • 8、 Elminate grid sensitivity(网格消除敏感)
    • 9、 Cosine annealing scheduler (模拟余弦退火)
    • 10、 Using multiple anchors for a single ground truth
    • 11、 Random training shapes (随机多尺度的训练)
    • 12、 Mish activation
    • 13、 CSP
    • 14、 SPP
    • 15、 SAM-block
    • 16、 PAN

YOLO V4论文地址

一、YOLOV3回顾

代码语言:javascript复制
Backbone: darknet53
Anchors boxes
Batch normalization
Multi-scale
取消了pooling层,改用卷积核步长进行上采样
Logistics 代替了 softmax

二、YOLOV4中

代码语言:javascript复制
作者将很多的新方法融合到一起,具体包括:
Weighted-Residual-Connections
Cross-Stage-Partial-connections
Cross mini- Batch Normalization
Self-adversrial-training
Mish activation
Mosaic data augmentation
DropBlock regularization
CloU loss

AP:代表的是精度 FPS:代表的是检测速度 YOLOV4的精度比YOLOV3提高了很多

Input:图像或者是经过处理的图像 BackBone:特征提取网络 Neek:FPN(yolov3)、PANet(yolov4)

三、Bag of freebies

改变培训策略,或者只会增加培训成本的方法,对测试不影响

数据扩充:

代码语言:javascript复制
1、光度畸变:调整图像的亮度、对比度、色调、饱和度和噪声
2、几何畸变:加入随机缩放、剪切、翻转和反旋转

模拟对象遮挡:

代码语言:javascript复制
1、	random erase, CutOut :可以随机的选择图像中的矩形区域,并且填充一个随机的或者是互补的零值
2、	hide-and-seek、grid mask:随机的或者是均匀的选择图像中的多个矩形区域,并将其全部替换成0 

feature map: (在特征图上做增强) DropOut/DropConnect和DropBlock

结合多幅图像进行数据扩充:

MixUP、 CutMix Style Transfer GAN

CutMix (Mosaic data augmentation)

解决类别不平衡:

hard negative example mining (只适用两阶段) gnline hard example mining (只适用两阶段) focal loss

label smoothing

bbox:

代码语言:javascript复制
1、	loU_ loss
2、	GloU_ loss
3、DIoU_ loss
4、CIoU_ loss(yolov4采用的)

Yolov4-use:

代码语言:javascript复制
1、CutMix and Mosaic data augmentation. 
2、DropBlock regularization. 
3、Class label smoothing
4、CloU-loss. 
5、CmBN
6、Self-Adversarial Training
7、Eliminate grid sensitivity
8、Using multiple anchors for a single ground truth
9、Cosine annealing scheduler
10、Optimal hyperparameters(通过遗传算法找到最优的参数)
11、Random training shapes。

四、Bag of specials

只会增加少量推理成本单却能显著提高对象检测精度的plugin moduled 和 post-processing methods

1、 enhance receptive field(扩充接受阈): SPP, ASPP, RFB

2、 attention module:

代码语言:javascript复制
1、	Squeeze-and-Excitation (SE):可以改善resnet50在分类任务上提高1%精度,但是会增加GPU推理时间10%。
2、	Spatial Attention Module (SAM):可以改善resnet50在分类任务上提高0.5%精度,并且不增加GPU推理时间。(yolov4采用)

3、feature integration:(特征集成)

早期使用skip connection、hyper-column。 随着FPN等多尺度方法的流行,提出了许多融合不同特征金字塔的轻量级模型。SFAM、 ASFF、 BiFPN。SFAM的主要思想是利用SE模块对多尺度拼接的特征图进行信道级配重权。ASFF使用softmax作为点向水平重加权,然后添加不同尺度的特征映射。BiFPN提出了多输入加权剩余连接来执行按比例加权的水平重加权,然后加入不同比例的特征映射。

4、activation function:

代码语言:javascript复制
1、ReLU解决了tanh和sigmoid的梯度消失问题。
2、LReLU,PReLU, ReLU6, SELU, Swish ,hard-Swish ,Mish 其中Swish和Mish都是连续可微的函数。

5、post-processing method:

代码语言:javascript复制
1、Nms: c*p
2、soft-nms:解决对象的遮挡问题
3、DIoU nms:将中心点分布信息添加到BBox筛选过程中

YOLOv4 - use:

代码语言:javascript复制
1、Mish activation
2、CSP
3、MiWRC(简单的理解就是残差连接)
4、SPP-block.
5、SAM
6、PAN
7、DIoU-NMS

五、Selection of architecture (网络结构的选择)

在ILSVRC2012XImageNet)数据集上的分类任务,CSPResNext50要比CSPDarknet53好得多。然而,在COCO数据集. 上的检测任务,CSPDarknet53比CSPResNext50更好。 CSP是一种网络结构,可以移植在各种网络上 backbone: CSPDarknet53 additional module: SPP neck: PANet head: YOLOv3 (anchor based)

六、Additional improvements

为了使检测器更适合于单GPU.上的训练,做了如下补充设计和改进: 1、 引入了一种新的数据增强方法Mosaic和自对抗训练(SAT) 2、在应用遗传算法的同时选择最优超参数 3、修改了一些现有的方法,如: SAM, PAN, CmBN

七、细节

1、 Mosaic data augmentation(马赛克数据增强)

对于Mixup可以这样理解: 在COCO数据集上,总共有80个类别,如果有一个物体,那么这个类别就制1, 其他部位全部制0.但是对于这个Mixup,在猫上和狗上类别分别制0.5,其他部位全部制0. CutOut:遮挡 CutMix:狗的面积占百分之六十,所以狗的标签概率是0.6,猫的面积占了百分之四十,所以猫的标签概率是0.4.另外78个类别是0.

马赛克数据增强:每张图片做四个类别,每个类别根据图像所占的面积大小进行分配标签概率

2、 DropBlock regularization

Dropout:(b)图中的“x”,代表的是扔掉的像素,就是没有激活的像素,但是网络还是会从dropout掉的激活单元附近学习到同样的信息的

Dropblock:如(c)图,把整块信息dropout掉,就不能学习到这片区域的信息了,可能学到边缘的信息。通过dropout掉一部分相邻的整片的区域(比如头和脚),网络就会去注重学习狗的别的部位的特征,来实现正确分类,从而表现出更好的泛化。

3、 Class label smoothing

让标签变得平滑一点,提升精度,更好的训练模型

代码语言:javascript复制
[0, 0, 1]   —>  [0.01, 0.01, 0.98]

公式:[…]·(1-a) a/n·[1,1…] 一般的时候, a设置为0.05 ,n是类别数

4、 CIou-Loss

当真实框和预测框没有交集的时候,也就是如下图:

Liou的值=1,是常数,所以常数的导数为0,所以梯度消失。为了解决梯度消失的问题,

引入了GIou-Loss,相当于加入了一个惩罚项

Diou:加入了两个框的中心点位置的约束,c是对角线的长度,分子是两个中心点的平方

Ciou:是在Diou的基础上乘上了α*v,效果有时候和Diou差不多

v:是用来度量长宽比的相似性的 α:权重函数

5、 DIou-soft NMS

M是置信度最高的框的四个坐标 ,Bi是其他的框 在原始的NMS中,IoU度量被用来抑制冗余检测盒,其中重叠区域是唯一的因素, 在有遮挡的情况下常常产生错误的抑制。DIoU-NMS 不仅考虑了检测区域的重叠,而且还考虑了检测区域间的中心点距离。

6、 CmBN

一般的时候,当这个batchsize比较小的时候,我们的精度是会降低的,训练的时候,精度越来越好,CBN就是在我们batchsize比较小的时候,达到比较高的精度 作者这样做的原因就是,为了使检测器更加的适合于单GPU上训练

7、 Self-Adversarial Training(自对抗训练)

就是把我们的对抗样本训练进去,相当于在做数据增强 对抗样本的定义:以图像样本为例,在原样本上加入一些轻微的扰动,使得在人眼分辨不出差别的情况下,诱导模型进行错误分类。

8、 Elminate grid sensitivity(网格消除敏感)

通过将sigmoid乘以一个超过1.0的因子来解决这个问题

9、 Cosine annealing scheduler (模拟余弦退火)

针对学习率的,改变学习率的一种方式

10、 Using multiple anchors for a single ground truth

11、 Random training shapes (随机多尺度的训练)

12、 Mish activation

公式:

代码语言:javascript复制
Mish=x * tanh(ln(1 e^x))

理论上对负值的轻微允许允许更好的梯度流,而不是像ReLU中那样的硬零边界。 平滑的激活函数允许更好的信息深入神经网络,从而得到更好的准确性和泛化。

13、 CSP

CSPNet可以大大减少计算量,提高推理速度和准确性

14、 SPP

不管输入尺寸是怎么样的,SPP层可以产生固定大小的输出,用于多尺度的训练

15、 SAM-block

不仅在通道上加了注意力机制,在空间上也加了注意力机制

16、 PAN

PAN基于FPN和Mask RCNN模型之上提出了三点创新: 1、PANet改进了主干网络结构,加强了特征金字塔的结构,缩短了高低层特征融合的路径 2、提出了更灵活的RoI池化。之前FPN的RoI池化只从高层特征取值,现在则在各个尺度上的特征里操作; 3、预测mask的时候使用一个额外的fc支路来辅助全卷积分割支路的结果。 PANet在COCO 17实例分割竞赛中取得了第一名的成绩,在检测任务中取得了第二的成绩。

好了上面就是对YOLOv4的一些新的改进的解读,具体参考了b站的一位小伙伴,后面我将继续写下yolov4的代码具体实现。。。真的好难,加油!

0 人点赞