Pooling Revisited: Your Receptive Field is Suboptimal
作为CVPR 2022中一篇探索新网络模块的文章,本文对于新网络的设计,特别是处理high-level图像任务的模型设计还是很有启发的
首先作者开局便指出,由于当前的模型结构参数大多是手工设置的,因此是次优的。这里的次优其实主要体现在 因为模型的卷积(kernel size/stride),以及pooling是事先预制的,因此在每一层中模型的感受野也是被固定的,因此模型的通用性被限制了(mark一下,这里后面会详细解释)。为此作者提出了一种自适应调整感受野大小和形状的方式,即自适应的pooling,称之为DynOPool。尽管前人也提出过许多自适应感受野的方式,但是作者另辟蹊径从更简单的pooling入手,使得本方法在实施时有着更大的优势。并且由于DynOPool的自适应感受野调整,因此卷积的stride可以不需要再手动调整,直接全为1即可。
为了搞清楚作者为什么提出DynOPool,就要先搞明白当前的感受野策略存在的局限性:
1、不同数据集固有的信息不对称性。不同的数据集的信息分布在不同空间方向上是有偏向的,而传统网络对于不同方向的感受野都是一样的,这就导致该关注的地方关注不足,不该关注的地方过度关注。作者给出了一个很极端的例子:假如我们要提取条形码图像数据的信息,那么显然沿着竖直方向的感受野大小是没有意义的,因为数值方向的信息都是重复的(可以将其理解为这个方向上信息密度极低),因此我们只有增加水平方向的感受野才有意义。
为了验证这个猜想,作者给出了一个toy dataset例子,作者将cifar-10的数据数值方向拉伸一倍,然后再将其裁剪成
64
×
64
64 \times 64
64×64,获得一个新数据集,然后用DynOPool 版本的vgg对其进行分类,得打如下的结果:
其中H和W是不同网络层的高宽的感受野大小。可以看到由于高度被拉长了,因此理论上竖直方向的信息密度变低了,所以为了用最小的感受野抓住更多的信息,网络自适应的增大了水平方向的感受野。
2、不同数据集的信息密度不同。试想一下一张模糊的图像和一张密密麻麻有很多目标的图像,如果我们想理解第一张图像那么显然我们要观察更大的区域,而对于第二张图像我们则需要仔细的观察,因为任何一块小区域都包含丰富的信息。为了验证这个猜想,作者又构建了两个toy dataset:1、重复拼接图像,得到cifar-tile数据,2、放大图像,得到cifar-large数据,实验结果如下:
可以看到,对于cifar-tile数据集,由于每个小patch都包含着丰富且独立的信息,因此开始时网络的感受野非常小(这也反驳了一种naive method,即简单扩大感受野可以在任何数据集上提高网络性能);而在cifar-large数据集上,由于信息密度低,所以网络开始时为了聚合更大范围的信息而扩大感受野。
原理上分析完了,下面再来说如何实施的:
假设某一层网络的输入特征图
x
i
n
∈
R
H
i
n
×
W
i
n
x_{in} \in R^{H_{in} \times W_{in}}
xin∈RHin×Win,输出特征图
x
o
u
t
∈
R
H
o
u
t
×
W
o
u
t
x_{out} \in R^{H_{out} \times W_{out}}
xout∈RHout×Wout,DynOPool通过一个可训练的尺度因此来控制以上过程,即:
其中是取整计算。为了便于统一,作者将输入特征图的左上角坐标定义为(-1,-1),右下角坐标定义为(1,1),之后
x
i
n
x_{in}
xin依照输出特征被分割成若干个patch,每个patch的
s
i
z
e
=
2
H
o
u
t
×
2
W
o
u
t
size=\frac{2}{H_{out}} \times \frac{2}{W_{out}}
size=Hout2×Wout2。之后作者定义每个patch的中心坐标为
p
=
(
p
h
,
p
w
)
p = (p_h,p_w)
p=(ph,pw),之后作者在patch中上下左右寻找了四个位置点,分别是:
这里作者使用了双三次差值对
q
q
q的坐标取整。
有了patch中的四个坐标后,作者要对其进行特征聚合,文中作者选的是max-pooling,但是作者也指出,其他pooling可以达到同样的效果。
方法流程介绍完毕,然而在优化时现在还面对两个问题:
1、(1)式中由于存在取整操作,无法梯度回传,为此作者提出了一种替代方法:
其中
s
g
(
⋅
)
sg(\cdot)
sg(⋅)是梯度停止操作。由此前向计算时
H
o
u
t
H_{out}
Hout和
W
o
u
t
W_{out}
Wout的值由取整后的结果给出,反向更新时由第二项进行梯度回传更新
r
r
r。
2、由(2)式可以看出,
δ
h
\delta_h
δh和
δ
w
\delta_w
δw由
r
r
r给出,因此反向优化时我们推断出其梯度为:
这就出现一个问题,但
r
r
r非常小时,
δ
h
\delta_h
δh和
δ
w
\delta_w
δw的梯度会变得非常不稳定,阻碍优化,为此作者提出了一个重参的方法,即用
α
\alpha
α来代替
r
r
r:由此提升网络稳定性。
以上过程可以表示为:
最后再让我们来看一下优化目标。本文提出的自适应pooling除了任务专有loss,还有一个特殊的loss,即:
这是因为在实际操作中不一定每一层都
r
<
1
r<1
r<1,在某些层需要
r
>
1
r>1
r>1,然而为了避免带来太多的计算量,作者通过(7)式来约束最终的网络复杂度。其实这里也给了我们一个启发,虽然本文的所有例子都是基于分类,然而由于
r
>
1
r>1
r>1也是可行的,因此本方法实际上也可以用于如 图像修复,超分,分割,检测 等底层视觉任务。
最后是实验部分,这部分主要是不同骨干网络的 raw版本 和 DynOPool版本 性能上以及计算量上的比较,我就不再进行详细说明了,有兴趣的可以直接去看原文: