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的代码具体实现。。。真的好难,加油!