论文学习记录: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会有一些损失。
1. 将输入图像划分成S x S的网格。如果物体的中心落在某个cell内,则这个cell就负责检测这个物体。
2. 每个cell预测B个bounding boxes和每个boxes的置信分数。
置信度定义如下:
如果没有物体在当前cell,则置信度分数为0。否则等于预测的box和ground truth box的IOU。
每个bounding box包含五个预测值: x,y,w,h和confidence。
3. 每个cell还要预测C个假定类别的概率。
在测试时将其乘以单个box的confidence:
作者在PASCAL VOC数据集上设置S=7,B=2, C=20,最终得到7x7x30的tensor。
YOLO的网络结构参考了GoogleLeNet模型,包含24层卷积层和2层全连接层,但是没有使用inception module结构,而是直接1x1的卷积层再跟着3x3的卷积层。
作者首先在ImageNet数据集上预训练了前面的20层卷积层,然后在检测的时候随机初始化后面的四层卷积层和两层全连接层,并且将输入图像从224x224提升到448x448。
**函数这里使用的leaky ReLU,
Loss作者使用的是sun-squared error,将localization error和classificaton error整合在一起。但这容易导致模型不稳定,训练不能收敛,因为有很多cell可能没有包含任何物体,它们的confidence分数将会是0。
作者对二者使用了不同的权重来惩罚,bounding box的项的权重设为5,不包含任何物体的box权重设为0.5。
作者训练了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内有多个物体的检测效果不好。