浅尝YOLOv4论文

摘要

对于目标检测来说,都有one-stage和two-stage的方法,而yolo系列的算法都是one-stage的。one-stage速度快但是精确度却会稍微低一些。而yolov4就做到了鱼与熊掌都可兼得的效果,并且还可以降低硬件的要求。

yolov4的主要贡献:
1.设计了一个高精度、高实时性的网络,并且该网络只需要一个GPU就可以快速训练;
2. 验证了Bag-of-Freebies和Bag-of-Specials对目标检测的影响很大,并将之使用到yolov4的网络中;

在这里插入图片描述

yolov4的网络结构

对于目标检测网络中,都是包含backbone,neck,head三个部分。在yolov4中又是怎么设计的呢?

backbone的选择

为了加快网络的运行速度,以及优化并行计算,作者借鉴了retinanet的思想,将ResNeXt50、Darknet53分别与Cross-Stage-Partial-connections(CSP)相结合,组成了CSPResNeXt50和CSPDarknet53。
并且在后续的实验中证明CSPResNeXt50更适合于分类网络,CSPDarknet53更适合于检测网络,因此YOLOv4的backbone选择CSPDarknet53。

neck的选择

选择完backbone后,在neck这一部分主要是考虑如何扩大感受野以及如何更好的进行特征融合。对于检测网络来说,主要有三个要求:

  1. 提高网络输入的分辨率,可以提升检测小目标的性能;
  2. 增加网络层数,更多的网络层数可以扩大网络的感受野,以便网络可以进行更大分辨率的输入;
  3. 更多的网络参数,可以让网络更好的检测图像中不同尺寸的目标;
    经过一系列的实验,最终选择SPP module和PANet中的path-aggregation neck作为neck。

head的选择

在yolov4中,仍然选用和yolov3一样的head。
因此,yolov4的基本组成是:

CBM:Yolov4网络结构中的最小组件,由Conv+Bn+Mish激活函数三者组成。
CBL:由Conv+Bn+Leaky_relu激活函数三者组成。
Res unit:借鉴Resnet网络中的残差结构,让网络可以构建的更深。
CSPX:借鉴CSPNet网络结构,由卷积层和X个Res unint模块Concate组成。
SPP:采用1×1,5×5,9×9,13×13的最大池化的方式,进行多尺度融合。

Bag of Freebies

Bag of freebies的字面意思是免费的赠品,而在目标检测中的意思是:使用一些特定的技巧来训练模型而不增加模型的复杂度,来使模型达到更高的准确度。在yolov4中使用到的就包括数据增强,这也是在训练中经常被使用到的方法。数据增强的目的是:增加输入图像的可变性,从而使设计的目标检测模型对不同环境的图片具有较高的鲁棒性。
例如更改图片的亮度,对比度,饱和度,以及进行随机缩放,旋转,翻转,这些操作都是数据增强。
在yolov4中使用了比较创新的数据增强:Mosaic 。Mosaic和CutMix不同,CutMix仅仅将两张图片混合在一起送进去网络中进行训练,而Mosaic 则是使用4张不同的图像混合在一起同时进行训练,所以,这也显著减少了对batch size的需要。因此,也可以称Mosaic为CutMix的升级版操作。
在这里插入图片描述

此外,yolov4还采用了label smooth的方法(标签平滑)。
假设我们的分类只有两个,一个是猫一个不是猫,这里我们分别用1和0表示。
Label Smoothing的工作原理是对原来的[0 1]这种标注做一个改动,假设我们给定Label Smoothing的值为0.1。那么:
在这里插入图片描述
我们可以看到,原来的[0,1]编码变成了[0.05,0.95]了。这个label_smoothing的值假设为ϵ,那么就是说,原来分类准确的时候,p=1,不准确为p=0,现在变成了p=1−ϵ和ϵ,也就是说对分类准确做了一点惩罚。

在目标检测的IOU的处理中,yolov4也采用了多种IOU方式。在预测框Bbox的回归中采用了CIOU,提高了速度以及准确度,而在nms筛选预测框时则中采用了DIOU。那么这些有什么区别呢?

IOU Loss

对于检测框B和groundtruth G,二者的IoU如下:
在这里插入图片描述

那么IOU Loss即为-log(1-IOU)。显然IOU Loss具有非负性、尺度不变性、同一性、对称性、三角不等性等特点,所以可以用于bounding box的回归任务中。
但同时,IoU Loss也存在一个很致命的缺点:当B与G的IOU为0时,Loss也为0,网络无法进行训练。因此IOU Loss在回归任务中的表现并不好。

GIOU Loss

GIOU Loss的目的就是解决IOU Loss中当B与G不相交时,Loss为0的问题。
GIOU的定义如下:
image

其中,Ac表示B与G的最小外接矩形的面积,u表示B与G并集的面积。而GIOU Loss = -log(1-GIOU)。
GIOU具有一下特性:

  1. 与IoU一样,具有非负性、尺度不变性等特性
  2. 任意B、G都存在,GIOU<=IOU
  3. 1< GIOU<=1, 当IoU等于1时,GIoU也等于1 由此可见,只有当B与G重合时,GIOU Loss才会为0,相比IOU Loss,GIOU Loss在任意情况下都可以进行训练。

