论文地址:You Only Look Once: Unified, Real-Time Object Detection
前记: 在YOLO之前,绝大部分目标检测算法都是采用分类的思想进行的,比较具有代表性的如DPM算法,通常都是在图像上采用滑窗的方法,然后对每一个小窗口进行分类,最后就完成整张图像的目标检测,将检测问题转化为分类问题是这一类方法的主要思想,但是这一类方法存在一个巨大的弊端,由于你无法确定目标的大小,因此,在做使用滑窗算法的时候必须选用不同大小比例的窗口进行滑动,以确保不会存在漏检,这就导致会有很多并不包含目标的子区域,这些大量子区域通过分类器进行预测无疑需要很大的计算量,R-CNN为了避免这一问题采用了selective search的方法来尽可能找到包含目标的子区域,尽管效率有所提升,但是整个过程还是非常耗时的。
YOLO则转变思想,将检测问题当作一个回归问题来解决,只需要单一的一个网络便能预测出目标的类别以及位置,属于one-stage类算法,前面文章SSD也属于这一类算法,正因为如此,YOLO可以实现end-to-end的预测,达到实时的检测目标, 一个简单的检测流程如下图:
YOLO的优势:
- YOLO检测速度非常快,在TITAN X GPU上能达到45帧每秒,实现了实时的检测,fast yolo能达到150帧每秒,相对于其它实时检测算法而言,yolo的精度是其它算法平均水平的两倍
- YOLO在预测的时候看到的是图像的全局信息,不同于sliding window 和region proposal方法只能看到局部信息,相对于Fast R-CNN Yolo 有着更低的背景误检率(将背景检测为目标)
- YOLO学习了目标的generalizable representations, 即泛化能力更强
统一检测:
- YOLO将输入图像分为S X S个单元网格, 如果目标的中心落入到某一个单元网格中,那么该网格就负责预测该目标
- 每一个单元网格预测B个bounding box(注意:yolov1是没有先验框的), 每一个bounding box 预测一个置信度和四个坐标值(x, y, w, h),置信度表明该box 包含目标的可能性,置信度的计算 方法定义为: P r ( o b j e c t ) ∗ I O U p r e d t r u t h Pr(object) * IOU^{truth}_{pred} Pr(object)∗IOUpredtruth, 如果该box不包含目标时 P r ( o b j e c t ) Pr(object) Pr(object)为0, 则confidence为0, 如果包含目标 P r ( o b j e c t ) Pr(object) Pr(ob