One-Stage目标检测算法——开创性的YOLO

Faster R-CNN系列等两阶段(Two-Stage)的目标检测算法有较好的检测效果和较高的检测精度,但从速度上来讲满足不了实时检测的要求。基于回归方法的深度学习目标检测就显得尤为重要了。使用回归的思想,输入的图片经过网络直接计算出物体的分类,位置信息以达到目标检测的目的。

YOLO(You only look once:Unified ,Real-Time Object Detection)是基于回归的方法中最经典的算法之一。YOLO采用单个神经网络全图直接训练预测物品边界和类别概率,模型的最后直接输出Bounding-box 的坐标、 Bounding-box 中包含物体的置信度和物体的类别。从而实现真正意义上的端到端的物品检测。识别性能有了很大提升,在 Titan X 的 GPU 上能达到45 FPS,而在Fast YOLO(卷积层更少)中,可以达到155 FPS。
YOLO预测阶段的流程如下,流程图如图1所示:

YOLO网络结构
图 1 YOLO网络结构,整个网络由24个卷积层和2个全连接层。网络先在224×224尺寸的ImageNet数据集上进行预训练分类任务,之后将图像尺寸翻倍进行检测任务。

1) 将图像缩放到448×448尺寸作为卷积神经网络的输入,并对图像划分成S×S的网格。

2) 经过CNN后到达FC层,最后一层的FC输出4096个神经元

3) FC层的输出作为检测层(Detection层)的输入,在1)中将原图分为7×7的网格,对于每个网格,我们都预测B个Bounding-box,包括每个Bounding-box的4个位置信息,网格包含目标的置信度。另外每个网格还预测C个类别上的概率。最终得到
$$
S×S×(B×5+C)
$$
大小的特征图,输出的特征图结构如下。

YOLO网络结构
图 2 输出的特征向量

YOLO在PASCAL VOC数据集上进行评估,数据集中类别有C=20个。所以输出的特征向量大小为
$$
S×S×(B×5+C) = 7×7×(2×5+20)=(7,7,30)
$$

最后根据阈值去除分类概率比较低的目标窗口,最后使用NMS算法去除冗余窗口,得到最后的目标窗口。
可以看到整个预测过程非常简单,不需要中间的**region proposal**找目标,直接回归便完成了位置和类别的判定。

YOLO网络模型的架构思想如图3所示,我们将初始大小为448×448大小的图像分为7×7的网格,每个网格的大小为64×64。如果一个物体的中心点落在这个网格内,那么这个网格负责预测这个物体。每个网格预测两个Bounding-box,每个Bounding-box对应预测除了四个位置参数外,还有一个参数叫置信度(confidence)的值,表达式为如下所示:
$$
confidence= P_r (Object)×IOU(truth|pred)
$$

其中,YOLO表示这个网格是否包含目标物体,若包含目标物体则YOLO,否则YOLOYOLO表示ground truth和prediction的重叠率。还会预测出网格中存在目标物体的条件下属于那一类别物体的后验概率!YOLO
YOLO网络结构
图3 将图像分为S×S的网格,每个网格预测两个边界框和对应网格的类别概率,最后回归得到物体的边界框和分类
在预测分类时,每个Bounding-box的得分其实是confidence和后验概率的乘积。得分公式如下所示:

$$
Score=confidence×P_r (Class_i |Object)=P_r (Class_i )×IOU(truth|pred)
$$

得到这个得分后再通过NMS算法过滤掉小于阈值的边界框,得到最终的边界框。
YOLO网络的卷积层采取的是类似GoogLeNet的结构,采用1×1大小的卷积核减少计算量。在ImageNet数据集上的预训练中,采用的是前20层的卷积层后加一个全连接层的结构。在预训练完分类任务后,将网络结构转化为检测网络,在20层卷积后又添加了4个卷积层和两个全连接层来执行检测任务。因为检测的过程中需要图像中更加细粒度的信息,所以将原图像尺寸增加到448×448进行检测任务。根据图片的宽高将Bounding-box的宽高归一化到[0,1]之间,中心点坐标设置为网格左上角顶点的偏移量,使用多任务的损失函数直接回归边界框,物体类别,置信度等信息。
YOLO和其他的算法在Pascal VOC 2007数据集上的比较结果如下表:
Real-Time Detectors Train mAP FPS
Fast YOLO 2007+2012 52.7 155
YOLO 2007+2012 63.4 45
Less Than Real-Time Train mAP FPS
Fast R-CNN 2007+2012 70.0 0.5
Faster R-CNN VGG-16 2007+2012 73.2 7
可以看到回归方法的目标检测的FPS是很高的,但精度还有待提高。同时YOLO算法还存在几点不足:
  1. YOLO的每一个网格只预测两个边界框,一种类别。这导致模型对相邻目标预测准确率下降。因此,YOLO对集群的目标或小的目标识别准确率较低。
  2. 损失函数会同样的对待小边界框与大边界框的误差,导致了目标区域定位的误差偏大和召回率较低。