YOLOv3 SPP超详细入门

  • 个人主页:风间琉璃
  • 版权: 本文由【风间琉璃】原创、在CSDN首发、需要转载请联系博主
  • 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)订阅专栏

前言

 YOLOv3 SPP在YOLOV3基础上添加了若干trick模块,其中重要的改进有SPP模块Mosaic图像增强CIOU替代IOU来计算交并比以及 Focal loss (尽管没有使用)。其中涉及了很多论文,这些trick非常重要,图像分类网络到目标检测网络的研究中,各种trick一直在更新迭代,不断优化使模型能够更好训练,获得更好的结果。

一、网络架构

YOLOv3网络架构

YOLOv3 SPP网络架构

YOLOv3 SPP超详细入门_第1张图片

 YOLOv3和YOLOv3 SPP 的区别在于,将第一个预测特征图经过的 Convolution Set 给从中间拆开插入了 SPP 模块。

二、Spatial Pyramid Pooling(SPP)

SPP模块借鉴空间金字塔思想,实现局部特征和全局特征的融合。如图可知,SPP模块由四个分支组成,且SPP模块在下面三个输出特征层之上,而非在每一个上采样后都加入SPP模块(理论上这种方式可以优化,但是换来更长的响应时间),在经过SPP模块后,张量中channel应变为原来的4倍,B,H,W不变。
YOLOv3 SPP超详细入门_第2张图片

YOLOv3 中的 SPP 模块并不是 SPPnet 的 SPP 结构。SPP module由四个并行的分支构成,分别是kernel size为 5×5, 9×9, 13×13的最大池化和一个跳跃连接,步距都是为 1,意味着池化前进行 padding 填充,最后池化后得到的特征图尺寸大小和深度不变。SPP 模块实现了不同尺度特征的融合

在一般的CNN网络结构中,最后的分类层通常是由全连接层组成,而全连接层特征数是固定的,所以图片在输入网络的时,大小必须是固定的。

但在实际情况中,图片大小是多种多样的,如果不能满足网络的输入,图片将无法在网络中进行前向计算,所以为了得到固定尺寸的图片,必须对图片进行resize,同时可能会导致图像失真,从而影响预测精度,我们希望网络能够保持原图大小的输入,得到最大的精度。

SPP全称为Spatial Pyramid Pooling(空间金字塔池化结构),它是由微软研究院的何凯明大神提出,主要是为了解决两个问题:

1.有效避免了R-CNN算法对图像区域剪裁、缩放操作导致的图像物体剪裁不全以及形状扭曲等问题。

2.解决了卷积神经网络对图像重复特征提取的问题,大大提高了产生候选框的速度,且节省了计算成本。

SPP优点
1.不管输入尺寸是怎样,SPP 可以产生固定大小的输出
2.使用多个窗口(pooling window)
3.SPP 可以使用同一图像不同尺寸(scale)作为输入, 得到同样长度的池化特征。

4.由于对输入图像的不同纵横比和不同尺寸,SPP同样可以处理,所以提高了图像的尺度不变(scale-invariance)和降低了过拟合(over-fitting)

5.实验表明训练图像尺寸的多样性比单一尺寸的训练图像更容易使得网络收敛(convergence)
6.SPP 对于特定的CNN网络设计和结构是独立的。(也就是说,只要把SPP放在最后一层卷积层后面,对网络的结构是没有影响的, 它只是替换了原来的pooling层)
7.不仅可以用于图像分类而且可以用来目标检测

 三、Mosaic图像增强

Mosaic图像增强算法将多张图片按照一定比例组合成一张图片使模型在更小的范围内识别目标。在该网络中通过将四张图片随机裁剪,再拼接到一张图片上作为训练数据,这种做法丰富了图片的背景,并且四张图片拼接在一起提高了batch_size,在进行batch normalization的时候也会计算四张图片,所以降低了对batch_size的依赖性。

