3.5 Bounding box预测
Bounding box predictions
YOLO algorithm(you only look once) —— 更精确的边界框检测算法。
假设输入的图像大小为100x100,将图像划分为等大的方块,例如19x19的网格,为了简单起见,以3x3的网格举例。每个格子对应一个标签y,如3.1所述,每个y都是8维的,形式如y = [pc,bx,by,bh,bw,c1,c2,c3]。那么该图像3x3的网格对应的标签Y的维度是3x3x8。
每个格子(从左往右,从上往下)的标签示意:
1、格子1,没有对象。pc = 0 对应y = [0,?,?,?,?,?,?,?]
2、格子4,有对象。pc = 1 对应y = [1,bx,by,bh,bw,0,1,0]。
如何判断格子是否有对象?边界框的中点落在格子总,表明该格子内有对象,并且中点只会落在一个格子中,即一个对象只会对应应该格子,即使其边界框会跨越多个格子。
由于算法引入了格子,边界框对应的四元素bx,by,bh,bw,其计算尺度也是相应于对应格子的位置即尺寸。
YOLO与图像分类和定位算法非常像,首先它显式地输出边界框坐标,可以具有任意宽高比,并且能输出更精确的坐标,不会受到滑动窗口分类器的步长大小限制。其次,这是一个卷积实现,并没有在3×3网格上跑9次算法,或者,如果用的是19×19的网格,19平方是361次,所以不需要让同一个算法跑361次。相反,这是单次卷积实现,但使用了一个卷积网络,有很多共享计算步骤,在处理这3×3计算中很多计算步骤是共享的,所以YOLO效率很高(real time)。 YOLO是一个卷积实现,实际上它的运行速度非常快,可以达到实时识别。
3.6 交并比
Intersection over union
在对象检测任务中,希望能够同时定位对象,假设预测边界框是紫色的边界框,如何判断结果是好还是坏?可以用交并比来衡量。
交并比(loU)函数做的是计算两个边界框交集和并集之比。两个边界框的并集就是属于包含两个边界框区域(绿色阴影表示区域),而交集就是这个比较小的区域(橙色阴影表示区域),那么交并比就是交集的大小,这个橙色阴影面积,然后除以绿色阴影的并集面积。
一般约定,在计算机检测任务中,如果loU≥0.5,则检测正确,如果预测器和实际边界框完美重叠,loU就是1,因为交集就等于并集。但一般来说只要loU≥0.5,那么结果是可以接受的,看起来还可以。一般约定,0.5是阈值,用来判断预测的边界框是否正确。IoU设定的越高,越严格,相应的边界框越精确。
3.7 非极大值抑制
Non-max suppression
理论上这辆车只有一个中点,所以它应该只被分配到一个格子里,左边的车子也只有一个中点,所以理论上应该只有一个格子做出有车的预测。
实践中当运行对象分类和定位算法时,对于每个格子都运行一次,所以这个格子(编号1)可能会认为这辆车中点应该在格子内部,这格子(编号2、3)也会这么认为。对于左边的车子也一样。
当运行算法的时候,最后可能会对同一个对象做出多次检测,所以非极大值抑制做的就是清理这些检测结果。这样一辆车只检测一次,而不是每辆车都触发多次检测。 非极大值抑制,非最大值意味着只输出概率最大的分类结果,但抑制很接近(根据loU值),但不是最大的其他预测结果,所以这方法叫做非极大值抑制。
算法流程:
1、针对每个格子的预测输出,舍弃pc小于0.6的边界框。
2、选择剩下边界框对应概率pc最大的,将其作为一个预测结果。
3、舍弃与2中边界框交并比大于等于0.5的边界框(抑制)。
4、重复2-3,知道所有边界框都被处理。
当同时检测多种对象时,需要独立进行多次非极大值抑制。