3.5 Bounding Box预测(Bounding box predictions)

滑动窗口法的卷积实现算法效率很高,但不能输出最精准的边界框

输入图像是100×100的,用3×3网格,实际实现时会用更精细的网格(19×19)。使用图像分类和定位算法

编号1什么也没有,左上格子的标签向量yy[0 ? ? ? ? ? ? ?]\begin{bmatrix}0\ ?\ ?\ ?\ ?\ ?\ ?\ ? \end{bmatrix}。其他什么也没有的格子都一样

图中有两个对象,YOLO算法做的是取两个对象的中点,将对象分配给包含对象中点的格子。即使中心格子(编号5)同时有两辆车的一部分,分类标签yy也为y=[0 ? ? ? ? ? ? ?]y= \begin{bmatrix}0\ ?\ ?\ ?\ ?\ ?\ ?\ ? \end{bmatrix}。编号4目标标签y=[1 bx by bh bw 0 1 0]y= \begin{bmatrix} 1\ b_{x}\ b_{y}\ b_{h}\ b_{w}\ 0\ 1\ 0 \end{bmatrix},编号6类似

3×3中9个格子都对应一个8维输出目标向量yy,其中一些值可以是dont care-s(即?)所以总的目标输出尺寸就是3×3×8

如果要训练一个输入为100×100×3的神经网络,输入图像通过普通的卷积网络,卷积层,最大池化层等等,最后映射到一个3×3×8输出尺寸。然后用反向传播训练神经网络,将任意输入xx映射到输出向量yy

这个算法的优点在于神经网络可以输出精确的边界框,测试的时候有要做的是喂入输入图像xx,然后跑正向传播,直到得到输出yy。然后3×3位置对应的9个输出,只要每个格子中对象数目没有超过1个,这个算法应该是没问题的。但实践中会使用更精细的19×19网格,输出就是19×19×8,多个对象分配到同一个格子得概率就小得多

即使对象可以横跨多个格子,也只会被分配到9个格子其中之一,或者19×19网络的其中一个格子。在19×19网格中,两个对象的中点(图中蓝色点所示)处于同一个格子的概率就会更低。

优点:

  • 显式地输出边界框坐标,可以具有任意宽高比,并且能输出更精确的坐标,不会受到滑动窗口分类器的步长大小限制

  • 并没有在3×3网格上跑9次算法,而是单次卷积实现,但在处理这3×3计算中很多计算步骤是共享的,所以这个算法效率很高

  • 因为是卷积实现,运行速度非常快,可以达到实时识别

如何编码这些边界框bxb_{x}byb_{y}bhb_{h}bwb_{w}

YOLO算法中,编号1约定左上点是(0,0)(0,0),右下点是(1,1)(1,1),橙色中点的位置bxb_{x}大概是0.4,byb_{y}大概是0.3,bwb_{w}是0.9,bhb_{h}是0.5。bxb_{x}byb_{y}bhb_{h}bwb_{w}单位是相对于格子尺寸的比例,所以bxb_{x}byb_{y}必须在0和1之间,因为从定义上看,橙色点位于对象分配到格子的范围内,如果它不在0和1之间,即它在方块外,那么这个对象就应该分配到另一个格子上。这个值(bhb_{h}bwb_{w})可能会大于1,特别是如果有一辆汽车的边界框是这样的(编号3所示),那么边界框的宽度和高度有可能大于1

Last updated