YOLOv3 SPP超详细入门_第3张图片

方法步骤:

1.随机选取图片拼接基准点坐标(xc,yc),另随机选取四张图片。

2.四张图片根据基准点,分别经过尺寸调整和比例缩放后,放置在指定尺寸的大图的左上,右上,左下,右下位置。

3.根据每张图片的尺寸变换方式,将映射关系对应到图片标签上。

4.依据指定的横纵坐标,对大图进行拼接。处理超过边界的检测框坐标。

方法优点

1.增加数据多样性,随机选取四张图像进行组合,组合得到图像个数比原图个数要多。

2.增强模型鲁棒性,混合四张具有不同语义信息的图片,可以让模型检测超出常规语境的目标。

3.加强批归一化层(Batch Normalization)的效果。当模型设置 BN 操作后,训练时会尽可能增大批样本总量(BatchSize),因为 BN 原理为计算每一个特征层的均值和方差,如果批样本总量越大,那么 BN 计算的均值和方差就越接近于整个数据集的均值和方差,效果越好。

4.Mosaic 数据增强算法有利于提升小目标检测性能。Mosaic 数据增强图像由四张原始图像拼接而成,这样每张图像会有更大概率包含小目标。

四、CIoU Loss

1.IoU 

IoU即交并比,是目标检测中最常用的指标,在anchor-based的方法中,他的作用不仅用来确定正样本和负样本,还可以用来评价输出框(predict box)和ground-truth的距离。

 ​​​YOLOv3 SPP超详细入门_第4张图片

1.它可以反映预测检测框与真实检测框的检测效果。

2.具有尺度不变性,即对尺度不敏感(scale invariant), 在regression任务中,判断predict box和gt的距离最直接的指标就是IoU。(满足非负性;同一性;对称性;三角不等性)

但是使用它作为损失函数会出现问题,其损失函数一般有两种表达式:

1.IoU loss = -ln(IoU)

2.IoU Loss = 1 - IoU,第二种比较常用

IoU Loss 可以更好地反映出重合程度;且具有尺度不变性,无论重叠地框是大是小,重叠占比一定 IoU 一样大 。但是当预测框和 GT 框不重叠时,损失为 0。 

 YOLOv3 SPP超详细入门_第5张图片

图片展示了3组矩形框重合的示例:绿色是真实目标存在的框GT box,黑色是预测的box位置。通过观察上图,发现第三个预测效果较好,因为预测目标的位置与真实目标最为接近。但是计算三组l2损失发现损失值都为8.41,然而IOU的值不同。因此说明l2损失不能准确反应两个目标边界框重合的程度,因此诞生了IOU损失函数。 

2.GIoU

由于IoU是比值的概念,对目标物体的scale是不敏感的。然而检测任务中的BBox的回归损失(MSE loss, l1-smooth loss等)优化和IoU优化不是完全等价的,而且 Ln 范数对物体的scale也比较敏感,IoU无法直接优化没有重叠的部分。

YOLOv3 SPP超详细入门_第6张图片

上面公式的意思是:先计算两个框的最小闭包区域面积 Ac (同时包含了预测框和真实框的最小框的面积),再计算出IoU,再计算闭包区域中不属于两个框的区域占闭包区域的比重,最后用IoU减去这个比重得到GIoU。 

在上图中绿色是真实目标边界框,红色是预测目标边界框,最外面的蓝色边框是将红绿矩形用最小矩形框起来的边界,Ac是蓝色矩形框的面积,u对应红绿矩形的并集面积。

如果当红绿矩形完美重合,那么IOU =1, Ac = u = 预测目标边界框面积,GIoU = 1 - 0 = 1。如果两个目标分开很远,Ac趋向于很大的数值,u趋于0,IOU也趋于0,GIOU = 0 - 1 = -1。因此GIOU取值的区间是[-1, 1]。

同理GIOU损失函数的最终表达形式是L(GIOU) = 1 - GIOU。

