yolov4负样本_了解各种挂件--帮助读懂YOLOV4

YOLOV4在V3的基础上引进了很多挂机,了解这些挂件们,会有助于真正了解这篇文章。所以我就先从挂件开始介绍吧。

Weighted-Residual-Connections

文章

weighted-residual 可以更好更快的结合不同层传递过来的残差,虽然增加了一些计算量,但是当网络层数从100+增加到1000+时,网络效果更好,收敛得更快。公式是:

卷积网络参数,
是控制残差的权重,
是连续两个conv-BN-Relus。

Cross-Stage-Partial-Connections

文章

作者认为现在网络计算量大是由于在网络优化的过程中,重复的梯度信息。作者将一个stage的头尾两部分的特征图集成起来,来解决这个问题。减少了至少20%的计算量,网络效果与之前相当甚至超出。

CSP结构可以和其他网络结构结合,以resnext为例

f3a0b1efd41cffda6163dec8ea3c17db.png

将base layer 按channel 一份为二,这种情况下甚至都不需要bottleneck,在固定FLOPs的情况下,对MAC(Memory Access Cost)的需求更低。

Cross mini-Batch Normalization

首先介绍CNB,文章。

现在很多大的网络,往往batch-size都很小,比如一些检测网络,这样的情况下直接使用BN,batch内部的统计量与全局数据的统计量会有较大的误差会导致BN的效果不好;使用Group Normalization在layer之间做normalization会导致计算量过大;也有使用navie CNB的方式,就是多次迭代之间计算BN所需的统计量,但是不同迭代之间使用的参数

也是不一致的,所以BN的统计量也不可以一起使用(
我刚看到这里的时候就想为什么不能多次迭代的mini-batches之间不更新网络参数,直接最后BN的统计量与网络参数一起更新)。

CNB的思想就是通过泰勒展开,使用之前迭代的BN统计量去逼近当前的BN统计量

66a335c7f734f0004bd78742970f617c.png

其中为

均值,
为平方均值,当步长小的时候可以忽略二阶部分。整个计算还有一个近似的地方,具体到计算某个layer时,只考虑当前layer,具体可以去看论文。

5c42f648da91c477ff617c2dc2e11611.png

反观CmBN就简单很多,mini-batches之间不更新网络参数,只在batch最后同时更新BN的统计量ScaleShift和网络参数,就相当于一个大的batch,分多个mini batches进行计算,在最后一起更新。

Self-Adversarial-Training

先介绍下 Adversarial Training

内层就是给输入加一个扰动最大化loss,外层在当前的扰动下最小化loss。

SAT包含两个向前向后的过程:

1.第一次固定网络的参数去训练图像,通过最大化loss,生成图像没有待检测物体的描述(就是扰动)。

2.第二次就是在加了扰动的图像上正常训练模型。

下面是我在github上找的作者的详细描述。

a43f478e5b7d829e800588f8f29f9391.png

Mish activation

d2e92beaf7e85bca43c11f3dcb791b29.png

公式

y = x*tf.math.tanh(F.softplus(x))

可以发现比RELU平滑,经过测试,比RELU略慢,但是效果好。

Mosaic data augmentation

CutOut:图像中切除一块

MixUp:两张图像加权相加

CutMix:一张图像切除一块,另一张取对应位置补上去。

Mosaic:四张图像拼一起。

f7f0342293e3e9bd956035a1c3c837ad.png

DropBlock

dropblock是对卷积层正则化的方式,dropout是dropblock的一种,当block的大小为1时就是dropout。在使用dropout时,被drop调的单元的特征还可以通过附近激活的单元去学习;而dropblock只能从其他区域去学习,比如drop调了狗的头,只有去学习狗的其他部分,有更好的泛化效果。

03b72907d7701de2d85288d3209dbe98.png

IOU,GIOU,DIOU,CIOU

这边简单介绍一下,具体可以看这里

IOU =

GIOU:即使IOU相同也不能代表两个bbox的接近程度是一致的,因此提出GIOU

75b0d7771ca68ed22464a82bb55be5a0.png

DIOU:当一个物体包含另一个物体时,GIOU就退化到IOU了。DIOU考虑到两个bbox的中心点的距离。

e1dc62ded2a51c0673fd0198442df2e0.png

CIOU:进一步考虑了bbox长宽比的关系。

1759db20a55f6d35cc2f1b18e54526de.png

2404afd13ed09a3368ac3c47c9028db3.png

PANet

这个着实比较熟,当年还实现过,就是最后全连接太占资源了,单卡跑起来比较费劲。

个人总结起来就是比FPN多了一个自下而上的过程,多做了一次特征融合。

34ef5473da969f08587e7f8c6566872d.png

SE & SAM

SE是在通道上加注意力,SAM是在特征图的二维空间上注意力了。

8685d2b5e23d515fcd2306b5b9f5931e.png

99679ec1658ae8bf71bb93fbac66a422.png

正文开始

d58b9db590c30dedba7c204fc0503c17.png

作者在V3的基础上尝试加入各种挂件,包括:Weighted-Residual-Connections、Cross-Stage-Partial-connections、Cross mini-Batch Normalization、Self-adversarial-training、Mish-activation、Mosaic data augmentation、DropBlock regularization 和 CIoU loss。组合这些挂件可以达到SOTA:在MS COCO 上达到 43.5%AP(65.7%

),使用Tesla V100 可以保持65的FPS。

