一文读懂anchor-base和anchor-free

Anchor
Faster-RCNN相对于Fast-RCNN的一个改进是引入了RPN网络,RPN用于区域推荐,替换了此前的SS算法使得网络在整体上更加的CNN化。那么RPN是怎么进行区域推荐的?
简单来说RPN以一种类似枚举的方式列举出数万个矩形框,然后用卷积+softmax将这些矩形框分为前景和背景两类,同时对矩形框的边界进行回归修正,而这些矩形框就是anchor。接下来看看具体怎么做。

  1. 图片输入到Faster-RCNN中之后首先经过一个vgg网络得到特征图,特征图会被共享给RPN和后面的stage-two,这里我们探讨anchor就不需要关心stage-two。顺便说一下特征图的深度是256d。
  2. 到达RPN先做一个卷积(不改变尺寸),然后有两条支路,一边深度是2×k(anchor数量,一般是9),一边是4×k。意思是:
    每一个特征图上的点p对应了k个anchor,本质上这k个anchor就是原图上以P(由p映射过来)为中心的9个子图,这9个子图的特征就包含在256维的特征向量里,然后一边降为到2k对应分类(经过了softmax),一边降维到4k对应边界回归。
    一文读懂anchor-base和anchor-free

这里有一个问题!

这9个子图是怎么做的卷积?当然你会说原图统一做了卷积生成了特征图,这9个子图映射过去,但是这个映射过程在哪里?个人认为这个对应是通过损失函数联系的。试想一下点p处是一个18维的向量,按顺序分成9份,每一份是前景背景的预测值(0~1),然而他们的真值在哪里?答案就是 这9个按顺序排列的anchor对应的真值(0.7以上正,0.3以下负)。目前的理解,或许不对。
不管怎么样,根据下图,anchor-base的核心机制是:
在一个特征图中,每一个点对应的这个256维德向量包含了k个anchor的特征,这个特征会被送到softmax里进行分类,同时对边界回归。
一文读懂anchor-base和anchor-free
Anchor-free
一文读懂anchor-base和anchor-free

以yolo-v1为例,最后输出一个7×7的网络,然后每个网格预测2个结果,注意不管这里预测多少个结果,其分类只有一个。换句话说每个网格只会负责一个分类,至于边界框可以有多个。
所以,对于anchor-free而言,在特征图中,每个网格负责预测出一个分类,而anchor-base的网络,在特征图中每个节点存储的是以该节点为中心的数个子图的特征,这些特征分别进行分类。本质上来讲:anchor-free根据网格代表的那块图像的特征计算出了分类,而anchor-base则根据周围预设的子图的特征计算分类,而达到这点的手段就是groundtruth的设置规则。
在anchor-free中,物体落到哪个网格,哪个网格就是正样本,其余都是负样本。anchor-base则计算每个anchor和gt的IoU,超过多少阈值就算正。