yolov4论文笔记
yolov4论文主要总结了一些技巧,以及实验的效果。
1.yolov4算法的效果:
2.yolov4的trick
yolov4使用了一些通用功能包括:
- Weighted-Residual-Connection(WRC)
- Cross-Stage-partial-connections(CSP)
- Cross mini-Batch Normalization (CmBN)
- Self-adversarial-training(SAT)
- Mish-acticvation
- Mosaic data augmentation
- DropBlock regularization
- CIoU loss
3.目标检测模型
目标检测模型一般分为3部分:backbone,head,neck
- Backbone:主干网络通常在数据集上进行预训练,常用的网络有:VGG16 、ResNet-50 、SpineNet 、EfficientNet-B0/B7 、CSPResNeXt50 、CSPDarknet53
- Neck:在head和backbone中间插入一些层,这些层由来自于不同阶段,常用的模块有
- Additional blocks: SPP 、ASPP 、RFB 、SAM
- Path-aggregation blocks: FPN 、PAN 、 NAS-FPN 、 Fully-connected FPN 、 BiFPN 、ASFF 、SFAM
- Heads:用来预测目标的类别和边界框
- one-stage :
- RPN 、SSD 、YOLO 、RetinaNet (anchor based )
- CornerNet 、CenterNet 、 MatrixNet 、 FCOS (anchor free )
- two-stage:
- Faster R-CNN、R-FCN、Mask RCNN (anchor based )
- RepPoints (anchor free)
one-stage 和two-stage 代表:two-stage 通常先做建议框粗修和背景剔除,然后执行建议框的分类和边界框的回归;one-stage则将这两个过程融合。
4.技巧分类
yolov4将技巧进行定义分类:Bag of freebies、Bag of speicals
Bag of freebies:使目标检测器有更准确但是不增加推理成本的训练方法
- 图像增强:增加输入图像的可变性,使模型有更好的鲁棒性
- 光度畸变:调节图像的亮度,对比度,饱和度,噪声
- 几何畸变:随机缩放,裁剪,翻转,旋转
- 目标遮挡:随机擦除和剪切可以随机选择图像中的矩区域并填充0或互补值
- 多个图同时使用
- 不同的系数将两个图像进行相加和相乘,并调整标签
- 裁剪图像覆盖到其他图像的矩形区域内
- GAN样式传递有效地减少CNN学习到的问题偏差
- 解决有偏差数据集中语义分布的问题,一个重要的问题是不同类别数据不平衡。解决方法:
- hard negtive example mining 和 online hard example mining(two-stage)
- focal loss,将硬标签转为软标签(解决不同类别之间的联系程度的表示问题)(one-stage)
- 边界框回归预测:
- IOU loss : 边界框的左边偏差和长宽偏差以外又加入IOU损失
- GIOUloss:将同时覆盖预测框和真是框的边界框作为分母代替原来IOU的分母
- DIOU:到中心点的距离
- CIOU:更好的覆盖速度和准确性
Bag of specials:增加了推理消耗,但是准确性有很高的提升
- 扩大感受野:SPP、ASPP、RFB
- SPP:何凯明提出的一维空间金字塔池化,yolov3作者将SPP改进为内核为大小为k*k最大池化输出级联
- 引入注意力机制:channel-wise attention、point-wise attention两类代表方法分别为:
- Squeeze-and-Excitation :top-1 accuracy 提升1% ,计算工作量提高了2%,但是GPU推理时间提高了10%(用于移动设备)
- Spatial Attention Module :top-1 accuracy 提升0.1% 计算工作量提高了0.5%,GPU没有影响
- 加强特征集成
- (早期使用skip-connection和hyper-colum去集成低水平物理特征和高水平语义特征)
- 目前 FPN多尺度预测方法很受欢迎,集成不同特征金字塔的轻量级模型随机提出(SFAM ASFF BiFPN )
- 后期处理(筛选预测结果)
- NMS:
- greedy NMS:考虑了置信度
- soft NMS:考虑了遮挡问题
- 激活函数:好的激活函数可以使梯度更高效地传播,同时不会花费额外的计算
- ReLU:解决梯度消失的问题
- LReLU和PReLU主要解决输出为0使梯度为0的问题
- ReLU6为量化网络设计
- SELU满足网络自归一化
5.结构选择
目的:
- 找到分辨率、卷积层数、参数数量、输出层数的优化平衡
- 找到额外的模块能增加感受野和参数聚合的方法
目标检测器的需求:
- 更高的输入分辨率:检测多个小物体
- 更多的层数:更大的感受野
- 更多的参数:检测多尺度的不同目标
不同感受野大小的影响:
- 能看到整个物体
- 能看到物体周围的环境
- 增加了图像点和最终激活函数之间的连接数
最终选择:
backbone:CSPDarknet53(明显增加了感受野)
neck:PANet (特征集成) SPP additional module (扩大感受野)
head:YOLOv3(anchor based)
6.选择BoS和BoF
一般CNN训练的时候有如下选择:
- Activations: ReLU, leaky-ReLU, parametric-ReLU, ReLU6, SELU, Swish, or Mish
- Bounding box regression loss :MSE, IoU, GIoU, CIoU, DIoU
- Data augmentation :CutOut, MixUp, CutMix
- Regularization method(正则化) : DropOut, DropPath Spatial DropOut , or DropBlock
- Normalization of the network activations by their mean and variance(归一化):Batch Normalization (BN) , Cross-GPU Batch Normalization (CGBN or SyncBN), Filter Response Normalization (FRN) , Cross-Iteration Batch Normalization (CBN)
- Skip-connections: Residual connections , Weighted residual connections , Multi-input weighted residual connections,Cross stage partial connections
为了更改的适应单个GPU训练,有下列改进:
- 数据增强的方法:Mosaic 、Self-Adversarial
- mosaic:混合四张图片输入(Cutmix是两张),这样这一检测他们环境之外的目标(变相降低mini-batch)
- Self-Adversarial(两阶段操作):第一阶段改变原始图像而不是改变权重,神经网络以这种方式对他自己进行对抗攻击,更改原始图像来创造一个图片上没有对象的假象。在第二阶段,神经网络被正常训练去在这个修改过的图像上检测目标
- 用遗传算法选择超参数
- 改进存在的方法使我们的训练更高效:modified SAM, modified PAN, and Cross mini-Batch Normalization (CmBN)
- CmBN是CBN的改进版本,如图所示
- SAM改进:
- PAN改进
7.yolov4模型内容:
- 网络结构:
- Backbone: CSPDarknet53
- Neck: SPP , PAN
- Head: YOLOv3
- BoF和BoS的使用
- Bag of Freebies (BoF) for backbone: CutMix and
Mosaic data augmentation, DropBlock regularization,
Class label smoothing - Bag of Specials (BoS) for backbone: Mish activation, Cross-stage partial connections (CSP), Multiinput weighted residual connections (MiWRC)
- Bag of Freebies (BoF) for detector: CIoU-loss,
CmBN, DropBlock regularization, Mosaic data augmentation, Self-Adversarial Training, Eliminate grid
sensitivity, Using multiple anchors for a single ground
truth, Cosine annealing scheduler [52], Optimal hyperparameters, Random training shapes - Bag of Specials (BoS) for detector: Mish activation,
SPP-block, SAM-block, PAN path-aggregation block,
DIoU-NMS
注释:
- 感受野:
在神经网络中,某一层输出的结果中的一个元素对应的输入层区域称作感受野,通俗的解释,就是特征图上的一个点所对应输入层的区域称感受野
公式:
rout = rin +(k-1)* jin
rout:输出层的感受野
rin:输入层的感受野
k:卷积核的大小
jin:输入层的特征之间的距离
注释:
- 感受野:
在神经网络中,某一层输出的结果中的一个元素对应的输入层区域称作感受野,通俗的解释,就是特征图上的一个点所对应输入层的区域称感受野
公式:
rout = rin +(k-1)* jin
rout:输出层的感受野
rin:输入层的感受野
k:卷积核的大小
jin:输入层的特征之间的距离
jout = jin * stride(yolov4中的)