Contributions

1.任何人使用一块1080Ti或者2080Ti就可以训练一个又快又准的目标检测模型。

2.我们实验确认了各种SOTA的Bag-of-Freebies和Bag-of-Specials在训练时对模型的影响。

3.我们对一些SOTA的方法做出改进,让它们更适合单卡训练,包括CNB,PAN,SAM等。

Related work

Object detection model

  • Backbones for GPU:VGG,ResNet,ResNeXt,DenseNet
  • Backbones for CPU:SqueezeNet,MobileNet,ShuffleNet
  • two-stage: R-CNN, fast R-CNN, faster R-CNN, R-FCN, Libra R-CNN .RepPoints(anchor free)
  • one-stage: 使用anchors的有 YOLO(除了V1), SSD , RetinaNet; 不带anchor的有 CenterNet, CornerNet, FCOS 等。
  • neck:backbone和head之间的部分,常常用于提取不同stage的特征,包括FPN,PAN,BiFPN,NAS-FPN。
  • new: backbone 有 DetNet, DetNAS;完整的检测模型有:SpineNet, HitDetector

66b0e15315da7b929dd1a81dd0d2644c.png

Bag of freebies是指提升model的预测准确度但是不会影响增加预测的开销,常常使用在训练阶段且只会增加训练开销。常见的手段就是数据增广。数据增光包括photometric distortions和geometric distortions,具体有:

photometric distortions:调整亮度,对比度,hue,饱和度,图像噪声。

geometric distortions:随机缩放、裁剪、翻转和旋转。

上述的方法都是像素级别的,原始的像素信息依旧保存着。

有一些尝试模拟目标遮挡的数据增广方式,比如random erase、CutOut、hide-and-seek、grid mask都是随机选取原图像中的矩形区域置0或者随机值。也有作用在特征图上的方法,比如DropOut、DropConnect、DropBlock;MixUp将两张图片融合到一起;CutMix将原图裁剪到一部分并用另一张的对应部分填补上去;style transfer GAN也可以用来做数据增广,可以减少CNN学习到的纹理偏差。

有一些freebies是用来解决数据的语义分布的偏差问题,一种情况就是不同类别之间数据分布不均衡,常用的方法就是hard negative example mining和 OHEM, hard negative example mining需要结束一轮训练才能找到loss高的负样本,而OHEM是复制了一个只做forward的分支,提取loss高的ROIs,然后放入另外一个分支训练,两个分支一起更新权重。因为one-stage的检测方法没有RPN所以不适合使用example mining的方法,于是就有了kaiming老哥的focal loss,

。除此之外还有label smoothing,可以让模型更加鲁棒。

最后就是LOSS方面的设计,常用的L1,L2 loss 来做回归,当物体的大小变化时,loss也会随这变化。于是就有基于IOU的loss,让降低loss与物体大小的相关性,包括IOUG,IOU,DIOU,CIOU。

Bag of specials

specials 就是指提升预测的开销,但是可以提升模型准确率的方法。

常用的模块有SPP,ASPP,RFB;最早的SPP结构是将特征图分解成多个d*d的特征块,然后使用bag-of-word的方式组合成固定大小的特征;后续就使用max-pooling的方式替代bag-of-word。ASPP相较SPP 加了空洞卷积。RFB基于inception的思想加了空洞卷积。

attention机制也是一种常用的提升方式,SE就是基于通道的attention,SAM就是基于特征图的二维attention。

关于特征集成部分,skip-connect和hyper-column都是融合不同尺度特征的方式。SFAM是基于SE的方式,在给concated后的多尺度特征上,给通道设置权重。ASFF用softmax在point-wise的级别上给特征加权,然后相加不同尺度的特征。在BiFPN中使用多输入加权的残差连接给不同尺度的特征加权,然后相加。

关于激活函数,就有ReLU,LReLU,PReLU,ReLU6,SELU,Swish,hard-Swish和Mish。

关于后处理,常用的是NMS;然后基于贪心的思想,提出了soft NMS;DIoU NMS是进一步把bbox的center point的信息加入到NMS的计算中。

Methodology

基于GPU,使用CSPResNeXt50/CSPDarknet53.

基于VPU,使用EfficientNet-lite/MixNet/GhostNet/MobileNetV3.

Selection of architecture

对分类来说最优的网络结构,对检测来说往往不是。对分类任务相反,检测任务需要:

  • 更高的输入size,用于检测小目标。
  • 更深的网络,更大的感受野去覆盖更大的输入size。
  • 更多的参数,更大的模型复杂度去支持检测各种尺度的物体。

Selection of Bof and Bos

0758afd96a0202c7039abf69260340c8.png

Additional improvements

作者做出的一些改进方法

  • Mosaic和SAT
  • 用遗传算法寻找最优超参数
  • 调整现有方法,modified SAM,modified PAN, CmBN

0115488597c8a083ed711af5031c76ca.png

SAM 从 scale-wise 的attention该成point-wise的;PAN从add改成concate。

YOLOV4

ef17f300c664727e52d15871399215a5.png

Experiments

具体的实验细节就不贴在这里了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值