目标检测中的Anchor Boxes

Why we use anchor box?

目标检测中的Anchor Boxes_第1张图片
 由于目标检测中的每个grid cell只能预测一个对象,但当两个对象的中点落在一个格子中时(如图),不得不从中选出一个对象,导致一些对象无法检测出来,这时就要用到anchor box。
 假设我们要预测3种类别:人,汽车,摩托。当我们没用anchor box时,输出如上图y所示。
这里假设我们预先定义了两个anchor box:
目标检测中的Anchor Boxes_第2张图片
 输出将变成如下形式,即包含两个anchor box的信息:
目标检测中的Anchor Boxes_第3张图片
 那么使用哪个anchor box进行预测呢,是根据目标对象与每个anchor box的IOU,选择IOU最大的anchor box来负责预测。

How to choose anchor box?

  1. 一般手工指定anchor box形状,根据要检测的对象,指定有针对性地anchor box,使其尽可能覆盖到不同形状。
  2. 使用K-means在数据集中聚类出anchor box。

Deficiency?

 假若同一个格子中有三个对象,这种情况算法处理不好,你希望这种情况不会发生,但如果真的发生了,这个算法并没有很好的处理办法,对于这种情况,我们就引入一些打破僵局的默认手段。还有这种情况,两个对象都分配到一个格子中,而且它们的 anchor box 形状也一样,这是算法处理不好的另一种情况,你需要引入一些打破僵局的默认手段,专门处理这种情况,希望你的数据集里不会出现这种情况,其实出现的情况不多,所以对性能的影响应该不会很大。 我们建立 anchor box 这个概念,是为了处理两个对象出现在同一个格子的情况,实践中这种情况很少发生,特别是如果你用的是 19×19 网格而不是3×3 的网格,两个对象中点处于 361 个格子中同一个格子的概率很低,确实会出现,但出现频率不高。也许设立 anchor box 的好处在于 anchor box 能让你的学习算法能够更有征对性,特别是如果你的数据集有一些很高很瘦的对象,比如说行人,还有像汽车这样很宽的对象,这样你的算法就能更有针对性的处理,这样有一些输出单元可以针对检测很宽很胖的对象,比如说车子,然后输出一些单元,可以针对检测很高很瘦的对象,比如说行人。

参考:Andrew Ng 的教学视频

你可能感兴趣的:(目标检测,深度学习,图像识别)