5. Bounding Box预测
这一部分主要讨论看怎么能得到更为精准的边界框。
在滑动窗口算法中,通过取离散的位置集合然后再上面跑分类器,在有的情况下这些边界框没有一个能完美匹配汽车位置,甚至最合适的边界框可能并不是正方形而是长方形,怎么让边界框的输出更为精准?
其中一个能得到更精准的边界框的算法是YOLO算法,YOLO算法[1]的意思是你只看一次。比如你的输入图像是100*100的,然后再图像上放一个网格,为了介绍起来简单一些,这里用3*3网格,实际实现时会用更精细的网格,可能19*19,基本思路是使用图像分类和定位算法,然后将算法应用到9个格子上。更具体一点,你需要如下定义训练标签:
对于9个格子中的每一个,指定一个标签y,y是8维向量 [pc,bx,by,bh,bw,c1,c2,c3] ,含义和之前讲述的目标定位是一样的,所以最终图像输出的标签尺寸是3*3*8,如果你现在要训练一个输入图像是100*100*3的图像,然后你有一个普通卷积网络,最后就映射到一个3*3*8的输出尺寸,这类算法的优点是可以输出精确的边界框,所以测试的时候你做的是喂入输入图像X,然后经过正向传播,得出输出y,然后对于这里3*3位置对应的9个输出就反应对应位置是否包含对象,以及对象的具体位置和类型。只要每个区域中对象个数不超过一个,这个算法应该是没问题的。在这里举例用的是3*3的网格,但是在实际应用中会选用更精细的19*19网格,所以输出结果就是19*19*8,这样的网络精细的多,多个对象分配到同一个网格中的概率也就小很多。首先,这个算法和图像分类和定位算法很类似,同样输出了对象的具体问题,也就不会受到滑动窗口分类器的步长大小限制;其次,这是一个卷积实现并没有在3*3的网格上跑9次算法,这是单次卷积实现,共享了很多计算步骤,所以算法的计算效率很高。YOLO算法几乎可以达到实时识别的效率
怎么指定边界框?
6.交并比(IOU)
在对象检测中,希望能同时定位对象,如果实际是红色边框,你的算法给出紫色的边框,那么如何判断算法给出结果的好坏呢?所以交并比(Intersection over union)函数做的是,计算两个边界框交集和并集之比,两个边界框的并集为绿色斜线标识区域,交集是黄色斜线标识区域,那么IOU就是交集的面积除以并集的面积,一般约定在计算机检测任务中 IOU≥0.5 就说检测正确,如果预测器和实际边界框完美重叠 IOU=1 ,如果希望更严格一点,你可以调大IOU的阈值。下一部分讨论的非最大抑制可以让YOLO算法的输出效果更好。
7.非极大值抑制
到目前为止我们学习到的对象检测中的一个问题是,算法可能对同一个对象作出多次检测,所以算法对某个对象不是检测出一次而是检测出多次。非最大值抑制方法可以确保算法对每个对象只检出一次。