YOLOv3-SPP 学习笔记

YOLO3各个版本对比

首先来看下官方给的在COCO数据集上的表现,可以看到SPP版本相对于前面几个版本,mAP有了好几个百分点的提升,在加了SPP模块之后的YOLOv3为何有这么大的提升?
在这里插入图片描述

YOLOv3和YOLOv3-spp网络结构对比

YOLOv3网络结构图:
在这里插入图片描述
YOLOv3-spp网络结构图:
在这里插入图片描述
SPP模块结构如下图:
在这里插入图片描述在这里插入图片描述
相对于普通版本的YOLOv3,SPP版本在第五、六层卷积之间增加了一个SPP模块,这个模块主要是由不同的池化操作组成,具体的实现在YOLOv3-SPP的cfg文件中:

在这里插入图片描述
为什么会得固定大小的输出?
注意我们上面曾提到使用多个窗口(pooling窗口,上图中蓝色,青绿,银灰的窗口, 然后对feature maps 进行pooling,将分别得到的结果进行合并就会得到固定长度的输出), 这就是得到固定输出的秘密原因。
我们接下来用一个例子来弄懂这张图

如何理解yolov3中的spp模块?

在一般的CNN网络结构中,最后的分类层通常是由全连接组成,而全连接有个特点,那就是它的特征数是固定的,这就导致了图片在输入网络的时候,大小必须是固定的,但是在实际情况中,图片大小是多种多样的,如果不能满足网络的输入,图片将无法在网络中进行前向运算,所以为了得到固定尺寸的图片,必须对图片进行裁剪或者变形拉伸等,这样就很可能会导致图像失真,从而影响最终的精度,而我们希望网络能够保持原图大小的输入,得到最大的精度

但SPP通常连接在最后一层卷基层。下图是CNN一般结构和SPP结构:
在这里插入图片描述

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

  • 有效避免了对图像区域剪裁、缩放操作导致的图像失真等问题;
  • 解决了卷积神经网络对图像重复特征提取的问题,大大提高了产生候选框的速度,且节省了计算成本。

SPP 显著特点

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

其它特点

  1. 由于对输入图像的不同纵横比和不同尺寸,SPP同样可以处理,所以提高了图像的尺度不变(scale-invariance)和降低了过拟合(over-fitting)
  2. 实验表明训练图像尺寸的多样性比单一尺寸的训练图像更容易使得网络收敛(convergence)
  3. SPP 对于特定的CNN网络设计和结构是独立的。(也就是说,只要把SPP放在最后一层卷积层后面,对网络的结构是没有影响的, 它只是替换了原来的pooling层)
  4. 不仅可以用于图像分类而且可以用来目标检测

但是在YOLOv3中,并不是解决这两个问题的,如果对于如何解决上述问题感兴趣的同学,可以去参考这篇博客SPP深度解析,在YOLOv3-SPP中,SPP module由四个并行的分支构成,分别是kernel size为 5×5, 9×9, 13×13的最大池化和一个跳跃连接。如下图所示,作者检测头前面的第5和第6卷积层之间集成SPP模块来获得YOLOv3-SPP,在Feature Map经过SPP module池化后的特征图重新cat起来传到下一层侦测网络中
在这里插入图片描述

所以说,YOLOv3-SPP版本实际上只是增加了SPP 模块,该模块借鉴了空间金字塔的思想,通过SPP模块实现了局部特征和全局特征融合,这也是为什么SPP模块中最大的池化核大小要尽可能的接近或者等于需要池化的特征图的大小,特征图经过局部特征与全局特征相融合后,丰富了特征图的表达能力,有利于待检测图像中目标大小差异较大的情况,尤其是对于YOLOv3这种复杂的多目标检测,所以对检测的精度上有了很大的提升。

其他衍生版本

YOLOv3-tiny(YOLOv3的tiny版本)
YOLOv3-SPP1(仅在第一个检测头前集成SPP模块)
YOLOv3-SPP3(在三个检测头前都加入了SPP模块)
SlimYOLOv3-SPP3-50(n=50, k=90, 迭代剪枝2次)
SlimYOLOv3-SPP3-90(n=90, k=90)
SlimYOLOv3-SPP3-95(n=95, k=90)

在VisDrone2018-Det dataset的验证集上进行评估,各模型测试结果如下:
在这里插入图片描述
在这里插入图片描述
参考(感谢)
https://blog.csdn.net/qq_39056987/article/details/104327638
https://zhuanlan.zhihu.com/p/78942216
https://blog.csdn.net/yzf0011/article/details/75212513

YOLOv3-SPP (You Only Look Once v3 with Spatial Pyramid Pooling) 是YOLOv3的一个变种,它的主要改进在于引入了空间金字塔池化层(Spatial Pyramid Pooling)。这个技术允许网络捕获不同尺度的对象特征,增强了模型对物体尺寸变化的适应能力,从而提高目标检测的精度。 学习YOLOv3-SPP主要包括以下几个步骤: 1. **理论理解**:首先,了解YOLO的基本原理,包括卷积神经网络(CNN)、特征图和Anchor Boxes的概念,因为SPP是对这些基础部分进行了扩展。 2. **模型结构**:研究YOLOv3的架构,理解如何通过单个前向传播就完成分类和定位。然后了解SPP是如何增加池化层以提取不同尺度的信息。 3. **数据准备**:获取训练数据集,如ImageNet数据集或者专门用于目标检测的数据集(如COCO、PASCAL VOC等),并按照YOLO所需的格式预处理数据。 4. **编码库**:熟悉相关的深度学习框架,如TensorFlow、PyTorch等,它们都有现成的YOLOv3-SPP模型和教程可以参考。 5. **模型训练**:搭建训练环境,设置超参数,开始训练过程。这可能涉及到调整学习速率、损失函数、优化器等,并监控训练进度和验证结果。 6. **调试和优化**:分析训练过程中可能出现的问题,如过拟合、欠拟合,以及如何调整网络结构以改善性能。 7. **评估和应用**:完成训练后,在测试集上评估模型的性能,调整后进行部署,应用于实际场景或项目中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值