参考:
1
Anchor
- anchor是物体检测中的重要概念,通常是人为设计的一组框,作为分类和框回归的基准框。无论是单阶段检测器还是两阶段检测器,都使用了anchor。
- 两阶段检测器的第一阶段是采用RPN生成proposals,是对anchor进行分类和回归的过程。即anchor—proposals—detection bbox。
- 大部分单阶段检测器是直接对anchor进行分类和回归,即anchor—detection bbox。
- 常见的生成anchor的方式是滑窗,也就是首先定义k个特定尺寸和长宽比的anchor,然后在全图上以一定的步长滑动。这种方式在Faster RCNN和SSD和RetinaNet等方法中使用。
- 通过滑窗生成anchor虽简单但是很多缺点。
缺点一:anchor的尺度和长宽比需要预先定义,这是一个对性能影响很大的超参,而且对于不同数据集和方法需要单独调整。
缺点二:若预先设定的anchor的尺度和长宽比设置不合适,会导致recall不够高。
缺点三:若预先设定的anchor的尺度和长宽比设置不合适,会导致大部分的anchor都分布在背景区域,对proposal或者检测不会有任何正面作用。
缺点四:预先定义好的anchor形状不一定满足极端大小或者长宽比悬殊的物体。 - 综上这4个缺点,所以想要的是稀疏、且形状根据位置可变的anchor。
anchor的生成
- 通常使用4个数(x,y,w,h)来描述一个anchor。即中心点坐标和宽高。
- anchor的生成可以被分解为两个过程
过程一:anchor位置预测
过程二:anchor形状预测
位置预测
- 位置预测的目标是预测哪些区域应该作为中心点来生成anchor,是一个二分类问题,不同于RPN和segmentation的分类,这里不是预测每个点是前景还是背景,而是预测是不是物体的中心。
- 将整个feature map的区域分为物体中心区域、外围区域和忽略区域。将ground truth框的中心一小块对应在feature map上的区域标为物体中心区域,在训练的时候作为正样本,其余区域按照离中心的距离标记为忽略样本或者是负样本。
- 通过位置预测,可以筛选出一小部分区域作为anchor的候选中心点位置,使得anchor的数量降低。
- 在inference时,预测完位置后,可以采用masked conv替代普通的conv,只在有anchor的地方进行计算,可以加速。
形状预测
- 形状预测的目标是给定anchor中心点,预测最佳的长和宽,是回归问题。
- 以前预测长和宽的方法是:先算出target,即该中心点的anchor最优的w和h。然后用L1/L2/Smooth L1这类loss来监督。但是target不好计算。
- 改进办法:直接使用IOU监督来学习w和h。计算IOU是可导的操作,让网络自己去优化使得IOU最大。
- 对于以前常规的anchor,是计算它和所有ground truth的IOU,然后将它分配给IOU最大的ground truth。
- 对于上面提出的改进办法中,现在的anchor的w和h都是不确定的,所以不可能把所有可能的w和h遍历一遍然后求IOU的最大值。所以采用近似方法,采样一些常见的w和h值,例如实践发现采样9组w和h值就足够,而且发现结果对于采样的w和h的组数的超参是不敏感的。即表示:不管采样多少组,近似效果已经足够。
生成anchor
- 得到anchor位置和中心点的预测后,就可以生成anchor,此时生成的anchor是稀疏而且每个位置不一样。
- 采样生成的anchor取代滑动窗,平均召回率超过普通的RPN区域候选网络很多,代价仅仅是增加两个1 * 1卷积(这个代价是很小的)