YOLO(You Only Look Once)是CVPR2016的一篇文章,是目标检测领域比较有名的的一篇文章,yolo出名不在于它的精度高,而在于他的速度很快,下面介绍的是yolo的第一版,在yolo之后,又改进出了yolo-v2,yolo-v3,v2,v3的精度相比较于v1就有大大提升了,这个后面再详细介绍。
在介绍yolo之前,首先引入一下目标检测的进展,yolo之前的目标检测一般是如何做的呢?
有两个代表:DPM以及RCNN系列
1.DPM:利用sliding window,提取特征(SIFT等),进行比对
2.RCNN: 利用region proposal方法提取,利用网络进行分类,并进行坐标回归预测
yolo是怎么做的呢?
yolo直接采用regression(回归)的方法进行坐标框的检测以及分类,使用一个end-to-end的简单网络,直接实现坐标回归与分类,如下图所示
yolo具体是怎么做的呢?
yolo首先将图像分割成S*S个grid(S默认取7),然后对每个gird,预测B个(bounding box + confidence),(B默认为2),confidence定义为 P r ( O b j e c t ) ∗ I O U p r e d t r u t h P_r(Object)*IOU_{pred}^{truth} Pr(Object)∗IOUpredtruth,如果不存在物体,则confidence为0,否则期望其为IOU,bounding box为:[x,y,w,h]其中(x,y)为object中心点坐标
每个gird另外预测C个类别的概率,作者在VOC上实验,所以C取为20(这里为什么不是类似Fast RCNN的21类,因为是否为背景,作者放到了上面的confidence中),
在测试过程中将confidence与C类的probability相乘如: P r ( C l a s s i ∣ O b j e c t ) ∗ P r ( O b j e c t ) ∗ I O U p r e d t r u t h = P r ( C l a s s i ) ∗ I O U p r e d t r u t h P_r(Class_i|Object)*P_r(Object)*IOU_{pred}^{truth}=P_r(Class_i)*IOU_{pred}^{truth} Pr(Classi∣Object)∗Pr(Object)∗IOUpredtruth=Pr(Classi)∗IOUpredtruth就可以得到每个类别的概率以及其bounding box的准确度。
说这么多,大家可能不清晰,那具体的预测过程是怎么样的呢?下面展示一下
- 首先通过20个类与每个grid的2个预测bounding box的confidence相乘,得到该bounding box为每个类的概率,对每个grid都做该操作,将得到7*7*2=98个向量,如下图黄色矩形所示,其中,每一列代表每个预测的bounding box为各个类别的概率值,每一行【下面图中么有行,可以看下2张图】对应每个类别,以下2张图中第一个图为例,第一行便对应于dog的概率,第一列则对应于bounging box1.