YOLO:You Only Look Once论文阅读

前言

YOLO的提出是相对Faster RCNN的改进,Faster RCNN的速度是大概1秒7到8张,一般视频播放1s有20多帧吧,所以Faster RCNN不能达到完全的实时,而YOLO的速度可以达到每秒45张图。速度的提升主要得益于一个网络进行box和cls的预测,而Faster RCNN是两个网络分别预测box和cls。不过从准确率上来说,YOLO是不如Faster RCNN的,但是他提升图片定位速度的方式还是值得学习的。

1.介绍

比较早的时候是用slide window的方式进行图片定位,这种方式速度慢而且不准确,因为我们需要用各种形状的box框在图片中滑动然后为框内的每个物体打分。

后来的尝试是RCNN,RCNN需要用selective search先生成预选框,然后用预选框进行训练,会生成相对预选框的矫正值和框中的类别打分。这种网络很难优化,因为所有的网络都是分开的。

YOLO的物体检测只有一个回归模型,会预测出坐标和类别打分,所以叫做you only look once.

YOLO的模型总结下来就是上图的三个步骤,非常直观明了。相对其他网络的优势如下:

  1. 速度快,并且相比其他实时网络准确率两倍以上(注意,Faster RCNN不算实时网络),可以实时处理webcam的数据
  2. YOLO是整张图片直接参与网络,相比一些用局部进行网络计算而言,更有全局观,所以对背景识别的错误率更低
  3. YOLO范化能力好,用普通图片进行训练后,在艺术图片上也有不错的效果

YOLO的准确率确实不是最好的,尤其在识别小物体上不太好,最后作者也会给出一些实际操作中的tradeoff。

2.统一检测

YOLO将其他检测系统中各个分散的模块合并成了一个神经网络。对这个网络输入整张图片就可以得到图片的预测框和框中的物体,能够实现端到端的训练,在准确率不错的情况下达到实时检测的目的。

我们的系统会将输入的图片分成S\times S个格子,如果某个物体的中心落在了这个格子中,那么这个格子就代表这个检测物体。

没一个格子会预测B个bounding boxes和每个box的confidence score,confidence score代表这个模型有多少信心这个格子包含这个物体,confidence = Pr(Object)*IOU^{truth}_{pred},如果没有物体在这个格子里面,那么confidence应该是0.另外我们希望confidence score等于预测框和真实框之间的IOU。如果相等,就意味着Pr(Object) = 1了。

备注为何要有多个bounding box应该是考虑到可能有多个物体的中心点落在了同一个格子中的情况。

每个bounding box有x,y,w,h和confidence这5个信息,x和y代表这个box的中心相对它绑定的格子的中心的偏移,w和h是相对整张图片的一个相对值,confidence代表IOU。

每个格子也会预测这个格子包含C类物体中每种物体的可能性,用Pr(Class_i|Object)表示。无论有多少个bounding box这个预测也只会有一套。

测试时会将每个bounding box的Pr(Object)和这个格子的每个class的Pr(Class_i|Object)相乘。

这个公式就表示出来了每个box对每个class的confidence score

如果S=7B=2C=20,那么最后预测出来的就是7\times 7\times (2\times 5 + 20)个tensor。

2.1网络设计

设计的网络是一个卷积神经网络,前面的卷积层是为了提取特征,后面的全链接层进行预测。

有24个卷积层加上2个全链接层,主要用1x1和3x3的卷积因子,网络模型看下图

作者还提出了一个Fast YOLO的模型,就是用24层卷积换成9层卷积,其他参数基本一致。是一个更小的网络模型,所以速度上会更快。

2.2 训练

作者先用ImageNet 1000类的数据,使用上图中的前20层加上一个pooling层和全连接层,达到了88%的准确率。然后将训练好的前20层网络,后面连接4个卷积层2个全连接层,最后预测box坐标和class概率。最后一层用线性激活,其他层用Leaky RELU(0.1).

Loss是差的平方和,因为很容易优化。另外因为有很多box中的confidence会为0, 所以作者用两个超参数来平衡confidence为0和不为0的预测值。\lambda _{coord} = 5,\lambda _{noobj} = 0.5\mathbb{I}^{obj}_i代表第i个格子,\mathbb{I}^{obj}_{ij}代表第i个格子中的第j个bounding box。

作者训练了135个epoch,batchsize是64,momentum是0.9,weight decay是0.0005。在开始的epochs里面,慢慢提升learning rate从10^{-3}10^{-2},然后用10^{-2}训练75个epoch,然后10^{-3}训练30个epoch,最后10^{-4}训练30个epoch。

为了方式overfitting,第一层全连接使用了dropout,比例为0.5,另外也使用了数据增强。

2.3 Inference

YOLO在测试的时候速度非常快,因为只需要计算一个网络。在P ASCAL VOC数据集上平均每张图片会预测出98个bounding box,然后用NMS原则来筛选合并box。

2.4 YOLO的局限性

在很小的物体上准确率不高,如果物体的区域很小,那么很可能很多box都跟它的IOU会很大,这样会没有约束力,导致准确率降低。

3.和其他定位系统比较

总的来说其他系统大都不是用一个单一的网络老解决问题的,一般都会分成很多个步骤,可能优化的只是这些步骤中的某一步,最终的速度不会太快。

4.实验

这部分主要看一下YOLO在VOC2007和VOC2012上的表现,另外也尝试结合利用YOLO良好的区分背景的能力将YOLO和RCNN系列结合。

4.1 和其他实时系统比较

可以看到YOLO在速度和准确率的tradeoff上表现还是非常不错的。

4.2 VOC2007 错误分析

从错误分析上可以看出YOLO主要是box的定位不准确,但是对背景的区分错误率比Fast RCNN低。

4.3 Fast RCNN与YOLO结合

因为YOLO在区分背景时错误率更小,所以将YOLO与Fast RCNN结合来提升performance

对Fast RCNN预测出来的每一个bounding box,用YOLO去检查是否预测出了类似的box,如果YOLO也有类似的box,那么根据YOLO预测出来box的可能性对这个box进行修正和提升。

可以看到结合后准确率提升不少。

4.4 VOC2012的结果

像bottle, sheep和tv/monitor YOLO比RCNN低了大概8到10个点的准确率,然而像cat类别,YOLO的准确率比RCNN要高。

4.5 范化,在艺术作品中对人的识别

5 非数据集的识别效果

6.结论

YOLO通过一个网络端到端的训练实现了box和cls的预测。在速度达到实时的情况下还能保证不错的准确率,确实是个成功的模型。

YOLO的论文写的非常简单,很多细节应该还是要在代码中查找,原作者有一个很酷的网站(darknet)放着他的源代码,现在已经更新到YOLO3了。有兴趣可以看一下代码,YOLO的源代码我就不仔细阅读了,可能后面看了YOLO2或者3的论文会考虑分析一下代码。

以上为所有内容,感谢阅读,欢迎留言。

猜你喜欢

转载自blog.csdn.net/stesha_chen/article/details/84328387