DIOU Loss

GIOU Loss虽然解决了IoU Loss中Loss为0的问题,但是依然存在一些不足。
首先,因为GIoU主要是在收敛Ac-U这个值,作者经过实验发现这么收敛会导致网络优先选择扩大bounding box的面积来覆盖ground truth,而不是去移动bounding box的位置去覆盖ground truth。

其次,如下图所示,当B覆盖G或者被G覆盖时,只要B与G的面积不变,不管B与G的位置在哪里,IoU Loss与GIoU Loss都是一个定值。
在这里插入图片描述
因此,为了解决这些问题,DIOU就出现了。
在这里插入图片描述

其中,ρ()为B与G中心点之间的欧几里得距离,c为B与G最小外接矩的对角线的长度。
相比GIOU,DIOU限制的不是最小外接矩与B与G并集面积的差值,而是直接限制了最小外接矩的面积和B与G中心点的位置,这会使得网络更倾向于移动bounding box的位置来减少Loss。同时也加入了IOU元素来使bounding box与ground truth的覆盖面积更加接近。
但是,同样的DIoU也有着与GIoU相同的一些特性和取值范围。

CIOU Loss

一个好的回归Loss应该考虑三点,分别是覆盖面积、中心点距离和长宽比。而DIOU只考虑了覆盖面积和中心点距离,所以作者又在DIOU的基础上加入了长宽比的因素提出了CIOU Loss,公式如下:

image

其中,v就是B与G长宽比的距离:

在这里插入图片描述

α是一个权重系数:

在这里插入图片描述

IOU Loss:主要考虑检测框和目标框重叠面积。
GIOU Loss:在IOU的基础上,解决边界框不重合时的问题。
DIOU Loss:在IOU和GIOU的基础上,考虑边界框中心点距离的信息。
CIOU Loss:在DIOU的基础上,考虑边界框宽高比的尺度信息。

Bag of Specials

BOS是指对模型增加了一些插件,这些插件会增加计算量,但是增加的计算量很少,却能有效地增加物体检测的准确率。

Mish激活函数

一个好的激活函数能够使得梯度传播的更高效,并且不会占用额外的计算资源。yolov4中就采用了这里Mish激活函数。
在这里插入图片描述
那么,为什么Mish表现这么好?
首先,无边界(即正值可以达到任何高度)避免了由于封顶而导致的饱和。理论上对负值的轻微允许允许更好的梯度流,而不是像ReLU中那样的硬零边界。最后,可能也是最重要的,目前的想法是,平滑的激活函数允许更好的信息深入神经网络,从而得到更好的准确性和泛化。

增大感受野

采用SPP模块的方式,比单纯的使用k*k最大池化的方式,更有效的增加主干特征的接收范围,显著的分离了最重要的上下文特征。之后再将不同尺度的特征图进行连接起来。
在这里插入图片描述

Yolov4的作者在使用608 x 608大小的图像进行测试时发现,在COCO目标检测任务中,以0.5%的额外计算代价将AP50增加了2.7%,因此Yolov4中也采用了SPP模块。

特征融合

FPN的作用在于将不同stage下不同scale的特征进行融合。FPN是自顶向下的,将高层的特征信息通过上采样的方式进行传递融合,得到进行预测的特征图。
在这里插入图片描述
与yolov3不同,

yolov3的FPN层输出的三个大小不一的特征图①②③直接进行预测
但olov4的FPN层,只使用最后的一个76x76特征图①,而经过两次PAN结构,输出预测的特征图②和③。
这里的不同也体现在cfg文件中,这一点有很多同学之前不太明白,
比如yolov3.cfg最后的三个yolo层,
第一个yolo层是最小的特征图19x19,mask=6,7,8,对应最大的anchor box。
第二个yolo层是中等的特征图38x38,mask=3,4,5,对应中等的anchor box。
第三个yolo层是最大的特征图76x76,mask=0,1,2,对应最小的anchor box。
而yolov4.cfg则恰恰相反
第一个yolo层是最大的特征图76x76,mask=0,1,2,对应最小的anchor box。
第二个yolo层是中等的特征图38x38,mask=3,4,5,对应中等的anchor box。
第三个yolo层是最小的特征图19x19,mask=6,7,8,对应最大的anchor box。

DropBlock

yolov4为了缓解过拟合,采用了DropBlock的方式,与dropout功能类似。传统的dropout就是随机减少神经元的数量,来使网络更加简单。
但DropBlock的研究者认为,卷积层对于这种随机丢弃并不敏感,因为卷积层通常是三层连用:卷积+激活+池化层,池化层本身就是对相邻单元起作用。而且即使随机丢弃,卷积层仍然可以从相邻的激活单元学习到相同的信息。
因此,在全连接层上效果很好的Dropout在卷积层上效果并不好。所以DropBlock的研究者认为干脆整个局部区域进行删减丢弃。此外,DropBlock可以定制各种组合,在训练的不同阶段可以修改删减的概率。

对NMS采用了DIOU lOSS

上面也介绍了DIOU loss。

最后附上yolov4的实验结果!

在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值