YOLOv1论文解读
论文原文地址:
https://arxiv.org/pdf/1506.02640.pdf
论文的一个tensorflow实现版本:
https://github.com/gliese581gg/YOLO_tensorflow
一、摘要
YOLO的英文是(you only look once),之所以这样命名是相对于之前的物体检测方法提出的,YOLO是整个系列初始版本,后续改进版本用v加一个数字表示版本号,本文使用的YOLO即是YOLOv1。在YOLO以前,物体检测方法主要是通过region proposal方法来产生大量可能包含待检测物体的潜在BBox( bounding box),再通过训练好的分类器去判断每个BBox里面是否包含有物体,并给出物体的种类的概率(probability)和置信度(confidence)。YOLO的提出具有划时代意义,检测的方法发生了根本性的变化(相对于Fast R-CNN)。YOLO将目标检测任务看作回归(regression)问题,仅用单个神经网络来完成上述任务。作者还在文章中提到因为整个过程都在一个神经网络中进行,因此方便进行端到端的性能优化。
优势
- YOLO更快。相比于R-CNN、Fast R-CNN 以及Faster R-CNN等来说,YOLO在保持高mAP的同时检测速度仍然遥遥领先。
- YOLO能更好的避免图片背景错误。之前提出的大部分方法使用的region proposal使其分类器只能得到图像的部分信息。而YOLO是以整张图像为输入,因此能够利用一张图像的全部信息进行决策,从而减少背景预测出错。作者同Fast R-CNN进行比较,得出YOLO的背景错误不到Fast R-CNN的一半。
- YOLO的泛化性能更加强大。作者发现在自然图像上进行训练,在一些艺术风格的图像上进行测试时,YOLO仍然表现出更烈的泛化性。例如下图时作者在CVPR2016做论文讲解时进行的示例:
不足
- YOLO的检测精度低于一些最新的目标检测模型。
- YOLO容易产生物体的定位错误。(19.0%的定位错误相比于Fast R-CNN的8.6%高出不少)
- YOLO对小物体的检测效果不好。
二、算法原理
可以根据作者给出的示例图片总结出如下三步:
1、分格
首先,图像会被分为S x S个格子,各个格子分别大小相同,分别拥有原图的一部分。
2、检测
包含Ground truth(GT,即正确标记的数据)物体中心的格子负责检测相应的物体。这一步中需要改变输入图像的大小并送入卷积神经网络中,通过非极大值抑制(Non-max suppression)获取预测结果.
3、结果表示
每一个格子都会给出B个检测框及其置信度,以及C个类别的概率,因此整个模型的输出为S x S x (5 x B +C)。作者的模型是基于VOC数据集进行的,在该数据集上,作者将原始图像分为7 x 7共49个格子,每个格子给出两个BBox,每个BBox由一个向量表示为[x,y,w,h,c],分别是目标物体中心点(x,y),BBox的宽高(w,h)以及c(confidence)为预测的BBox和GT box的IOU值。同时该数据集由20个分类(包括狗、自行车等),因此对于VOC数据集训练的YOLO模型而言,该模型输出的为7 x 7 x (5 x 2+20)=1470维的一个向量结果。通过设置IOU与阈值,过滤掉低分的BBox来决定是否将预测出的物体标注在图上。
三、模型结构
模型的搭建借鉴了GoogleNet,但是通过使用1 x 1卷积层来整合多个颜色通道的信息和3 x 3卷积来进行特征提取来替代inception module。
损失函数
目标检测的任务,就是要找准目标的位置,准确标出目标的宽高,正确给出目标的分类。因此,损失函数的应该为优化上述三个目标进行服务:
红色框线内即对坐标预测的损失函数部分,用于判断第i个格子的第j个BBox是否负责目标的检测。绿色框线部分表示BBox含有目标的置信度。绿色框线表示BBox不含目标的置信度的预测。紫色框线部分为该格子对应的所属类别的概率。
其中出现的
λ
c
o
o
r
d
λ_{coord}
λcoord与
λ
n
o
o
b
j
λ_{noobj}
λnoobj用于调节权重。在作者的训练中希望有目标的BBox比没有目标的BBox拥有更大的权重。
四、结语
目前最新的YOLO已经有v4版本,在v2与v3版本中都对v1版本进行了改进。其中作者自己提出的现有的模型弊端有:图片的输入尺寸固定以及对小目标检测效果差等。
最主要的缺陷还是当同一个格子之中包含了多个物体时,仅仅能给出其中一个IOU最高的结果而抛弃其它的,改进方法将在后面的版本中进行讨论。
参考文献
[1]: https://arxiv.org/pdf/1506.02640.pdf
[2]: https://arxiv.org/pdf/1612.08242v1.pdf
[3]: https://blog.csdn.net/hrsstudy/article/details/70305791
[4]: https://www.bilibili.com/video/BV12x411a7Di
[5]: https://github.com/gliese581gg/YOLO_tensorflow