双边滤波思想在CNN中的应用----Learning Sparse High Dimensional Filters: Image Filtering, Dense CRFs

双边滤波思想在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)。为了内容完整性,接下来按下面内容来展开这篇文章的主要内容:

  1. 分析 permutohedral lattice 空间中 permutohedral lattice convolution的主要原理
  2. 分析文 [1] 中 bilateral neural networks 的基本模块,bilateral convolution layer
  3. 分析 bilateral convolution layer 与 CRF 的联系
0. 符号说明

为了阐述的方便,符号做如下统一说明:

  • f ∈ R n × c f\in R^{n \times c} fRn×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} fRn×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 fiRc, 其对应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 tABfitACfi,tADfi。这样经过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,fQRc,则原始特征图空间像素点 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:=tTPfP+tTSfS+tTQfQ,即滤波之后像素点 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} fRn×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+1sd+1个格点(包括 A A A),这个可以由 permutohedral lattice [2][3] 的构造过程可知(例如取 s = 2 , d = 2 s=2,d=2 s=2d=2, 则任意一个lattice点有 3 3 − 2 3 = 19 3^3-2^3=19 3323=19 2 2 2-邻域点,对应上图中间图中的Gauss Filter的19个权值,也即那19个彩色圆圈)。
  • 2.构造邻域矩阵:
    -假设特征图 f ∈ R n × c f\in R^{n\times c} fRn×c, 根据其每个像素的lattice点坐标 l ∈ R 5 l\in R^5 lR5,嵌入到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} KRm×t 表示这 m m m 个lattice点的邻域矩阵, K K K的每个元素存放的是相应的相邻lattice点上的信号(即 splatting 之后lattice点上的信号值)。
  • 3.学习lattice空间的卷积核参数:
    B ∈ R t × 1 B\in R^{t\times 1} BRt×1表示待学习的卷积核参数,那么经过 B B B 滤波之后的信号值
    f l : = K ⋅ B , (1) f_{l}:=K\cdot B\tag{1}, fl:=KB,(1) 这里 “ ⋅ \cdot ” 表示矩阵乘法。(注意 B B B对每个lattice点是共享的,即类似于通常的卷积核参数共享)

注意:对于一般的特征图 f ∈ R n × c f\in R^{n\times c} fRn×c,当 c > 1 c>1 c>1时,则只需将 K ∈ R m × t K\in R^{m\times t} KRm×t 变成 K ∈ R m × t × c K\in R^{m\times t\times c} KRm×t×c B ∈ R t × 1 B\in R^{t\times 1} BRt×1变成 B ∈ R t × c × 1 B\in R^{t\times c\times 1} BRt×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+1sd+1 个邻域点,为了快速查找邻域点,可以用 hash 表记录有效的 s − s- s邻域点 (由个permutohedral lattice 空间的构造可知,其实每个lattice 点 A ∈ Z 5 A\in Z^5 AZ5,即每个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(xy)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((fifj)TΣ1(fifj))
其中 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

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值