改进方法概述
- yolo-v3 最大的改进就是网络结构,使其更适合小目标检测
- 特征做的更细致,融入多持续特征图信息来预测不同规格的物体;
- 先验框更丰富了,3种 scale,每种3个规格,一共9种
- yolo-v3希望检测效果变得更好
- softmax改进,预测多标签任务
改进细节
- 多Scale
- 为了能检测到不同大小的物体,设计了3个scale(13x13 、26x26、52x52)
- scale变换经典方法
图像金字塔:如果在yolo中使用的话,速度太慢了
FPN(feature pyramid network): 特征金字塔,对不同的特征图分别利用,不同的特征图融合后进行预测,尺寸不同通过上采样实现
- 网络结构改进:Darknet-53
- 残差连接: yolo-v3 的特征提取器是一个残差模型,因为包含53个卷积层,所以称为Darknet-53,从网络结构上看,相比Darknet-19网络使用了残差单元,所以可以构建得更深。
- 采用FPN架构: 采用 FPN 架构(Feature Pyramid Networks for Object Detection)来实现多尺度检测。YOLOv3 采用了3个尺度的特征图(当输入为416x416时)—— (13x13),(26x26),(52x52)。YOLOv3 每个位置使用3个先验框,所以使用 k-means 得到9个先验框,并将其划分到 3 个尺度特征图上,尺度更大的特征图使用更小的先验框。
- 没有池化和全连接层,下采样通过步长为2实现
- 先验框的设计:使用聚类得到9个聚类中心,然后对它们进行排序,再平均分配到三个尺度上,最后每个尺度有3个anchor。
- softmax改进: 实现多标签任务
类别预测方面主要是将原来的单标签分类改进为多标签分类,因此网络结构上就将原来用于单标签多分类的softmax层换成用于多标签多分类的逻辑回归层。首先说明一下为什么要做这样的修改,原来分类网络中的softmax层都是假设一张图像或一个object只属于一个类别,但是在一些复杂场景下,一个object可能属于多个类,比如你的类别中有woman和person这两个类,那么如果一张图像中有一个woman,那么你检测的结果中类别标签就要同时有woman和person两个类,这就是多标签分类,需要用逻辑回归层来对每个类别做二分类。逻辑回归层主要用到sigmoid函数,该函数可以将输入约束在0到1的范围内,因此当一张图像经过特征提取后的某一类输出经过sigmoid函数约束后如果大于0.5,就表示属于该类。采用的二值交叉熵损失(binary cross-entropy loss)。
- 损失函数
- YOLOv3的损失函数也由定位损失bbox loss、置信度损失conf loss和分类损失class loss三部分组成。
- 各部分损失函数详解:
其中:
注意: 位置损失为方差损失(MSE),置信度损失和分类损失都为交叉熵损失(BCE)(binary cross entropy,其中BCE的具体公式计算如下:
- 参考