一文读懂anchor-base和anchor-free

1. 从Faster-RCNN看Anchor

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

  1. 图片输入到Faster-RCNN中之后首先经过一个vgg网络得到特征图,特征图会被共享给RPN和后面的stage-two,这里我们探讨anchor就不需要关心stage-two。顺便说一下特征图的深度是512d。
  2. 到达RPN先做一个卷积(不改变尺寸),然后有两条支路,一边深度是2×k(anchor数量,一般是9),也就是说每个anchor有两个分类;另一条是4×k,对anchor的位置做调整:
    一文读懂anchor-base和anchor-free_第1张图片

Anchor到底与网络输出如何对应

特征图中每个点的k个分类特征与k个回归特征,与k个anchor逐个对应即可,这实际是一种“人为设置的逻辑映射”。当然,也可以不这样设置,但是无论如何都需要保证在训练和测试过程中映射方式必须一致。注意,特征图和后面分类回归的输出矩阵是一样的尺寸,只是channel数量不一样。
一文读懂anchor-base和anchor-free_第2张图片
此处参考:一文读懂Faster RCNN

从另一个角度理解Anchor

Faster-RCNN把anchor解释为预选框,后面的分类和定位都是基于anchor来做的,其中定位就是对anchor box做一个线性变换
也可以将anchor box 理解为连接预测框和GT的桥梁。对于每个anchor,有四个代表位置信息的预测值,在yolo v3中这四个值分别是对anchor中心点的偏移量和宽高缩放量。根据anchor坐标和这四个值就可以计算出预测框的位置,然后用预测框和GT做损失计算,这种理解更符合“学习”的思维方式:正向传播、计算损失、反向传播、梯度下降、正向传播。。。

Anchor-free
一文读懂anchor-base和anchor-free_第3张图片

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

历史渊源

anchor-free并不是一个多么新颖的设计,事实上在2015年yolo-v1和dense-net都是anchor-free的。其中dense-net考虑更充分,效果也更好。anchor-free每个点预测的结果有限,一个或两个,所以很容易漏检,对小目标也不友好,因为最后一层的特征图感受野是很大的。反观anchor-base有9个大小形状各异的预选框能够避免这种问题。所以dense加入了上采样的操作,融合各阶段的特征,而不像yolo只有最后一层。这个设计很超前,就是FPN的前身,现在几乎所有网络都会用到FPN。

你可能感兴趣的:(算法笔记)