一、YOLOv3总体概述
相比于前两代,YOLOv3最大的改进在于网格结构的设计。
核心目标:使其更适合小目标检测。
四大核心升级:
1.特征更细致,融合多尺度特征图预测不同规格物体。
2.先验框更丰富,3种scale,共9种。
3.改进Softmax,支持多标签检测。
4.融入ResNet残差思想,加深网格。
二、核心改进
1.多尺度预测
为了能检测到不同大小的物体。传统的图像金字塔虽然能检测不同大小物体,但计算量大,不利于YOLO的检测速度;所以YOLOv3采用了单一输入,但在网络内部做文章。
YOLOv3不再像v2那样只利用单一特征图,而是类似FPN(特征金字塔)的思想,融合不同尺度的特征图进行预测。
输入图像尺寸为416*416*3。
经过不同倍数的下采样,得到13*13、26*26、52*52三个尺度的特征图。
网格将深层特征上采样与中层特征拼接,再将结果上采样与浅层特征(52*52)拼接,从而实现多尺度融合预测。
2.更深的网格与残差连接
YOLOv3采用了Darknet-53作为核心网格架构(没有池化和全连接层,全是卷积)。
残差连接(ResNet思想):深层网格容易出现梯度消失,导致训练效果变差。引入残差结构H(x)=F(x)+x)后,允许网格堆叠更多的层进行特征提取。
下采样方式:通过设置卷积的stride(步长)=2来实现下采样,替代了传统的池化层。
3.9种尺度的先验框设计
YOLOv2中使用了5个先验框,YOLOv3增加到了9个。这些先验框是通过对COCO数据集进行K-means聚类得到的。
分配策略:
13*13特征图:感受野大,应用较大的先验框,负责检测大物体。
26*26特征图:感受野中等,应用中等的先验框,检测中等大小对象。
52*52特征图:感受野小,应用较小的先验框,适合检测小目标。
4.多标签分类(Logistic替代Softmax)
在复杂场景中,一个物体可能属于多个类别(例如一个人既是"人",也是"行人")。传统的Softmax函数会强制所有类别概率之和为1,强制单标签分类,这在多标签任务中不再使用。
YOLOv3的改进 :使用多个独立的 Logistic 分类器。对每一个框中每个类别使用Sigmoid激活函数独立计算概率
只要某个类别的概率超过设定的阈值(如0.5),就认为包含该类别。
三、输入到输出的张量解析
YOLOv3的输出是一个3D张量。以COCO数据集(80个类别)为例,每个网格单元会预测3个边界框,每个预测目标的维度是:(4+1+80)=85
4:边界框坐标(tx,ty,tw,thtx,ty,tw,th)
1:边框置信度(Objectness score)
80:对象类别数
因此,三个尺度的输出分别为:
13×13×[3×(4+1+80)]
26×26×[3×(4+1+80)]
52×52×[3×(4+1+80)]
四、总结
YOLOv3在保持极快检测速度的前提下,通过多尺度特征融合 、Darknet-53残差网络 、9种先验框 以及Logistic多标签分类,大幅提升了特别是针对小目标的检测精度,真正做到了"基本上当下经典做法全融入了"。