与IoU只关注重叠区域不同,GIoU不仅关注重叠区域,还关注其他的非重合区域,能更好的反映两者的重合度。

YOLOv3 SPP超详细入门_第7张图片

GIOU缺点:当两个预测框高宽相同,且处于同一水平面时,GIOU就退化为IOU。此外,GIOU和IOU还有两个缺点:收敛较慢、回归不够准确。 

3.DIou

DIoU要比GIou更加符合目标框回归的机制,将目标与anchor之间的距离,重叠率以及尺度都考虑进去,使得目标框回归变得更加稳定,不会像IoU和GIoU一样出现训练过程中发散等问题。

YOLOv3 SPP超详细入门_第8张图片

其中b 和bgt分别代表了预测框和真实框的中心点,且分子代表的是计算两个中心点间的欧式距离。 c代表的是能够同时包含预测框和真实框的最小闭包区域的对角线距离。

 YOLOv3 SPP超详细入门_第9张图片

DIoU 要比 GIou 更加符合目标框回归的机制,将目标与anchor之间的距离,重叠率以及尺度都考虑进去,使得目标框回归变得更加稳定,不会像 IoU 和 GIoU 一样出现训练过程中发散等问题。 

4.CIou

一个优秀的回归定位损失应该考虑到3种几何参数:重叠面积、中心点距离、长宽比。最终 CIoU 及其 Loss 计算公式如下所示:

YOLOv3 SPP超详细入门_第10张图片

因此CIOU的三项恰好对应IOU,中心点距离,长宽比的计算。CIOU loss = 1 - CIoU。α和v为长宽比,计算公式如上图所示:w、h和w(gt)、h(gt)分别代表预测框的高宽和真实框的高宽。 

YOLOv3 SPP超详细入门_第11张图片

实际检测效果中,CIOU相比GIOU在框选目标时,能找到一个更合适的框选位置。如上图所示,第一行的两张图中,第一个猫猫使用GIOU损失函数,发现有一只猫耳朵在框外,第二只猫猫使用DIOU损失函数,将猫猫的位置准确标出。同样,第二行中,第一只狗狗虽然完整标出,但并不能准确框出狗狗的轮廓,而第二张图检测框的位置刚好合适。 

五、Focal loss

Focal loss主要是为了解决one-stage目标检测中正负样本比例严重失衡的问题。该损失函数降低了大量简单负样本在训练中所占的权重,也可理解为一种困难样本挖掘。

由于一张图像中能够匹配到目标的候选框(正样本)个数一般只有十几个或者几十个,而未被匹配的候选框(负样本)大概有数万个,在这些负样本中,大部分都是简单易分的,对训练网络起不到作用,但由于数量太多会淹没掉少量但有助于训练的样本。

YOLOv3 SPP超详细入门_第12张图片

提出hard negative mining思想,通过预分类记录其对应特征和分类器得到的概率,对其重新训练,按概率值进行排序,再使用排序后的对应特征重新训练分类器,并多次迭代的方法,来实现样本选择。

在YOLOV3 SPP中,使用Focal Loss通过对损失函数计算中二值交叉熵损失添加因子γ来降低易分负样本的损失贡献。

YOLOv3 SPP超详细入门_第13张图片

其中,y是样本的标签值,而p是模型预测某一个样本为正样本的概率,对于真实标签为正样本的样本,它的概率p越大说明模型预测的越准确,对于真实标签为负样本的样本,它的概率p越小说明模型预测的越准确。

结束语
感谢你观看我的文章呐~本次航班到这里就结束啦

希望本篇文章有对你带来帮助 ,有学习到一点知识~

躲起来的星星也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,博主要一下你们的三连呀(点赞、评论、收藏),不要钱的还是可以搞一搞的嘛~

不知道评论啥的,即使扣个666也是对博主的鼓舞吖 感谢

你可能感兴趣的:(YOLO,YOLO,pytorch,OpenCV)