YOLOv4之trick总结(2)
上文记录了YOLOv4一文中所提到的不增加计算损耗的trick(Bag of freebies),本文用于记录仅增加微小的计算损耗的trick(Bag of specials)。
- 不增加计算损耗的trick(Bag of freebies):
- 像素级数据增强(亮度、对比度、色彩、饱和度、噪声;随机尺度、裁剪、翻转、旋转)
- 模拟目标遮挡(Random Erase、Cutout、Hide-and-seek、Grid-mask;Dropout、DropConnect、DropBlock)
- 使用多张图混合增强(Mixup、CutMix)
- 样本不平衡问题(困难样本挖掘(HEM、OHEM)、Focalloss)
- Onehot类标无法表示各类之间关系(Labelsmooth、Label refinement network)
- 边框回归损失函数(IoU、GIoU、DIoU、CIoU loss)
- 仅增加微小的计算损耗的trick(Bag of specials):
- 增强感受野(SPP、ASPP、RFB)
- 注意力机制(SE、SAM)
- 特征融合(SFAM、ASFF、BiFPN)
- **函数(LReLU、PReLU、ReLU6、Scaled Exponential Linear Unit(SELU)、Swish、hard-Swish、Mish)
- 非极大值抑制(GreedyNMS、softNMS、DIoUNMS)
2.仅增加微小的计算损耗的trick:
- 增强感受野:作者文中所提到的用于增强感受野的模块包括:SPP(Spatial Pyramid Pooling)、ASPP(Atrous Spatial Pyramid Pooling)、RFB(Receptive Field Block)。这三个模块的结构也是大同小异,都是采用并联、对同一个特征图进行重采样的方式提取不同尺度的特征。
其中SPP模块是Kaiming大神ECCV2014的工作,今天看来结构也很简单,如下图所示。由于CNN网络后面接的全连接层需要固定的输入大小,故往往通过将输入图像resize到固定大小的方式输入卷积网络,这会造成几何失真影响精度。SPP模块就解决了这一问题,他通过三种尺度的池化,将任意大小的特征图固定为相同长度的特征向量,传输给全连接层。
SPP
受到SPP的启发,语义分割模型DeepLabv2中提出了ASPP模块,该模块使用具有不同采样率的多个并行空洞卷积层。为每个采样率提取的特征在单独的分支中进一步处理,并融合以生成最终结果。该模块通过不同的空洞rate构建不同感受野的卷积核,用来获取多尺度物体信息,具体结构比较简单如下图所示。
ASPP
ASPP
RFB模块是在(ECCV2018:Receptive Field Block Net for Accurate and Fast Object Detection)一文中提出的,该文的出发点是模拟人类视觉的感受野从而加强网络的特征提取能力,在结构上RFB借鉴了Inception的思想,主要是在Inception的基础上加入了空洞卷积,从而有效增大了感受野。
RFB
2. 注意力机制:文中提到了两个注意力机制模块(SE、SAM),其中SE模块是通道注意力模块,SAM是ECCV2018的文章CBAM中的空间注意力模块。
具体思想都比较简单,SE模块首先将特征图沿着空间维度(H,W)池化压缩为列向量,之后输入两个全连接层分别进行通道压缩(1/16)与通道扩张使通道数保持不变,最后通过一个sigmoid**函数得到各通道的权值,并用该权值对特征图赋权。整个过程相当于对整体特征图进行了一次全局特征筛选,抑制无用的特征通道,加强有用的通道,从而提升性能。
SE模块
SAM模块与SE模块不同,它关注于空间注意力。具体做法类似于SE,只不过是对特征图进行通道维度的池化压缩,之后进行一次卷积操作与sigmoid**函数得到空间权值图,再将该权值图乘回原特征图,就得到了赋有注意力的特征图。思想与SE一样,通过全局信息抑制无用的区域、加强重点区域,从而提升性能。
SAM模块
3. 特征融合:文中提到的特征聚合模块包括(SFAM、ASFF、BiFPN)。
SFAM(Scale-wise Feature Aggregation Module)模块来自于AAAI2019的M2Det模型中,该模块结构分为两部分,第一部分是不同尺度的特征拼接,SFAM模块将前方网络提取得到的多尺度等尺寸特征沿通道维拼接得到融合特征图,第二部分就是SE通道注意力模块,对融合后的特征进行赋权值,得到最终特征。
SFAM
ASFF(Adaptively Spatial Feature Fusion)模块避免了传统多尺度特征融合中生硬的concat或直接相加的融合方式,采用自适应的方法,让网络自己学出一种最好的融合方式,如下图所示。首先对不同层的特征图进行上下采样使其大小相同,之后对resize后的特征图分别经过1×1的卷积得到权重参数α,β和γ,且α,β和γ经过concat之后通过softmax**函数使其范围在[0,1]内且和为1。
ASFF
BiFPN(Bi-directional feature pyramid network)模块是在EfficientDet模型中提出的,该模块是在PANet的基础上进行了改进, 首先,删除了只有一个输入的节点,作者认为这种节点对特征融合的贡献很小; 其次,如果与原始输入处于同一级别,则从原始输入添加到输出节点,以便在不增加大量成本的情况下融合更多的特性(蓝色斜线);最后,添加了自上而下和自下而上的双向路径(紫色连线).(个人觉得有点魔改的意思)
BiFPN
4. **函数:这一部分包括了一大堆**函数:LReLU、PReLU、ReLU6、Scaled Exponential Linear Unit(SELU)、Swish、hard-Swish、Mish,最后作者采用了Mish**函数。(PS:个人觉得这部分意义不大,老老实实用relu)(此部分引用https://blog.****.net/qq_20909377/article/details/79133981,https://www.wandouip.com/t5i356161/#ct6,https://blog.****.net/jsk_learner/article/details/102822001)
LReLU:
PReLU:
ReLU6:Relu在x>0的区域使用x进行线性**,有可能造成**后的值太大,影响模型的稳定性,为抵消ReLU激励函数的线性增长部分,可以使用Relu6函数:
Scaled Exponential Linear Unit(SELU):
Swish:
hard-Swish:
Mish:
5. 非极大值抑制:文中提到了三种NMS的方法:NMS、softNMS、DIoUNMS。传统NMS就不多说了,记录一下另外两位。
softNMS:针对传统的NMS容易将相邻物体当做同一物体抑制掉(等同于将其分数置零),从而导致漏检的问题,softNMS设置了一个衰减函数(线性或高斯)降低其分数而非置零。通过这样soft的方法,如若相邻两物体的置信度都足够高则可以避免被nms掉。
DIoUNMS:该NMS在DIoUloss一文中提出,在nms过程中采用DIoU的计算方式替换了IoU,由于DIoU的计算考虑到了两框中心点位置的信息,故使用DIoU进行评判的nms效果更符合实际,效果更优。