Anchor box

对于主流的 one-stage(Faster r-cnn…) 或者是 tow-stage(SSD, YOLO…)的目标检测算法, 大多都采用了 anchor/prior box机制.

Anchor-box 的意义

在yolo-v1 中, 每个grid 输出两个bounding-box, 但是它们属于同一类别. 即每个 grid 只能预测一个物体. 当一个 grid 中有多个物体时, 直接回归的方法只能检测一个物体. 如下图, 当人和车的中心都落在紫色 grid 内时, yolo-v1 中只能检测一个.

anchor-box 是在faster r-cnn 中提出的,用来提供出候选区域. 通过给每一个 grid 预设一定长宽比的不同box, 每个box 预测一个物体. 上图中, 使用了两个anchor-box(黄色虚线框), 分配检测器的时候, 车和人分别分配一个与各自 ground-truth IOU 最大的 anchor-box. anchor-box 设置的越多, 每个grid就能检测更多不同形状的物体.

  • 提高物体的召回率. 以yolo-v1 为例, 不使用anchor-box, 每个 grid 只能检测一个物体. 势必漏检.
  • 降低学习难度. 因为每个anchor-box 的高度和宽度是已知的. 回归的仅仅是ground-truth与anchor-box的偏移量, 偏移量取值范围较小. 而回归绝对值, 网络收敛慢.