对象检测存在的一个问题是每个格子只能检测出一个对象,如果想让一个格子检测出多个对象,可以使用anchor box
行人的中点和汽车的中点都落入到同一个格子中
anchor box的思路是:预先定义两个不同形状的anchor box,把预测结果和这两个anchor box关联起来
定义类别标签:
y=[pcbxbybhbwc1c2c3pcbxbybhbwc1c2c3]T 前面的pc,bx,by,bh,bw,c1,c2,c3(绿色方框标记的参数)是和anchor box 1关联的8个参数,后面的8个参数(橙色方框标记的元素)是和anchor box 2相关联
行人:pc=1,bx,by,bh,bw,c1=1,c2=0,c3=0
车子的边界框更像anchor box 2,(pc=1,bx,by,bh,bw,c1=0,c2=1,c3=0)
现在每个对象都分配到对象中点所在的格子中,以及分配到和对象形状交并比最高的anchor box中。然后观察哪个anchor box和实际边界框(编号1,红色框)的交并比更高
编号1对应同时有车和行人,编号3对应只有车:
:
anchor box是为了处理两个对象出现在同一个格子的情况,实践中这种情况很少发生,特别用的是19×19网格
怎么选择anchor box:
一般手工指定anchor box形状,可以选择5到10个anchor box形状,覆盖到想要检测的对象的各种形状
更高级的是使用k-平均算法,将两类对象形状聚类,选择最具有代表性的一组anchor box