双边滤波思想在CNN中的应用----Learning Sparse High Dimensional Filters: Image Filtering, Dense CRFs and Bilateral Neural Networks
这篇文章 [1] 主要采用 permutoheral lattice空间,将稀疏的高维滤波器中(例如双边滤波器)的固定的高斯核权值,变成数据驱动的可学习权重,从而嵌入到一个端到端的CNN网络中。考虑到信号(图像)在高维空间的稀疏性,为了加速的目的,文中采用了permutohedral lattice结构[2] [3],提出了文中[1] 所称的"bilateral convolution layer", 实现了一个可学习版的permutohedral lattice convolution过程(splat signal to permutohedral lattices–>convolve over these permutohedral lattices–>slice the blurred signal to original space)。为了内容完整性,接下来按下面内容来展开这篇文章的主要内容:
- 分析 permutohedral lattice 空间中 permutohedral lattice convolution的主要原理
- 分析文 [1] 中 bilateral neural networks 的基本模块,bilateral convolution layer
- 分析 bilateral convolution layer 与 CRF 的联系
0. 符号说明
为了阐述的方便,符号做如下统一说明:
-
f ∈ R n × c f\in R^{n \times c} f∈Rn×c:表示某特征图(如果类似图像的二维特征,已经按照行列展开成 n n n元素), n n n表示像素数, c c c表示特征图通道数。(注意:这个特征图可以是图像本身或者CNN的隐藏层特征)
-
l = ( x , y , r , g , b ) ∈ R 5 l=(x,y,r,g,b)\in R^5 l=(x,y,r,g,b)∈R5:表示 permutohedral lattice 空间 [2][3]的特征(或坐标),则每个像素点 i i i,关联一个 lattice空间坐标 ( x i , y i , r i , g i , b i ) (x_i,y_i,r_i,g_i,b_i) (xi,yi,ri,gi,bi),其中 x i , y i x_i,y_i xi,yi 分别表示像素 i i i的像素坐标, r i , g i , b i r_i,g_i,b_i ri,gi,bi 则是像素点 i i i 的RGB值。
注意:特征图 f ∈ R n × c f\in R^{n\times c} f∈Rn×c 的每个像素点 i i i,可以计算它在 lattice 空间的坐标 ( x i , y i , r i , g i , b i ) (x_i,y_i,r_i,g_i,b_i) (xi,yi,ri,gi,bi)(可以根据该特征图的像素点与原始RGB像素点的对应关系,例如将原始RGB下采样到 f f f的空间分辨率大小,计算 f f f的每个像素点的lattice空间坐标)。易见 f f f 所有像素点对应的lattice空间坐标集合,在lattice空间( R 5 R^5 R5)中一般是非常稀疏的。因此,特征图 f f f 也可以看成是嵌入在lattice空间 R 5 R^5 R5的某个稀疏子集上的信号。(文[1]中 bilateral convolution layer 中的convolution就是在这个lattice 空间 R 5 R^5 R5中,考虑局部邻域,进行卷积的;那么易见这个卷积相比与通常的空间域卷积,同时考虑了空间域和 R G B RGB RGB域的相邻关系)。
1. permutohedral lattice convolution
为了更好的理解文[1]中的“bilateral convolution layer”,首先分析 permutohedral lattice convolution [2][3] 的主要原理,它主要由三个步骤构成,即 splatting,convolution,slicing(如下图所示):
上图以二维lattice空间
R
2
R^2
R2为例,图中的"三角形面片"平铺了整个二维lattice空间
R
2
R^2
R2,在高维空间中则为"多面体",一般称为单形(simplex),为了简单记忆,下面的内容叙述中,把这种单形记作"lattice cell"。
splatting: 这个处理过程就是把每个像素点 i i i 的信号值扩散到包含它的lattice cell的格点(lattice)上。以上图中的左图为例, △ B C D \triangle BCD △BCD 构成一个lattice cell。假设特征图 f f f 的像素点 i i i,具有特征值 f i ∈ R c f_i \in R^c fi∈Rc, 其对应lattice 空间中的点 A A A。令 ( t A B , t A C , t A D ) (t_{AB}, t_{AC}, t_{AD}) (tAB,tAC,tAD) 表示 A A A 在lattice cell △ B C D \triangle BCD △BCD中的barycentric 坐标(参考 [2][3]),则 i i i 点的信号扩散到latttice点 B , C , D B,C,D B,C,D 的值分别为, t A B ⋅ f i , t A C ⋅ f i , t A D ⋅ f i t_{AB}\cdot f_i,t_{AC}\cdot f_i, t_{AD}\cdot f_i tAB⋅fi,tAC⋅fi,tAD⋅fi。这样经过splatting之后,像素点的信号集中在了一个稀疏的lattice点点集上(例如上图左图中的 B , C , D B,C,D B,C,D点)。
convolution: 在将特征图 f f f 嵌入到 lattice 空间之后(也即splatting之后),像素点的特征值(即信号)就嵌入到了稀疏的lattice点点集上。因为lattice空间由规则的lattice cells平铺而成,根据permutohedral lattice 点的特性,只需在固定的 d + 1 d+1 d+1方向寻找相邻 lattice 点(可以参考[2][3]),如果 lattice 空间的维度为 d d d。因此可以像在欧式空间中为网格点寻找相邻点一样简单。在找到相邻点之后,convolution就简单了。通常的双边滤波中使用高斯权重。(而文[1]中的 bilateral convolution layer 则改高斯权重为可学习的权重,即实现更一般的滤波器)
slicing: 这过程相当于splatting的逆过程,需要把集中在lattice空间中稀疏lattice点点集上的信号,转换到原始特征图 f f f 所在的空间。具体地,如上图中的右图所示,假设lattice点 T T T,对应原始特征图 f f f 的像素点 j j j(如果没有对应点,相当于插值得到一个新的像素点,因为可以根据实际需要,使得slicing之后特征图与原始特征图的像素点个数不同)。令 T T T 点在lattice cell △ P S Q \triangle PSQ △PSQ的barycentric 坐标为 ( t T P , t T S , t T Q ) (t_{TP},t_{TS},t_{TQ}) (tTP,tTS,tTQ), P , S , Q P,S,Q P,S,Q点上的信号值分别为 f P , f S , f Q ∈ R c f_{P},f_{S},f_{Q}\in R^c fP,fS,fQ∈Rc,则原始特征图空间像素点 j j j(对应lattice空间中的 T T T)的信号值为 f ~ j : = t T P ⋅ f P + t T S ⋅ f S + t T Q ⋅ f Q \tilde{f}_j:=t_{TP}\cdot f_P+t_{TS}\cdot f_S+t_{TQ}\cdot f_Q f~j:=tTP⋅fP+tTS⋅fS+tTQ⋅fQ,即滤波之后像素点 j j j 的特征值。
注意:splatting 和 slicing过程相当于实现在两个不同空间,进行信号插值;同时slicing之后(也即完整滤波之后)的特征图 f ~ ∈ R n ~ × c \tilde{f}\in R^{\tilde{n}\times c} f~∈Rn~×c 的像素点个数可以与原始特征图 f ∈ R n × c f\in R^{n\times c} f∈Rn×c 的像素点个数不同,即可以有 n ~ ≠ n \tilde{n}\neq n n~=n。这样也使得 permutohedral lattice convolution 对输入特征图和输出特征图的分辨率比较灵活。
2. bilateral neural networks主要模块 bilateral convolution layer
文 [1] 中的 bilateral neural network设计较简单,主要体现在引入了bilateral convolution layer,原则上这个层可以替换CNN中通常的convolution层。下面主要介绍 bilateral convolution layer 的具体实现原理:
总体上来说,文 [1] 中的 bilateral convolution layer 主要是改进了permutohedral lattice convolution中convolution的高斯权重,将其改为更一般的可学习权重核。具体地,
- 1.计算卷积的邻域:
假设lattice空间的维度为 d d d, A A A为任意一个lattice点,则 A A A的 s s s-邻域总共有 t : = ( s + 1 ) d + 1 − s d + 1 t:=(s+1)^{d+1} - s^{d+1} t:=(s+1)d+1−sd+1个格点(包括 A A A),这个可以由 permutohedral lattice [2][3] 的构造过程可知(例如取 s = 2 , d = 2 s=2,d=2 s=2,d=2, 则任意一个lattice点有 3 3 − 2 3 = 19 3^3-2^3=19 33−23=19 个 2 2 2-邻域点,对应上图中间图中的Gauss Filter的19个权值,也即那19个彩色圆圈)。 - 2.构造邻域矩阵:
-假设特征图 f ∈ R n × c f\in R^{n\times c} f∈Rn×c, 根据其每个像素的lattice点坐标 l ∈ R 5 l\in R^5 l∈R5,嵌入到lattice 空间之后(即 splatting 之后),总共对应 m m m 个lattice点。不失一般性,令 c = 1 c=1 c=1,也即特征图 f f f 每个像素点具有标量特征。用矩阵 K ∈ R m × t K\in R^{m\times t} K∈Rm×t 表示这 m m m 个lattice点的邻域矩阵, K K K的每个元素存放的是相应的相邻lattice点上的信号(即 splatting 之后lattice点上的信号值)。 - 3.学习lattice空间的卷积核参数:
令 B ∈ R t × 1 B\in R^{t\times 1} B∈Rt×1表示待学习的卷积核参数,那么经过 B B B 滤波之后的信号值
f l : = K ⋅ B , (1) f_{l}:=K\cdot B\tag{1}, fl:=K⋅B,(1) 这里 “ ⋅ \cdot ⋅” 表示矩阵乘法。(注意 B B B对每个lattice点是共享的,即类似于通常的卷积核参数共享)
注意:对于一般的特征图 f ∈ R n × c f\in R^{n\times c} f∈Rn×c,当 c > 1 c>1 c>1时,则只需将 K ∈ R m × t K\in R^{m\times t} K∈Rm×t 变成 K ∈ R m × t × c K\in R^{m\times t\times c} K∈Rm×t×c, B ∈ R t × 1 B\in R^{t\times 1} B∈Rt×1变成 B ∈ R t × c × 1 B\in R^{t\times c\times 1} B∈Rt×c×1, (1)式变成在信号通道维度 c c c上内积即可;由于特征图嵌入到lattice空间,会集中在一些稀疏的lattice点上,即上面的lattice点的 s s s-邻域,并非总是有 t = ( s + 1 ) d + 1 − s d + 1 t=(s+1)^{d+1} - s^{d+1} t=(s+1)d+1−sd+1 个邻域点,为了快速查找邻域点,可以用 hash 表记录有效的 s − s- s−邻域点 (由个permutohedral lattice 空间的构造可知,其实每个lattice 点 A ∈ Z 5 A\in Z^5 A∈Z5,即每个lattice点具有整数点坐标 [3],因而可以根据整数坐标点构造 hash 值)。
因此,上面permutohedral lattice 空间的可学习卷积,结合splatting 和 slicing(这两个部分只涉及到插值,没有学习参数)得到了一个完整的 bilateral convolution layer。
3. bilateral convolution layer 与CRF的联系
一般的连续CRF模型为
arg
max
x
P
(
x
∣
y
)
∝
exp
(
−
E
(
y
,
x
)
)
,
\arg\max_{x}P(x|y)\propto \exp({-E(y,x)}),
argxmaxP(x∣y)∝exp(−E(y,x)),
E
(
y
,
x
)
=
∑
i
ψ
u
(
x
i
,
y
i
)
+
∑
i
>
j
ψ
p
i
j
(
x
i
,
x
j
)
,
E(y,x)=\sum_{i}\psi_{u}(x_i, y_i) +\sum_{i>j}\psi^{ij}_{p}(x_i,x_j),
E(y,x)=i∑ψu(xi,yi)+i>j∑ψpij(xi,xj),
ψ
u
i
j
(
x
i
,
x
j
)
=
μ
(
x
i
,
x
j
)
k
(
f
i
,
f
j
)
,
k
(
f
i
,
f
j
)
=
exp
(
−
(
f
i
−
f
j
)
T
Σ
−
1
(
f
i
−
f
j
)
)
\psi^{ij}_{u}(x_i,x_j)=\mu(x_i,x_j)k(f_i,f_j), k(f_i,f_j)=\exp{(-(f_i - f_j)^T\Sigma^{-1}(f_i-f_j))}
ψuij(xi,xj)=μ(xi,xj)k(fi,fj),k(fi,fj)=exp(−(fi−fj)TΣ−1(fi−fj))
其中
E
(
y
,
x
)
E(y,x)
E(y,x)为能量函数,
ψ
u
(
x
i
,
y
i
)
,
ψ
p
i
j
(
x
i
,
x
j
)
\psi_{u}(x_i, y_i),~\psi^{ij}_{p}(x_i,x_j)
ψu(xi,yi), ψpij(xi,xj)分别表示一元项,二元项;
k
(
f
i
,
f
j
)
k(f_i,f_j)
k(fi,fj)为高斯核。
易见,可以用前面分析过的 bilateral convolution layer 来代替CRF中的高斯核
k
(
f
i
,
f
j
)
k(f_i,f_j)
k(fi,fj),变成可学习的一般优化器。
总结: 这篇文章主要利用permutohedral lattice空间的特性,通过修改 permutohedral lattice convolution 中的高斯核为可学习的卷积核,结合 s p l a t t i n g splatting splatting 和 s l i c i n g slicing slicing 构造一个 bilateral convolution layer,实现更一般的滤波器(不仅考虑了空间域,同时考虑了图像内容),将双边滤波的思想应用到典型的CNN中。
参考文献
[1] Learning sparse high dimensinal filters: image filtering, dense CRFs and bilateral neural networks
[2] fast high-dimensional fitering using the permutohedral lattice
[3] Lattice-based high-dimensional Gaussian filtering and the permutohedral lattice