《Indices Matter(IndexNet):Learning to Index for Deep Image Matting》论文笔记
参考代码:IndexNet
1. 概述
导读:这篇文章是从采样的角度去思考其对matting(segmentation)的影响,文章发现使用indices-guided的pooling/unpooling操作能在生成结果的边缘上比双线性插值类方法获取细节更加精细的结果,并且现有的上采样操作理论上都可以与index function思想统一(图像差值可以看作是一种特殊的index function,从而转换到mask,矩阵运算的形式表示)。在此基础上文章将indices作为特征图对应的功能,从而在训练的过程中使用数据(数据驱动与自适应)去学习index过程(上采样与下采样),得到一种index-guided的编解码网络结构。由于文章的改进主要是在index采样部分,这就使得文章的方法具有较好的可移植性。文章的方法在使用MobileNetv2作为其backbone基础上比相同条件下使用VGG-16作为backbone做matting得到的性能高16.1%。
一般在分割网络中对于上采样是使用bilinear的插值方式得到的,其原理也是很简单的:一个区域附近的类别是近似的,而使用unpooling操作是一种稀疏的表达,但是unpooling操作却可以产生更加清晰的边缘,这是bilinear方法不能比拟的。文章指出导致这样问题的原就是出在indices这个过程上的。下图展示的就是使用bilinear的方法与文章的方法在边缘细节上的对比:
那么基于bilinear和unpooling的方法它们都有各自的优点和不足,那么可不可以将两者的优点进行结合?这也是这篇文章解决的事情,文章将indices function使用CNN网络进行建模从而实现上采样的过程,从而使得upsampling的过程可以依据数据的不同而进行动态变化(数据驱动与自适应),学习边界与纹理信息。
2. 上采样与index function的统一
在窗口大小为
k
∗
k
k*k
k∗k,
X
∈
R
k
∗
k
X\in R^{k*k}
X∈Rk∗k数据中上采样可以描述为:
I
m
a
x
(
x
)
=
f
(
x
=
m
a
x
(
x
)
)
,
x
∈
X
I_{max}(x)=f(x=max(x)),x\in X
Imax(x)=f(x=max(x)),x∈X
对应的均值上采样(看作是邻近差值):
I
a
v
g
(
x
)
=
f
(
x
∈
X
)
I_{avg}(x)=f(x\in X)
Iavg(x)=f(x∈X)
对于bilinear和deconv构成的上采样可以看作是index的基础上添加了一一个权重系数
W
W
W,其在deconv的时候是通过学习得到的,而在bilinear的过程中其是被设置为固定的值。
I
b
i
l
i
n
e
a
r
/
d
e
c
o
n
v
(
x
)
=
W
⊗
f
(
x
∈
X
)
I_{bilinear/deconv}(x)=W\otimes f(x\in X)
Ibilinear/deconv(x)=W⊗f(x∈X)
而在一片文章中引入的PS操作(深究的同学请对照原文应用),其上采样过程可以描述为:
I
p
s
l
=
f
(
x
=
z
l
)
,
l
=
1
,
…
,
r
2
I_{ps}^l=f(x=z_l),l=1,\dots,r^2
Ipsl=f(x=zl),l=1,…,r2
经过上面的分析之后文章从理论上证实了上次样是可以通过学习的方式获取index function用于自适应地捕获局域空间信息。
Index-Guided编解码框架
3. 方法设计
在这篇文章中默认的上下采样的stride设置为2。其结构可以参考下图:
3.1 上下采样的IndexNet
文中指出index问题可以转换为mask问题,因而就使得可以使用index map去实现上下采样操作了。文章中IndexNet由预先定义的index block和后面的归一化(**)层组成。这里的index block文章是使用卷积操作来实现的,下面是文章给出的两种变体:HINs(holistic index networks)和DINs(depthwise index networks),见下图所示:
对于index block之后的归一化层,文章对于编码器和解码器部分做了不同的操作,在编码器阶段使用softmax函数,而在解码器阶段使用的是sigmoid函数,对此给出的解释是保证下采样中梯度的连续性。
按照文章的思路可以将上下采样的过程描述为与index map在一个区域上做运算的过程,那么它们可以描述为:
- 1)Indexed Pooling(IP):对于一个给定的采样区域 E ∈ R k ∗ k E\in R^{k*k} E∈Rk∗k,那么它在其操作就是在对应的位置上与index map( I ( x ) I(x) I(x))做element-wise乘积运算,可以描述为: I P = ∑ x ∈ E I ( x ) x IP=\sum_{x\in E}I(x)x IP=∑x∈EI(x)x;
- 2)Indexed Upsampling(IU):对于上采样区域 d ∈ R 1 ∗ 1 d\in R^{1*1} d∈R1∗1(会经过邻近差值保持与对应参与运算的index map相同尺寸,从而得到数据 D D D),它与对应的index map进行运算的过程描述为: I U = I ⊗ D IU=I\otimes D IU=I⊗D;
3.2 HINs
文章中将对应的index block描述为几个卷积组合的形式,见下图所示:
上面的运算过程可以看出是一系列矩阵操作的线性运算,在此基础上引入非线性操作,从而得到对应的非线性版本:
3.3 DINs
文章提出的DINs首先是一种O2O(one-to-one)的形式,既是使用了分组卷积使其在运算的时候特征图分离,与HINs类似的也可以加入下图中的紫色部分构成非线性映射,其结构见下图所示:
除了上面提到的O2O形式还有一种形式是M2O(many-to-one),也就是上图中的
N
=
1
N=1
N=1的情况。
将文章提出的HINs和DINs进行比较可以得出:
- 1)DINs相比HINs拥有更加强的特征表达能力,因而就可以获取更多局部的复杂信息,但存在过拟合的风险;
- 2)HINs由于是使用了所有的channels,因而在特征融合的时候具有更加便利的特性;
4. 实验结果
Composition-1k结果:
alphamatting结果: