| by msbeta | No comments

Real-Time Object Detection-YOLO V1学习笔记

YOLO之前的Object Detection方法主要是通过Region Proposal产生大量的Bounding Box,再用Classifier判断每个Bounding Box是否包含Object,以及Object所属类别的Probability。

YOLO提出了一种新的Object Detection方法,它将Object Detection作为一个空间分离的Bounding Box和对应Class Probability的Regression问题来处理。YOLO使用单个神经网络直接从整幅图像预测Bounding Box和Class Probability,也正因为整个检测过程是单个神经网络组成的,所以YOLO可以直接端到端的优化物体检测表现。

YOLO物体检测方法的速度非常快,Base版本可以达到45帧/秒,Fast YOLO版本可以在保证mAP达到其它实时检测系统2倍情况下,检测频率仍然达到155帧/秒。相对于其它state-of-the-art的检测方法,YOLO产生更多的Localization Error,但在背景中预测出不存在的物体的情况会比较少。同时,YOLO学习到General的Object Representation,因为相对于其它物体检测方法(如DPM和R-CNN),YOLO从Natural Images泛化到其它领域(如Artwork)的表现更好。

The YOLO Detection System

1.Introduction

人类看一眼图像,就会立刻知道图像中有哪些物体,它们在哪里,以及它们是如何相互作用的。人类的视觉系统快速、准确,允许我们执行诸如驾驶车辆等复杂的任务。快速精确的Object Detection算法能够向人类用户传递实时的场景信息,并释放通用的响应式机器人系统的潜力。
当前目标检测系统主要使用分类器的方法做目标检测。为了检测物体,这些系统使用目标分类器在测试图像的不同位置和不同尺度上进行目标检测和评估。比如Deformable Parts Models(DPM)系统使用滑动窗口方法,使用分类器在整副图像上均匀进行目标查找。

最近的R-CNN系统使用Region Proposal的方法,首先对图像生成潜在的Proposed Bounding Box,然后在Proposed Bounding Box上运行分类器,分类后,使用post-processing来refine bounding box,消除重复检测,并根据场景中的其他物体重新评估Boxes的得分。由于每个单独的模块都需要独立训练,所以这种组合Pipeline不仅速度慢,而且优化难度非常大。
YOLO将Object Detection重新定义为直接从图像像素到Bounding Box坐标和Class Probability的Regression问题。使用YOLO系统,只需查看一次图像,就可以预测存在哪些对象以及它们在哪里。

与滑动窗口技术和基于Region Proposal的技术不同,YOLO在训练和测试时对整幅图像进行处理,因而可以隐含的对分类的上下文信息和物体的外表进行编码,所以在物体检测时,有更好的全局性。在顶级的检测方法Fast RCNN中由于不能看到更大的上下文信息,因而会把背景误识别为物体,YOLO可以背景的的误识别率降低一半。

YOLO的泛化能力也远超DPM和RCNN,所以当把YOLO模型应用于新的领域或者遇到预期之外的输入时,它也能很好的进行处理。

YOLO的不足在于它的精度仍低于目前state-of-the-art的检测系统,并且对于小物体的检测定位效果不佳。

2.Unified Detection

YOLO使用整幅图像作为输入,同时预测物体的Bounding Box和Class,把Object Detection过程统一为单个神经网络的统一过程。YOLO的这种设计使得它在保持很高AP的情况下,仍然可以进行端到端的Training和达到实时的检测速度。

Confidence Score

YOLO系统将输入图像分成S x S的网格,如果Object的中心落在哪个网格中,该网格就负责检测该Object。每个网格预测B个Bounding Box和对应的Confidence Score。

$ Confidence Score(Object) = Pr(Object) * IOU_{pred}^{truth}$

Confidence Score反映了: 1) Bounding Box是否包含Object,即多大程度上确信Bounding Box包含了Object;2) Bounding Box对自身坐标预测精度的评估。如果一个网格中没有Object存在,它的Confidence Score应该为0;反之,Confidence Score的值等于Predicted Box和Ground Truth的IOU。

The Model. Our system models detection as a regres- sion problem. It divides the image into an S × S grid and for each grid cell predicts B bounding boxes, confidence for those boxes, and C class probabilities. These predictions are encoded as an S × S × (B ∗ 5 + C) tensor.

Coordinate

每个Bounding Box包含5个预测值:x,y,w,h和confidence。(x,y)表示Box的中心点坐标(相对于网格边界);w,h时Bounding Box的宽度和高度(相对于整个图像);Confidence表示Predicted Box和Ground Truth Box的IOU。

如下图所示,图像的大小为448 x 448,Grid Cell的大小为149 x 149;待检测的Object的宽度为224,高度为143,中心点为(220,190);与待检测的Object的IOU最大的Grid Cell的左上角坐标为(149, 149)。

x=(Object中心点x坐标 – Grid Cell左上角x坐标)/Grid Cell的宽度
= (220-149)/149 = 0.48

y=(Object中心点y坐标 – Grid Cell左上角y坐标)/Grid Cell的高度
= (190-149)/149 = 0.28

w=Object的宽度 / 图像的宽度 = 224 / 448 = 0.5

h=Object的高度 / 图像的高度 = 143 / 448 = 0.32

Classification

每个网格还要预测C个条件分类概率$Pr(class_i|object)$,不管每个网格预测多少个Bounding Box,YOLO只预测一组分类概率。

在测试阶段,将每个网格的conditional class probabilities与每个bounding box的 confidence相乘:

$Pr(Class_i|Object)*Pr(Object)*IOU_{pred}^{truth} = Pr(Class_i) * IOU_{pred}^{truth}$

上述乘积既反映了预测bounding box中class的 probability信息,也反映了预测bounding box是否含有Object和bounding box坐标的准确度。

在PASCAL VOC数据集上测试YOLO时, 我们设置S = 7, B = 2,PASCAL VOC包含20个标签分类,因此C = 20。最终的预测结果是一个7 × 7 × (2 * 5 + 20) = 7 x 7 x 30的tensor.

2.1. Network Design

YOLO网络架构受到GoogleNet的启发,但是未使用Inception Module,而是使用1×1 reduction layer + 3×3 convolutional layers替代。完整的网络结构如下图所示,它包含24个卷积层+2个全连接层。

The Architecture. Our detection network has 24 convolutional layers followed by 2 fully connected layers. Alternating 1 × 1 convolutional layers reduce the features space from preceding layers. We pretrain the convolutional layers on the ImageNet classification task at half the resolution (224 × 224 input image) and then double the resolution for detection.

2.2 Loss函数

YOLO的Loss函数使得coordinate(x,y,w,h),confidence,classification三方面达到很好的平衡。 由于均方和(sum-squared error)误差更容易优化,所以YOLO模型把均方和(sum-squared error)误差作为优化目标。

$1_{i}^{obj}$表示第i个Cell是否包含Object;$1_{ij}^{obj}$判断第i个Cell的第j个Bounding Box是否负责预测该Object,与Object的GoundTruth的IOU最大的Bounding Box负责预测该Object。

损失函数中的Coordinate部分

Coordinate采用(x,y,w,h)的均方误差来衡量Loss。预测的Bounding Box的宽(w)和高(h)的绝对偏差并不能衡量预测的准确度,比如同样的偏差,小的Bounding Box受到的影响比大的Bounding Box要大,为了缓和这个问题,作者采用width和height的平方根替代width和height计算均方误差。

如下图所示,对相同的$\delta w_i = w_i – \hat{w}_i$,w的值越大,$\sqrt{w_i} – \sqrt{\hat{w}_i}$的差值变化越小。

损失函数中的Confidence部分

Confidence误差也采用均方差的形式。在Object Detection过程中,不包含Object的Grid Cell往往比包含Object的Grid Cell要多很多,使得它们的Confidence Loss的贡献要大于包含Object的Grid Cell,为了解决这个问题,降低不包含Object的Grid Cell的的影响,设置两个权重常数,$\lambda_{obj}=5,\lambda_{noobj}=0.5$。原文中描述如下:

in every image many grid cells do not contain any object. This pushes the “confidence” scores of those cells towards zero, often overpowering the gradient from cells that do contain objects. This can lead to model instability, causing training to diverge early on.

损失函数中的Classification部分

YOLO中每个Grid Cell都会生成多个Bounding Box,但是不是每个Bounding Box都会预测一个Classification,而是每个Grid Cell对应一个Classification,这也是YOLO对于稠密小物体检测效果差的原因所在。

2.3 Trainning细节

我们在PASCAL VOC 2007 and 2012数据集上训练了135个Epochs,Training Batch Size=64,momentum=0.9,decay=0.0005。训练过程中Learning Rate的设置如下:第一个Epoch将Learning Rate从$10^{-3}$缓慢增加到$10^{-2}$,之所以要这么做,是因为如果一开始就设置一个很高的Learning Rate,我们的模型就会因为不稳定的梯度导致模型不收敛。然后使用Learning Rate=$10^{-2}$训练75个Epoch,使用Learning Rate=$10^{-3}$训练30个Epoch,使用Learning Rate=$10^{-4}$训练30个Epoch。

为了避免过拟合,我们使用了Dropout和Extensive Data Augmentation;Dropout Rate=0.5;对20%的原始图像进行随机的缩放和平移,还随机调整图像的曝光和饱和度(在HSV颜色空间中最多调整1.5倍)以实现Data Augmentation。

实验显示在预训练的神经网络上增加卷积层和全连接层可以提升神经网络的表现。所以我们首先在ImageNet 1000-Class数据集上预训上图中的前20层卷积层 + Average-Pooling Layer + Fully Connected Layer,在经过一周的训练后,在ImageNet 2012验证集上得到了88%的准确率。然后在预训练的神经网络基础上增加4个卷积层和2个随机初始化权重的全连接层。Detection需要丰富的视觉信息,所以我们将网络的输入分辨率从224 x 224 增加到 448 x 448。

神经网络最后一层使用线性激活函数,其它层使用如下的Leaky rectified线性激活函数。


2.4 Inference

YOLO的Grid Cell的设计消除了空间预测的多样性,大多数情况下,Object落在哪个Grid Cell中都是非常明确的,因此一个Object都会只生成一个Bounding Box。但是对于比较大的Objects或者落在多个网格边界处的Object,多个Grid Cell都能产生不错的预测结果,因此需要采用非最大值抑制(NMS,Non-maximal suppression)解决重复预测的问题。

与R-CNN 或者 DPM不同,NMS对于YOLO不是关键流程,可以将YOLO的mAP提升2%~3%。

2.5 Limitations of YOLO

1、YOLO每个Grid Cell只预测两个Bounding Box,并且只能有一个Class,这种空间约束限制了YOLO模型预测成群出现的小物体(如鸟群)的能力。

2、由于YOLO模型从大量数据中学习边界框预测,所以它对没有见过的Object或者不常见姿势或者形态的Object的泛化能力不强。

3、YOLO使用Loss函数衡量模型表现,Loss函数处理小Bounding Box和大Bounding Box的误差处理逻辑相同,但实际上,Large Box上的小误差通常不会有实质性的影响,但是Small Box的小误差往往会对IOU的计算有更大的影响。YOLO的主要错误来源就是定位错误。

3 Experiments

Fast YOLO是目前已知的在PASCAL数据集上最快的Object方法,同时52.7%的mAP是其它实时检测系统的2倍以上。YOLO在保持实时表现的同时,mAP达到了63.4%。

Error Analysis: Fast R-CNN vs. YOLO

YOLO的Localization Error超过其它来源的Error之和;Fast RCNN的Localization Error较少,但是Background Error较大,是YOLO的Background Error的3倍之多。

Model combination experiments on VOC 2007

既然YOLO可以对Background Error的处理效果很好,因此将YOLO和Fast R-CNN结合起来,可以很好的弥补Fast RCNN的短板。实验显示,Fast RCNN在VOC 2007测试数据集上的mAP最高达到了71.8%,结合YOLO之后,mAP提升3.2%到75%;Fast RCNN与其它模型结合带来的提升则非常有限。

Generalization results on Picasso and People-Art datasets

用于Object Detection的Academic Dataset的训练集和测试集都服从相同的分布。在实际应用中,这种情况是很少见的。为了对比YOLO和其它Detection System的泛化能力,我们在Picasso Dataset和People-Art Dataset对Person Detection做了对比测试,试验证明,YOLO的泛化能力要远超其它Detection System。

Qualitative Results. YOLO running on sample artwork and natural images from the internet.

发表评论