目前目标检测算法有很多,譬如:R-CNN,Faster R-CNN,DPM,RPN等等,YOLO也是其中之一,YOLO是当前目标检测算法中发展最为迅速的一个。YOLO结合了GooleNet modification和卷积神经网络的知识,可以对图像中的物体进行分类和定位。卷积神经网络对于物体分类来说效果是很好的,YOLO利用卷积层提取物体特征,通过全连接层进行分类和定位。接下来,我将大概讲一下YOLO的原理。
YOLO算法属于回归问题。
第一步:将图像划分为S*S的栅格(grid cell),如左下图,这里分成了7*7的grid cell。栅格的任务是:检测中心落在该栅格中的物体(注意,栅格中心未必与物体的中心重合,这个一定要明确,对后面的理解才不会产生影响)。
第二步:一个grid cell 可以预测B个bounding boxes(包围盒,以下简称bbox),包括预测bbox的confidence scores。bbox有五个预测值,分别是x,y(代表预测的bbox的中心与grid cell 边界的值),w,h(代表预测的bbox的width/height相对于整个图像width,height的比例),confidence(代表预测的bbox和ground truth box的IOU值)。
confidence = Pr(object) * IOU
一个bbox对应一个confidence score,如果grid cell里面没有object,confidence就是0,如果有,则confidence score等于预测的box和ground truth的IOU值,见上面公式。
在此解释一下IOU的意思,ground truth box是物体实际的位置,而IOU=bbox与ground truth box的交集/二者的并集,即交并比(重叠度),如右上图。
第三步:每个grid cell 还要预测C个conditional class probability (条件类别概率),即Pr (Class|Object)。即预测出,在grid cell包含object的条件下,该object属于某个类的概率。
注意,一个grid cell只需要预测一组(C个)类的概率,而不需要考虑bbox的数量。因为一个grid cell预测的B个bbox框住的都是同一个物体。也就是说,类别概率是针对grid cell的。
在本文中取S=7,B=2,C=20(因为PASCAL 数据集有20个类别),所以最后有