原文链接:https://zhuanlan.zhihu.com/p/49556105

YOLOv3 没有太多的创新,主要是借鉴一些好的方案融合到 YOLO 里面。不过效果还是不错的,在保持速度优势的前提下,提升了预测精度,尤其是加强了对小物体的识别能力。

本文主要讲 v3 的改进,由于是以 v1 和 v2 为基础,关于 YOLO1 和 YOLO2 的部分析请移步YOLO v1 深入理解YOLOv2 / YOLO9000 深入理解

YOLO3 主要的改进有:调整了网络结构;利用多尺度特征进行对象检测;对象分类用 Logistic 取代了 softmax。

新的网络结构 Darknet-53

在基本的图像特征提取方面,YOLO3 采用了称之为 Darknet-53 的网络结构(含有 53 个卷积层),它借鉴了残差网络 residual network 的做法,在一些层之间设置了快捷链路(shortcut connections)。

YOLO v3深入理解 - 图1

图 1 Darknet-53[1]

上图的 Darknet-53 网络采用 2562563 作为输入,最左侧那一列的 1、2、8 等数字表示多少个重复的残差组件。每个残差组件有两个卷积层和一个快捷链路,示意图如下:

YOLO v3深入理解 - 图2

图 2 一个残差组件[2]

利用多尺度特征进行对象检测

YOLO v3深入理解 - 图3

图 3 YOLO3 网络结构[3]

YOLO2 曾采用 passthrough 结构来检测细粒度特征,在 YOLO3 更进一步采用了 3 个不同尺度的特征图来进行对象检测。

结合上图看,卷积网络在 79 层后,经过下方几个黄色的卷积层得到一种尺度的检测结果。相比输入图像,这里用于检测的特征图有 32 倍的下采样。比如输入是 416416 的话,这里的特征图就是 1313 了。由于下采样倍数高,这里特征图的感受野比较大,因此适合检测图像中尺寸比较大的对象。

为了实现细粒度的检测,第 79 层的特征图又开始作上采样(从 79 层往右开始上采样卷积),然后与第 61 层特征图融合(Concatenation),这样得到第 91 层较细粒度的特征图,同样经过几个卷积层后得到相对输入图像 16 倍下采样的特征图。它具有中等尺度的感受野,适合检测中等尺度的对象。

最后,第 91 层特征图再次上采样,并与第 36 层特征图融合(Concatenation),最后得到相对输入图像 8 倍下采样的特征图。它的感受野最小,适合检测小尺寸的对象。

9 种尺度的先验框

随着输出的特征图的数量和尺度的变化,先验框的尺寸也需要相应的调整。YOLO2 已经开始采用 K-means 聚类得到先验框的尺寸,YOLO3 延续了这种方法,为每种下采样尺度设定 3 种先验框,总共聚类出 9 种尺寸的先验框。在 COCO 数据集这 9 个先验框是:(10x13),(16x30),(33x23),(30x61),(62x45),(59x119),(116x90),(156x198),(373x326)。

分配上,在最小的 1313 特征图上(有最大的感受野)应用较大的先验框 (116x90),(156x198),(373x326),适合检测较大的对象。中等的 2626 特征图上(中等感受野)应用中等的先验框 (30x61),(62x45),(59x119),适合检测中等大小的对象。较大的 52*52 特征图上(较小的感受野)应用较小的先验框 (10x13),(16x30),(33x23),适合检测较小的对象。

YOLO v3深入理解 - 图4

图 4 特征图与先验框

感受一下 9 种先验框的尺寸,下图中蓝色框为聚类得到的先验框。黄色框式 ground truth,红框是对象中心点所在的网格。

YOLO v3深入理解 - 图5

图 5 9 种先验框尺寸

对象分类 softmax 改成 logistic

预测对象类别时不使用 softmax,改成使用 logistic 的输出进行预测。这样能够支持多标签对象(比如一个人有 Woman 和 Person 两个标签)。

输入映射到输出

YOLO v3深入理解 - 图6

图 6 输入 - 输出

不考虑神经网络结构细节的话,总的来说,对于一个输入图像,YOLO3 将其映射到 3 个尺度的输出张量,代表图像各个位置存在各种对象的概率。

我们看一下 YOLO3 共进行了多少个预测。对于一个 416416 的输入图像,在每个尺度的特征图的每个网格设置 3 个先验框,总共有 13133 + 26263 + 5252*3 = 10647 个预测。每一个预测是一个 (4+1+80)=85 维向量,这个 85 维向量包含边框坐标(4 个数值),边框置信度(1 个数值),对象类别的概率(对于 COCO 数据集,有 80 种对象)。

对比一下,YOLO2 采用 13135 = 845 个预测,YOLO3 的尝试预测边框数量增加了 10 多倍,而且是在不同分辨率上进行,所以 mAP 以及对小物体的检测效果有一定的提升。

小结

YOLO3 借鉴了残差网络结构,形成更深的网络层次,以及多尺度检测,提升了 mAP 及小物体检测效果。如果采用 COCO mAP50 做评估指标(不是太介意预测框的准确性的话),YOLO3 的表现相当惊人,如下图所示,在精确度相当的情况下,YOLOv3 的速度是其它模型的 3、4 倍。

YOLO v3深入理解 - 图7

图 7 YOLOv3 与其它模型的性能对比[1]

不过如果要求更精准的预测边框,采用 COCO AP 做评估标准的话,YOLO3 在精确率上的表现就弱了一些。如下图所示。

YOLO v3深入理解 - 图8

图 8 YOLOv3 与其它模型的性能对比[1]

参考

[1]YOLOv3: An Incremental Improvement

[2]Deep Residual Learning for Image Recognition

[3]What’s new in YOLO v3?

[4]How to implement a YOLO (v3) object detector from scratch in PyTorch
https://zhuanlan.zhihu.com/p/49556105