论文学习记录:You Only Look Once:Unified, Real-Time Object Detection

YOLO(You Only Look Once)是发表在CVPR 2016年的文章,目的是object detection。

不同于其他算法将object detection作为分类问题来处理,YOLO将其作为回归问题得到bounding box和置信度分数。另外,与RCNN系列算法不同的是,YOLO是基于图像的全局信息进行预测的。

速度快是YOLO的一大优势,在Titan x GPU上可以达到45帧每秒,还有一个Fast YOLO版本可以达到惊人的155帧每秒,当然mAP会有一些损失。

论文学习记录:You Only Look Once:Unified, Real-Time Object Detection

1. 将输入图像划分成S x S的网格。如果物体的中心落在某个cell内,则这个cell就负责检测这个物体。

2. 每个cell预测B个bounding boxes和每个boxes的置信分数。

置信度定义如下:

论文学习记录:You Only Look Once:Unified, Real-Time Object Detection

如果没有物体在当前cell,则置信度分数为0。否则等于预测的box和ground truth box的IOU。

每个bounding box包含五个预测值: x,y,w,h和confidence。

3. 每个cell还要预测C个假定类别的概率。

在测试时将其乘以单个box的confidence:

论文学习记录:You Only Look Once:Unified, Real-Time Object Detection

论文学习记录:You Only Look Once:Unified, Real-Time Object Detection

作者在PASCAL VOC数据集上设置S=7,B=2, C=20,最终得到7x7x30的tensor。

YOLO的网络结构参考了GoogleLeNet模型,包含24层卷积层和2层全连接层,但是没有使用inception module结构,而是直接1x1的卷积层再跟着3x3的卷积层。

论文学习记录:You Only Look Once:Unified, Real-Time Object Detection

作者首先在ImageNet数据集上预训练了前面的20层卷积层,然后在检测的时候随机初始化后面的四层卷积层和两层全连接层,并且将输入图像从224x224提升到448x448。

**函数这里使用的leaky ReLU,

论文学习记录:You Only Look Once:Unified, Real-Time Object Detection

Loss作者使用的是sun-squared error,将localization error和classificaton error整合在一起。但这容易导致模型不稳定,训练不能收敛,因为有很多cell可能没有包含任何物体,它们的confidence分数将会是0。

作者对二者使用了不同的权重来惩罚,bounding box的项的权重设为5,不包含任何物体的box权重设为0.5。

论文学习记录:You Only Look Once:Unified, Real-Time Object Detection

作者训练了135个epochs,batch size=64, momentum=0.9,decay=0.0005。

前75个epochs,learning rate=0.01.

中间的30个epochs,learning rate=0.001.

最后的30个epochs,learning rate=0.0001.

为了防止过拟合,dropout rate=0.5.同时使用了数据增强,包括放大图像,随机调整饱和度和曝光。

YOLO虽然速度快,但是也有一些致命的缺点:

1. 定位精度差,

2. 对小物体或者一个cell内有多个物体的检测效果不好。