参考文献: Redmon J , Divvala S , Girshick R , et al. You Only Look Once: Unified, Real-Time Object Detection[J]. 2015.
项目主页: http://pjreddie.com/darknet/yolo/
包含理解!
You Only Look Once
Redmon J , Divvala S , Girshick R , et al.
1 Introduction
现在的 detection systems 将物体检测问题,最后会转变成一个分类问题。在检测中,detection systems 采用一个 classifier 去评估一张图像中,各个位置一定区域的 window 或 bounding box 内,是否包含一个物体?包含了哪种物体?(理解:RCNN的基本思想)
一些 detection systems,如 Deformable Parts Models(DPM),采用的是 sliding window 的方式去检测。
最近的 R-CNN、Fast R-CNN 则采用的是 region proposals 的方法,先生成一些可能包含待检测物体的 potential bounding box,再通过一个 classifier 去判断每个 bounding box 里是否包含有物体,以及物体所属类别的 probability 或者 confidence。这种方法的 pipeline 需要经过好几个独立的部分(理解:ROI生成+RNN+(SVM+边界框回归),至少两阶段),所以检测速度很慢,也难以去优化,因为每个独立的部分都需要单独训练。
本文将 object detection 的框架设计为一个 regression problem。直接从图像像素到 bounding box 以及 probabilities。这个 YOLO 系统如图看了一眼图像就能 predict 是否存在物体,他们在哪个位置,所以叫 You Only Look Once。
YOLO 的 idea 十分简单,如 Figure 1:
将图像输入单独的一个 CNN 网络,就会 predict 出 bounding boxes,以及这些 bounding boxes 所属类别的概率。YOLO 用一整幅图像来训练,同时可以直接优化 detection performance。
这样的统一的架构,对比之前如 R-CNN、Fast R-CNN 的 pipeline(区域建议ROI),有以下几点好处:
a. YOLO 检测系统非常非常的快。受益于将 detection 架构设计成一个 regression problem,以及简单的 pipeline。在 Titan X 上,不需要经过批处理,标准版本的 YOLO 系统可以每秒处理 45 张图像;YOLO 的极速版本可以处理 150 帧图像。这就意味着 YOLO 可以以小于 25 毫秒延迟的处理速度,实时地处理视频。同时,YOLO 实时检测的mean Average Precision(mAP,平均精度)是其他实时检测系统的2倍。
b. YOLO 在做 predict 的时候,YOLO 使用的是全局图像。与 sliding window 和 region proposals 这类方法不同,YOLO 一次“看”一整张图像,所以它可以将物体的整体(contextual)的 class information 以及 appearance information 进行 encoding。目前最快最好的Fast R-CNN ,较容易误将图像中的 background patches 看成是物体,因为它看的范围比较小。YOLO 的 background errors 比 Fast R-CNN 少一半多。
c. YOLO 学到物体更泛化的特征表示。当在自然场景图像上训练 YOLO,再在 artwork 图像上去测试 YOLO 时,YOLO 的表现优于 DPM、R-CNN 。
2 Unified Detection(统一检测)
YOLO 检测系统首先将输入图像分成S*S个 grid(小格),如果一个物体的中心掉落在一个 grid cell 内,那么这个 grid cell 就负责检测这个物体。
每个 grid cell 预测B个 bounding boxes,每个 bounding box 包含了5个predictions:Center_x,Center_y表示bounding box 的中心点坐标;width,height表示bounding box宽度高度;confidence表示置信度, confidence = P(object)* IOU,其中, P(object)表示包含目标的概率,IoU 值(intersection over union, IOU=交集部分面积/并集部分面积,2个box完全重合时IOU=1,不相交时IOU=0)。
理解:为什么置信度是包含目标的概率乘以IOU,损失函数中计算定位损失时不相当于衡量了IOU,在损失函数计算分类损失时只用是否包含目标的概率不行吗?答:置信度衡量了是否包含目标的概率和与真实框之间的重叠度,如果不考虑IOU,在做nms时,容易把概率大的框保留下来,即使这个框包含真实目标的IOU并不大(举例,一个框概率0.998,IOU为0.8,;另一个框概率0.999,IOU为0.5,容易保留第二个框)。此外,车牌检测中也计算了有无车牌的概率,是否要乘以IOU?答:车牌很多倾斜,IOU度量不准确,可用其他指标度量。
每个 grid cell 预测C个条件类别概率