1.1 简介
YOLOv3-SPP是对YOLOv3(You Only Look Once version 3)目标检测模型的一种改进版本,其中"SPP"代表空间金字塔池化(Spatial Pyramid Pooling)。这个改进主要是为了增强网络对不同尺度物体的检测能力以及提高模型的准确性。以下是YOLOv3-SPP网络的一些关键特性:
-
空间金字塔池化(SPP)模块:
- SPP模块的核心思想是在卷积特征图上应用多种尺度的池化操作(例如1x1, 2x2, 3x3等最大池化),然后将这些不同尺度池化后的结果拼接起来形成一个固定长度的特征向量。这样做可以使得网络能够有效地捕捉到不同尺度的上下文信息,从而提升对不同大小目标的检测性能。
- 在YOLOv3-SPP中,SPP模块通常位于网络的尾部,在特征提取之后,这有助于模型在不同层级的特征图上融合多尺度信息,提高了模型对物体尺度变化的鲁棒性。
-
网络结构:
- YOLOv3-SPP基本沿用了YOLOv3的网络架构,包括使用Darknet-53作为主干网络,该网络具有残差结构,可以高效地提取特征。
- 在YOLOv3的基础上,SPP模块被插入到特征提取流程的末端,紧接着是特征上采样和特征融合步骤,这些步骤帮助网络在不同尺度上预测物体的位置和类别。
-
多尺度预测:
- YOLOv3本身采用特征金字塔网络(Feature Pyramid Network, FPN)的思想,可以在不同尺度的特征图上进行预测,以捕捉不同大小的物体。YOLOv3-SPP保留了这一特性,并通过SPP进一步增强了对多尺度物体的适应能力。
-
训练与损失函数:
- YOLOv3-SPP默认不使用Focal Loss,而是继续使用YOLO系列的传统损失函数,包括定位误差和分类误差的结合。不过,用户可以根据需求调整损失函数,例如引入CIoU_loss来优化边界框预测的准确性。
- Mosaic数据增强也被引入YOLOv3-SPP中,通过随机拼接多张训练图像来增加数据多样性,进而提升模型的泛化能力。
-
性能提升:
- SPP模块的引入使得YOLOv3-SPP相比基础的YOLOv3在准确率上有显著提升,尤其是在处理包含多种尺寸目标的复杂场景时。同时,尽管加入了额外的计算,但通过优化,YOLOv3-SPP依然保持了相对高效的推理速度。
1.2 Mosaic图像增强
Mosaic图像增强是一种高级的数据增强技术,最初在YOLOv4目标检测算法中引入,但后来也被广泛应用于其他计算机视觉任务中,以提高模型对多样性和复杂性的鲁棒性。这项技术通过创造性地组合多张图像来生成新的训练样本,从而有效丰富了训练数据集的内容和结构。以下是Mosaic图像增强的详细且全面介绍:
基本概念
Mosaic数据增强的核心思想是将多张(通常是4张)不同的图像按照一定规则拼接成一张新的图像,同时保持图像中的物体识别标签正确对应。这样的处理方式模拟了真实世界中物体可能存在的复杂排列和尺度变化,迫使模型学习在不同尺度和复杂背景下的目标检测能力。
实现步骤
- 图像选择:从训练数据集中随机选取4张图像。
- 随机缩放:对每张图像进行随机缩放,这一步骤增加了图像中物体的尺度多样性,尤其是可以增加小目标的数量,这对于提高模型对小物体的检测能力尤为重要。
- 随机裁剪与排布:将缩放后的图像随机放置在一个较大的画布上,通常保证部分重叠,这样可以生成包含多个对象且背景复杂的合成图像。裁剪确保最终输出的图像尺寸符合模型输入要求。
- 标签对应:对于每个参与拼接的图像,其对应的物体检测标签(如边界框坐标)也需要相应调整,以匹配新图像中的位置和缩放比例。
- 数据整合:将调整后的图像及其标签作为新的训练样本加入到数据集中。
优势
- 增强多样性:通过随机选择、缩放和排列图像,Mosaic显著增加了训练集的多样性,有助于模型泛化能力的提升。
- 小目标检测:通过随机缩放,生成大量小尺寸的目标实例,有助于模型更好地学习和识别小目标。
- 节省计算资源:尽管Mosaic处理的是多张图像,但它在单次迭代中处理并送入模型,这意味着Mini-batch的大小不需要特别大就能获得较好的数据增强效果,从而降低了GPU内存的需求。
- 背景丰富性:不同图像的拼接带来了丰富的背景变化,有助于模型学习在不同背景下识别目标的能力。
应用范围
Mosaic图像增强不仅限于目标检测任务,还可以应用于图像分割、分类等其他计算机视觉领域,只要这些任务需要模型对复杂场景和尺度变化具有高度适应性。
结论
Mosaic图像增强是一种创新且高效的训练数据扩充方法,它通过创造合成图像来提升模型的鲁棒性和泛化能力,尤其在处理目标尺度变化、复杂背景下的物体识别方面表现出色。这种技术的实施相对直接,且在实际应用中能够显著提升模型性能,是现代计算机视觉训练流程中不可或缺的一部分。
1.3 SPP模块
YOLOv3-SPP中的SPP(Spatial Pyramid Pooling,空间金字塔池化)模块是一种旨在增强模型对不同尺度目标检测能力的关键组件。它基于YOLOv3架构进行了改进,通过在YOLOv3的网络结构中引入SPP模块,提高了模型对多尺度目标的检测精度和效率。下面详细介绍SPP模块的工作原理、结构以及其在YOLOv3-SPP中的作用。
SPP模块工作原理
SPP模块的核心思想是通过不同尺度的池化操作,提取输入特征图的空间信息,进而融合不同层次的特征。传统的池化操作(如最大池化或平均池化)通常只在单一尺度下进行,而SPP模块则执行多尺度池化,即在不同大小的池化窗口下进行操作,然后将这些不同尺度的池化结果拼接起来,形成一个固定长度的输出向量。
结构特点
-
多层次池化:SPP模块通常包含多个最大池化层,每个池化层的池化窗口大小不同,比如可能是1x1, 2x2, 4x4等。这种设计使得网络能够捕获不同尺度的上下文信息,从局部细节到全局轮廓。
-
固定输出长度:通过不同尺度的池化后,得到的特征图虽然尺寸各异,但通过展平操作(将每个池化后的特征图展平成一维向量),再将这些向量拼接起来,可以得到一个固定长度的输出向量。这使得SPP模块的输出可以灵活地插入到后续的全连接层或其它卷积层中,而不受输入图像尺寸变化的影响。
-
感受野增大:SPP模块通过在特征图上执行多尺度池化,有效地增大了网络的感受野,即网络能“看到”的图像区域的大小,有助于捕捉更广泛的上下文信息,这对于检测大小不一的目标至关重要。
在YOLOv3-SPP中的应用
在YOLOv3的基础上,SPP模块被插入到网络的深层,通常位于第五、六层卷积之间。通过引入SPP,YOLOv3-SPP能够更好地处理不同尺度的目标,尤其是在目标尺寸变化较大的复杂场景中,提高了检测的精度和召回率。
性能提升
实践证明,SPP模块的引入显著提高了YOLOv3的性能。例如,与原始YOLOv3相比,SPP版本在COCO数据集上的mAP(平均精度均值)有所提升,从32.7提升到了约35.6,而某些优化版本(如U版YOLOv3 SPP)更是达到了42.6,显示了SPP模块对于目标检测任务的有效性。
总结
SPP模块通过空间金字塔池化策略,为YOLOv3-SPP模型引入了多尺度特征融合的能力,增强了模型对不同大小目标的检测性能,并且通过固定输出长度的设计,保证了模型对输入尺寸的灵活性。这一改进不仅提升了检测精度,也为处理复杂多变的视觉检测任务提供了强有力的支撑。
这里的步距都为1,说明在进行最大池化之前会进行padding。
下图YOLOV3SPP1值得是在一个部分用SPP,SPP3指的是在网络的三个部分都用上了SPP。
1.4 各种IOU损失
IOU loss
IOU Loss,即Intersection over Union Loss,是一种在目标检测和图像分割任务中常用的损失函数,用于评估和优化预测边界框与真实边界框之间的匹配程度。IOU(Intersection over Union)本身是一个衡量两个矩形区域重叠程度的指标,计算方式为两个矩形交集区域的面积除以并集区域的面积。IOU的值范围从0到1,值越接近1表示重叠程度越高,预测越准确。
IOU Loss的基本概念
在目标检测任务中,IOU Loss被设计为直接优化预测边界框与目标的真实边界框之间的IOU值。直观上,通过最小化预测框与真实框之间的IOU损失,可以引导模型学习更准确的边界框位置。
优点
- 直接度量:IOU Loss直接反映了预测边界框的质量,与最终的检测性能紧密相关。
- 尺度不变性:由于IOU是基于面积的比率,它自然具备尺度不变性,适合处理不同大小的目标。
- 对称性和非负性:IOU Loss具有对称性,即预测框与真实框的顺序不影响损失值,同时总是非负的。
缺点与改进
尽管IOU Loss有诸多优点,但在某些情况下也存在局限性,特别是当预测框与真实框无重叠或重叠很少时,IOU Loss接近于零,可能导致梯度消失,影响训练效率。为了解决这个问题,后续提出了多种改进方案,如GIoU Loss、DIoU Loss、CIoU Loss等,这些改进版的损失函数在原IOU Loss基础上加入了额外的惩罚项或修正项,以更好地引导边界框回归,尤其是在无重叠或轻微重叠的情形下提供更有效的梯度信号。
在目标检测中的应用
在目标检测框架中,如YOLO系列、Faster R-CNN等,IOU Loss常与其他损失函数(如分类损失)结合使用,共同优化模型的性能。随着检测算法的发展,虽然有更多先进的损失函数出现,IOU Loss及其变种仍然是基础且重要的概念,对于理解目标检测中边界框回归的损失设计有着重要意义。
右上角:绿色是GT,黑色是bounding box。这三组的损失大小都是8.41,但很明显第三组的拟合程度比较好,所以这个L2损失不能很好的反映两个目标边界框的重合程度。
当两个边界框不相交的时候,LOSS为0,也就是说两个边界框不相交就没办法传播损失了。
GIOU loss
GIOU Loss,全称Generalized Intersection over Union Loss,是一种用于目标检测任务中优化边界框回归的损失函数。它是对传统Intersection over Union (IoU)指标的扩展,旨在解决IoU Loss存在的几个问题,尤其是当预测框与目标框无重叠或仅轻微相交时梯度消失的问题。GIOU Loss首次被提出是在2019年的论文《Generalized Intersection over Union for Accurate Bounding Box Regression》中。
IoU vs. GIoU
在目标检测中,IoU用来衡量两个边界框重叠的程度,其值范围从0到1,值越大表示重叠越多。然而,IoU Loss在训练过程中,当预测框与真实框没有重叠时无法提供有效的梯度,导致学习过程缓慢或停滞。
GIoU的基本思想
GIOU Loss通过引入一个最小外包矩形的概念来解决上述问题。具体来说,对于预测框P和真实框G,除了计算它们的交集区域和并集区域外,还计算一个最小的矩形C,这个矩形能够完全包含𝑃P和𝐺G。GIOU定义为交集区域与最小外包矩形的差值与最小外包矩形的比值,公式可表示为:
优点
- 解决无重叠问题:即使预测框与真实框不重叠,GIOU Loss也能提供有效的梯度信息,有助于模型学习。
- 引导优化方向:GIOU Loss不仅惩罚了重叠不足的情况,还通过最小外包矩形的使用,直接指导预测框向正确的位置和大小调整,加速收敛过程。
- 适用性广:适用于各种目标检测框架,包括但不限于YOLOv3-SPP、RetinaNet等,显著提升了模型的定位精度。
在YOLOv3-SPP中的应用
在YOLOv3-SPP中,GIOU Loss通常与分类损失和定位损失一起构成总损失函数,用于优化边界框的预测。与传统YOLOv3相比,这一改变帮助模型更好地处理边界框的大小和位置预测,尤其是在复杂场景中,提升了对不同尺度和形状目标的检测能力。通过结合SPP模块和GIOU Loss,YOLOv3-SPP在保持较高检测速度的同时,显著提高了检测的准确率。
下图中,绿色是GT,红色是预测框,AC是能框住这两个框的最小矩形(蓝色边缘的那个),然后U指的是GT和预测框的并集。
当两个框相距无穷远,GIOU值趋近-1,当两个框完全重合,GIOU值为1
当两个框水平对齐时,GIOU退化为IOU
DIOU loss
DIoU Loss,全称为Distance Intersection over Union Loss,是对IOU Loss的一种改进,旨在解决目标检测中边界框回归问题时,特别是在预测框与真实框中心点距离较大或宽高比不匹配时的优化难题。DIoU Loss首次提出于2019年论文《Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression》中。
基本概念
DIoU Loss在IOU Loss的基础上,额外考虑了预测框与真实框中心点之间的欧几里得距离,以及两个框的重叠面积与最小外包矩形面积的比率。其核心思想是不仅关注重叠区域,还要考虑两个框的几何中心距离,以此来提供更明确的优化方向,促使预测框更快速且更准确地向真实框靠拢。
数学表达式
DIoU Loss的公式可以表示为:
优点
- 解决距离问题:通过加入中心点距离项,即使在预测框与真实框没有重叠或重叠很少的情况下,DIoU Loss也能提供有效的梯度,有助于模型快速学习和调整。
- 尺度和位置同时优化:同时考虑了边界框的位置偏差和大小偏差,优化过程更加高效。
- 避免宽高比异常:与GIoU Loss相似,DIoU Loss对宽高比不同的情况有较好的适应性,能有效避免因预测框形状与真实框不符而导致的优化难题。
- 更快收敛:由于其更直接的优化目标,DIoU Loss通常能比传统IOU Loss更快地收敛,提升模型训练效率。
应用
DIoU Loss在诸如YOLOv4、YOLOv5等现代目标检测框架中得到了广泛应用,显著提升了模型在各种尺度、复杂场景下检测目标的准确性。它成为了目标检测领域中一种流行的边界框回归损失函数,特别是在需要精确边界框定位的任务中表现尤为出色。
IOU和GIOU损失有两个问题:(1)收敛特别的慢。(2)回归不够准确。
下图中第一行三个图,黑色是anchor,蓝色是预测框,绿色是GT。
下图第二行是DIOU,只用了120步就达到了很好的效果。
下图右侧图片,IOU LOSS和GIOU LOSS的数值都是一样的,说明这俩并不能很好的表达预测框与GT的关系。而在DIOU LOSS中的值都是不一样的。
ρ代表预测框与GT中心点的欧氏距离。
CIOU Loss
CIOU Loss,全称为Complete Intersection over Union Loss,是在目标检测领域中用于优化边界框预测的一种损失函数,首次提出是在2019年的论文《IoU Loss for Accurate Bounding Box Regression》中。在YOLOv3-SPP中,CIOU Loss被用作优化预测边界框与真实边界框之间的匹配度,相比之前的损失函数如IOU Loss、GIoU Loss等,CIOU Loss提供了更为全面的优化目标,进一步提升了模型的定位精度。
CIOU Loss的组成部分
CIOU Loss是在GIoU Loss的基础上发展而来的,它考虑了三个关键因素:
-
Intersection over Union (IoU):这是衡量两个边界框重叠程度的经典指标。IoU损失鼓励预测框与真实框尽可能重叠,但仅依赖IoU不能完全解决边界框回归的问题,特别是当预测框与真实框完全不重叠或仅边缘接触时。
-
Generalized Intersection over Union (GIoU):GIoU在IoU的基础上进一步考虑了预测框与真实框之间的非重叠区域,通过计算最小包围盒来惩罚预测框的不当定位,即使预测框与真实框不重叠也能提供梯度信息。
-
Centerness and Aspect Ratio:CIOU Loss的独特之处在于它还考虑了预测框与真实框的中心点距离以及它们的宽高比差异。这两个因素能够进一步减少定位误差,特别是在处理细长或扁平形状的目标时。CIOU Loss通过一个惩罚项来减小中心点距离,并通过宽高比差异的惩罚项来鼓励预测框的形状更加接近真实框。
数学表达式
CIOU Loss的数学表达式如下:
优点
- 全面性:CIOU Loss综合考虑了重叠面积、中心点距离、宽高比三个方面,提供了一个更全面的优化目标。
- 收敛性:相比于仅使用IoU或GIoU Loss,CIOU Loss能够更快地收敛,因为其提供的梯度信息更加丰富。
- 准确性:通过减小预测框与真实框在中心点和形状上的差异,CIOU Loss能够显著提升边界框预测的准确性,特别是在复杂场景和不规则目标上。
在YOLOv3-SPP中,使用CIOU Loss替代传统的损失函数,显著提高了模型在目标检测任务中的性能,尤其是在面对尺度变化大、形状多样化的物体时,CIOU Loss能够提供更精确的定位能力。
CIOU引入了一个长宽比的参数,如下图所示,CIOU式子最右边那个参数即是长宽比。
表格第一列最后一行的LCIOU(D)是在说,如果将IOU换成DIOU的话,准确率还会有一个提升。