@(Aaron) [深度学习, 目标检测]
主要内容包括:
- yolov3-spp 网络结构
- 多尺度预测
??YOLO系列是典型的一阶段网络,并且一直都是以性能和速度并重而出名,因此非常适合工业场景的应用,从图中可见一斑。加入SPP(Spatial Pyramid Pooling, 空间金字塔池化结构)后的YOLOv3,在几乎不增加时间消耗的同时又提升了性能,非常值得借鉴。
??针对YOLO v2的缺陷,YOLO v3将当今一些较好的检测思想融入到了YOLO中,在保持速度优势的前提下,进一步提升了检测精度,尤其是对小物体的检测能力。
文章目录
- 1、yolov3-spp 网络结构
- 2、多尺度预测
- 3、Softmax改为Logistic
- 4、SPP模块
- 总结
1、yolov3-spp 网络结构

图 1.1 YOLOv3-SPP网络结构
?
??网络可视化工具netron详细安装流程
??Yolov3可视化流程图
??yolo系列除了yolov1,其他版本并没有给出可视化的网络结构,而对于网络结构的整体把握对后续理解又至关重要,因此有了上图。结构图的绘制参考了其他人的博客,并通过netron查看onnx模型结构逐一进行了校正,进行了一些修改,因此准确性可以保证。
??YOLO v3继续吸收了当前优秀的检测框架的思想,如残差网络和特征融合等,提出了如图1.1所示的网络结构,称之为DarkNet-53。这里默认采用512×512×3的输入,图中的各模块意义如下:
- CBL:代表卷积、BN及Leaky ReLU三层的结合,在YOLO v3中,卷积层都是以这样的组件出现的,构成了DarkNet的基本单元。CBL后面的数字代表有几个DBL模块。
- Res:图1.1中的Res代表残差模块,Res后面的数字代表有几个串联的残差模块。
- 上采样:上采样使用的方式为上池化,即元素复制扩充的方法使得特征尺寸扩大,没有学习参数。
- Concat:上采样后将深层与浅层的特征图进行Concat操作,即通道的拼接,类似于FPN,但FPN中使用的是逐元素相加。
??从图1.1中可以看出新的DarkNet-53结构的一些新特性:
- 残差思想:DarkNet-53借鉴了ResNet的残差思想,在基础网络中大量使用了残差连接,因此网络结构可以设计得很深,并且缓解了训练中梯度消失的问题,使得模型更容易收敛。
- 多层特征图:通过上采样与Concat操作,融合了深、浅层的特征,最终输出了3种尺寸的特征图,用于后续预测,多层特征图对于多尺度物体及小物体检测是有利的。
- 无池化层:之前的YOLO网络有5个最大池化层,用来缩小特征图的尺寸,下采样率为32,而DarkNet-53并没有采用池化的做法,而是通过步长为2的卷积核来达到缩小尺寸的效果,下采样次数同样是5次,总体下采样率为32。
??值得注意的是,YOLO v3的速度并没有之前的版本快,而是在保证实时性的前提下追求检测的精度。如果追求速度,YOLO v3提供了一个更轻量化的网络tiny-DarkNet,在模型大小与速度上,实现了SOTA(State of the Art)的效果。
2、多尺度预测
??从图1.1中可以看到,YOLO v3输出了3个大小不同的特征图,从上到下分别对应深层、中层与浅层的特征。深层的特征图尺寸小,感受野大,有利于检测大尺度物体,而浅层的特征图则与之相反,更便于检测小尺度物体,这一点类似于FPN结构。
??YOLO v3依然沿用了预选框Anchor,由于特征图数量不再是一个,因此匹配方法也要相应地进行改变。具体方法是,依然使用聚类的算法得到了9种不同大小宽高的先验框,然后按照下表所示的方法进行先验框的分配,这样,每一个特征图上的一个点只需要预测3个先验框,而不是YOLO v2中的5个。
特征图大小 | 感受野 | 先验框 |
---|---|---|
16X16 | 大 | (116X90) (156X198) (373X326) |
32X32 | 中 | (30X61) (62X45) (59X119) |
64X64 | 小 | (10X13) (16X30) (33X23) |
??YOLO v3使用的方法有别于SSD,虽然都利用了多个特征图的信息,但SSD的特征是从浅到深地分别预测,没有深浅的融合,而YOLO v3的基础网络更像是SSD与FPN的结合。
??YOLO v3默认使用了COCO数据集,一共有80个物体类别,因此一个先验框需要80维的类别预测值、4个位置预测及1个置信度预测,3个预测框一共需要3×(80+5)=255维,也就是每一个特征图的预测通道数。
3、Softmax改为Logistic
??YOLO v3的另一个改进是使用了Logistic函数代替Softmax函数,以处理类别的预测得分。原因在于,Softmax函数输出的多个类别预测之间会相互抑制,只能预测出一个类别,而Logistic分类器相互独立,可以实现多类别的预测。
??实验证明,Softmax可以被多个独立的Logistic分类器取代,并且准确率不会下降,这样的设计可以实现物体的多标签分类,例如一个物体如果是Women时,同时也属于Person这个类别。
??值得注意的是,Logistic类别预测方法在Mask RCNN中也被采用,可以实现类别间的解耦。预测之后使用Binary的交叉熵函数可以进一步求得类别损失。
??YOLO算法已经历经了3个版本的演变,在物体检测领域做出了卓越的成绩,以YOLO v3为例,其优缺点主要如下:
- 优点:速度快是YOLO系列最重要的特质,同时YOLO系列的通用性很强,由于其正样本生成过程较为严格,因此背景的误检率也较低。
- 缺点:位置的准确性较差,召回率也不高,尤其是对于遮挡与拥挤这种较难处理的情况,难以做到高精度。
4、SPP模块
??SPP即(Spatial Pyramid Pooling, 空间金字塔池化结构),原本是为了解决卷积神经网络输入尺寸固定的问题,具体可以参考这篇博客SPP,但在YOLOv3中并不是为了解决这个问题,单纯的只是借鉴了空间金字塔的思想,通过SPP模块实现了局部特征和全局特征的融合。SPP的具体结构图1.1中有示意,很多人困惑的是经过不同尺寸核的池化得到的特征图是如何concat到一起的,其实不同尺寸的池化所用的padding也是不一样的,为的就是保证得到的特征图尺度一致。
总结
??总体上,YOLO因为其较快的速度,在工业界应用极为广泛,尤其是在不追求预测框高精度的场景下。在与其他检测算法精度相同时,可以达到3到4倍的前向速度,是一个十分适合实际应用的检测框架。有趣的是,YOLO v1不依赖先验框Anchor而直接预测边框的思想在近一两年又得到了复兴,涌现了一大批Anchor-Free但检测精度优良的算法。