You Only Look Once:
Unified, Real-Time Object Detection
论文下载:http://arxiv.org/abs/1506.02640
(本篇多为一些理论上的内容,比较枯燥,难懂,建议拿一张纸,边看边记,多动脑。)
- 1 YOLO基本思路
将一幅图像分成 SxS 个网格(grid cell)(论文中以7*7为例,所以后面数据均以7*7计算),如果某个物体的中心落在这个网格中,则这个网格就负责预测这个物体。(注:是物体中心落在这个网格中,并不是物体的某一部分落在这个网格中,如图所示,有3个物体,狗,自行车,汽车,则物体中心点对于的grid cell负责对于物体的预测。)
每个网格中有B个边界值(bounding box)(论文中B=2,所以一幅图像共有7*7*2=98个bounding box),每个bounding box有5个参数:x,y,w,h,记录边界框的位置,大小。confidence 代表了所预测的 box 中含有 object 的置信度和准确度,其计算公式为:
其中如果有 object 落在一个 grid cell 里,第一项取 1,否则取 0。 第二项是预测的 bounding box 和实际的目标框之间的 IoU 值。
每个grid cell还要预测一个类别信息,即判断为某一类的概率值,记为C类。(V1模型中,一共有20中类别,所以C中有20个参数)。由上,每幅图像所输出的形式为:S*S*(5*B+C)=7*7*(5*2+20)=7*7*30的向量。其网络结构如图所示:
注意:类别信息是针对每个网格的,confidence 信息是针对每个 bounding box 的。所以,才会有图一Bounding boxes + confdence
和Class probability map这个的图形。
- 2 数据分析
每个 bounding box 的 class-specific confidence score为:
等式左边第一项就是每个网格预测的类别信息,第二、三项就是每个 bounding box 预测的 confidence。这个乘积预测了 box 属于某一类的概率,也有该 box 准确度的信息。
由上一部分可知,每个 grid 有 30 维,这 30 维中,8 维是回归 box 的坐标,2 维是 box的 confidence,还有 20 维是类别。(如图所示)
一幅图像的数据结构如下:
- 3 计算损失
这个损失函数中,只有当某个网格中有 object 的时候才对分类误差进行惩罚
- 4 预测
首先,对每一类预测得分设定阈值,去掉其低分的boxs,然后,将得分从高到低排列采用非极大值抑制对框进行选择。
选定概率最大的一个框,作为待选框,判断第二个与第一个的Iou值,若iou>0.5视为同一个物体,则将第二个置为0,若<0.5,则保留,如下图所示
遍历所有类别后,寻找得分为非零的框,进行画图,结果如下