YOLOV4核心基础内容

一、网络结构图

在这里插入图片描述
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的最大池化的方式,进行多尺度融合。

二、激活函数

激活函数为网络提供了非线性能力,非线性能力指函数的一阶导数不为常数,而激活函数非线性能力的强弱与泰勒级数有关

1、LeakyReLU

在这里插入图片描述
函数表达式: f ( x ) = { 0.01 x , x < 0 x , x > 0 f(x) = \left\{\begin{aligned} 0.01x, \quad x<0 \\ x, \quad x>0 \end{aligned} \right. f(x)={0.01x,x<0x,x>0

2、Mish

在这里插入图片描述
函数公式: f ( x ) = x t a n h ( l n ( 1 + e x ) ) f(x)=xtanh(ln(1+e^{x})) f(x)=xtanh(ln(1+ex))

3、其它常见激活函数总结

(1)ReLU系列

ReLU:
在这里插入图片描述
函数表达式: f ( x ) = { 0 , x < 0 x , x > 0 f(x) = \left\{\begin{aligned} 0, \quad x<0 \\ x, \quad x>0 \end{aligned} \right. f(x)={0,x<0x,x>0
ReLU函数在使用梯度下降法时收敛更快,并且计算量小;对于输入为负值时,会造成神经元死亡,并且对输出没有限制,可能会造成梯度爆炸。因此在使用时可以对relu增加上界,即ReLU6,当x>6时,输出恒为6。

PReLU:
在这里插入图片描述
函数表达式: f ( x ) = { α y , y < 0 y , y > 0 f(x) = \left\{\begin{aligned} αy, \quad y<0 \\ y, \quad y>0 \end{aligned} \right. f(x)={αy,y<0y,y>0
PReLU中的α不是固定的,而是可以学习的,解决了超参数难设定的问题。

(2)Sigmoid

在这里插入图片描述
函数表达式: f ( x ) = 1 1 + e − x f(x) = \frac{1}{1 + e^{-x}} f(x)=1+ex1
sigmoid是一个饱和函数,会造成梯度消失;sigmoid输出不是以零为中心,这会导致神经网络收敛较慢。

(3)Tanh

在这里插入图片描述
函数表达式: t a n h ( x ) = e x − e − x e x + e − x tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} tanh(x)=ex+exexex

(4)Swish

在这里插入图片描述
函数表达式: f ( x ) = x ⋅ s i g m o i d ( β x ) f(x)=x\cdot sigmoid(βx) f(x)=xsigmoid(βx)
β是个常数或可训练的参数,Swish具备无上界有下界、平滑、非单调的特性,在深层模型上的效果优于ReLU。

三、损失函数

目标检测的损失函数一般由分类损失函数和回归损失函数构成,回归损失的发展过程:Smooth_L1损失 -> IOU Loss -> GIoU Loss -> DIoU Loss -> CIoU Loss

1、Smooth_L1

在这里插入图片描述
S m o o t h L 1 ( x ) = { 0.5 x 2 , ∣ x ∣ < 1 ∣ x ∣ − 0.5 , o t h e r w i s e SmoothL1(x) = \left\{\begin{aligned} 0.5x^2, \quad |x|<1 \\ |x|-0.5, \quad otherwise \end{aligned} \right. SmoothL1(x)={0.5x2,x<1x0.5,otherwise
将L1损失与L2损失相结合,在远端采用L1损失,抗异常点能力较强,在近端采用L2损失,能够更容易收敛到最优值。

2、IOU_Loss

在这里插入图片描述
IOU Loss就是交集/并集,存在以下问题
在这里插入图片描述
(1)当预测框与目标框不相交时,IOU=0,无法预测出两个框之间的距离,此时损失函数不可导,IOU Loss无法优化1两个框不相交的情况。
(2)当两个预测框大小相同,IOU相同,但预测框位置不同时,也无法区分两者相交的情况,即状态2和状态3的情况。

2、GIOU_Loss

在这里插入图片描述
为了解决上述情况,提出了GIOU,增加了最小外接矩形,GIOU_Loss = 1-(IOU-(差集/最小外接矩形))
在这里插入图片描述
当预测框小于目标框,并且预测框在目标框内部,如状态1、2、3,三种状态的预测框大小一致,位置不同,这时预测框与目标框的差集相同,三种状态的GIOU也相同,这时GIOU退化为了IOU,无法区分相对位置关系。

3、DIOU_Loss

在这里插入图片描述
DDIOU_Loss加入了重叠面积和中心点距离,当目标框出现在内部时,通过两个框中心点的距离判断框的位置,DDIOU_Loss=1-CIOU=1-(IOU- D i s t a n c e _ 2 2 D i s t a n c e _ C 2 \frac{Distance\_2^2}{Distance\_C^2} Distance_C2Distance_22)
Distance_C=预测框对角线长度/最小外接矩形对角线长度
在这里插入图片描述
当出现上述情况时,预测框的中心点位置相同,对角线之比相同,三者的DIOU_Loss相同

4、CIOU_Loss

CIOU_Loss在DIOU_Loss的基础上增加了一个影响因子,考虑了预测框和目标框的高宽比,即两个框对角线之间的夹角。
CIOU_Loss=1-CIOU=1-(IOU- D i s t a n c e _ 2 2 D i s t a n c e _ C 2 − v 2 ( 1 − I O U ) + v \frac{Distance\_2^2}{Distance\_C^2}-\frac{v^2}{(1-IOU)+v} Distance_C2Distance_22(1IOU)+vv2)
v就是衡量高宽比的参数, v = 4 π 2 ( a r c t a n w g t h g t − a r c t a n w p h p ) 2 v=\frac{4}{\pi^2}(arctan\frac{w^{gt}}{h^{gt}}-arctan\frac{w^p}{h^p})^2 v=π24(arctanhgtwgtarctanhpwp)2
gt代表目标框,p代表预测框

总结:
IOU_Loss:主要考虑预测框与目标框的重叠面积。
GIOU_Loss:主要解决了预测框在目标框外面的情况。
DIOU_Loss:主要解决预测框在目标框内部并且输出的损失相同时无法确定预测框位置的情况。
CIOU_Loss:主要解决预测框在目标框内部,并且预测框面积相同但形状不同时的情况。
Yolov4采用了CIOU_Loss,使得预测框回归的速度和精度更高。

5、DIOU_nms

nms是非极大值抑制,主要用于筛选预选框,Yolov4采用DIOU,将原来计算IOU的部分改为DIOU,因为考虑了边界框中心点的位置信息,对于重叠目标的检测效果较好。
Yolov4采用DIOU而非采用CIOU,因为CIOU中的参数v计算用到了目标框,而在测试过程中并没有目标框的信息。

四、训练技巧

1、数据增强

(1)Mosaic
Mosaic参考的是CutMix数据增强,CutMix是使用两张图片进行拼接,而Mosaic则采用了4张图片,随机缩放、随机剪裁、随机排布的方式进行拼接。在这里插入图片描述
使用Mosaic的原因:小目标的AP值比中目标和大目标的低很多,而Coco数据集中包含大量的小目标,但是小目标的分布不均匀。
:大、中、小目标定义:长宽0×0~32×32的物体为小目标;32×32~96×96的物体为中目标;大于96×96的物体为大目标。
优点:丰富了数据集,随机缩放后增加了很多小目标,让网络的鲁棒性更好;一张图片包含四张图片的数据,使得训练时的批次不需要太大,一个CPU就能达到很好的效果。

(2)Dropblock
Dropblock和网络中使用的Dropout类似,是一种缓解过拟合的正则化方式。
Dropout:训练时随机删除一些神经元,使网络变的简单
Dropblock:
在这里插入图片描述
Dropout会随机丢弃一些信息,不过由于卷积网络的能力较强,对于这些随机丢弃不敏感,即使随机丢弃,卷积层也能从相邻的神经元学习到相同的信息,因此在全连接上效果很好的Dropout在卷积层上效果不好。
Dropblock是对特征图的整个局部区域进行随机删除。

(3)其他数据增强图片实例
ours使用的是Grid Mask
在这里插入图片描述

2、Label Smoothing

在数据增强中,我们可以给样本特征加入随机噪声来避免过拟合. 同样,我们也可以给样本的标签引入一定的噪声. 假设训练数据集中有一些样本的标签是被错误标注的,那么最小化这些样本上的损失函数会导致过拟合. 一种改善的正则化方法是标签平滑(Label Smoothing),即在输出标签中添加噪声来避免模型过拟合。

一个样本𝒙的标签一般用one-hot向量表示 y = [ 0 , ⋯ , 0 , 1 , 0 , ⋯ , 0 ] T y = [0, ⋯ , 0, 1, 0, ⋯ , 0]^T y=[0,,0,1,0,,0]T

这种标签可以看作是硬目标(Hard Target). 如果使用softmax分类器并使用交叉熵损失函数,最小化损失函数会使得正确类和其他类的权重差异变得很大. 根 据softmax函数的性质可知,如果要使得某一类的输出概率接近于1,其未归一化的得分需要远大于其他类的得分,可能会导致其权重越来越大,并导致过拟合. 此 外,如果样本标签是错误的,会导致更严重的过拟合现象. 为了改善这种情况,我们可以引入一个噪声对标签进行平滑,即假设样本以 𝜖 的概率为其他类. 平滑后的标签为

y = [ ϵ K − 1 , ⋯ , ϵ K − 1 , 1 − ϵ , ϵ K − 1 , ⋯ , ϵ K − 1 ] y=[\frac{\epsilon}{K-1}, ⋯,\frac{\epsilon}{K-1},1-\epsilon,\frac{\epsilon}{K-1},⋯,\frac{\epsilon}{K-1}] y=[K1ϵ,,K1ϵ,1ϵ,K1ϵ,,K1ϵ]

其中 𝐾 为标签数量,这种标签可以看作是软目标(Soft Target). 标签平滑可以避免模型的输出过拟合到硬目标上,并且通常不会损害其分类能力.
上面的标签平滑方法是给其他 𝐾 − 1 个标签相同的概率 ϵ K − 1 \frac{\epsilon}{K-1} K1ϵ,没有考虑标签之间的相关性. 一种更好的做法是按照类别相关性来赋予其他标签不同的概率。比如先训练另外一个更复杂(一般为多个网络的集成)的教师网(Teacher Network),并使用大网络的输出作为软目标来训练学生网络(Student Network). 这种方法也称为知识精炼(Knowledge Distillation)。

3、其它技巧总结

在这里插入图片描述

五、模型效果

在这里插入图片描述
在这里插入图片描述
在各种GPU上的运行情况:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值