ShapeConv: Shape-aware Convolutional Layer for Indoor RGB-D Semantic Segmentation

论文链接:ShapeConv: Shape-aware Convolutional Layer  for Indoor RGB-D Semantic Segmentation

1 Why ShapeConv for RGB-D tasks

深度图包含物体的基础形状(局部信息,local geometry)和物体的位置(全局信息,在更大的context下的信息)。但是用传统卷积去卷深度特征图会带来问题。

如上图所示,第一行中凳子上的两个红色横线,经过第二行的两个红色卷积核p1,p2卷积过后(绿色同理),由于深度图中的像素值不同,会导致卷积结果不同,这会削弱网络对形状的感知,我们实现形状不变性,即对于形状相同的物体,经过卷积输出的结果应该相同,但是传统卷积也不能丢弃,因为具有相同形状的物体不能输出一样,因为他们的位置会不同,这也是学习的一部分。因此作者设计了ShapeConv,将卷积分成base, shape component两个部分,分别负责处理where the patch is(位置信息)和what the patch is(形状信息,或者说叫物体的inherent property)

2 Method

例子图中的p1,p2像素值是不同的,相应地,它们的特征图也会不同,就会导致不同的分割结果,但是事实上,这两个patch之间也存在一些不变量,即为形状。因此,作者把每个卷积窗口的输入\(\mathbb{P}\in R^{K_{h}\times K_{w}\times C_{in}}\)分成两个component,base-component \(\mathbb{P}_{B}\)和shape-component \(\mathbb{P}_{S}\)。

2.1 ShapeConv Formulation

\[\begin{aligned}&\mathbb{P}_B=m(\mathbb{P}),\\&\mathbb{P}_{S}=\mathbb{P}-m(\mathbb{P}),\end{aligned}\]

\(m\)是平均操作,\(\mathbb{P}_B\in R^{1\times1\times C_{in}}\),\(\mathbb{P}_S\in R^{K_{h}\times K_{w}\times C_{in}}\),\(\mathbb{P}_{B}\)会代表patch的位置,\(\mathbb{P}_{S}\)会代表patch的固有特征,这样一来,相同形状的物体尽管在不同的位置,它们的\(\mathbb{P}_{S}\)是相同的,但同时位置信息也不会丢弃,因为有\(\mathbb{P}_{B}\)。

作者用两组weight来处理这两个components,分别是\(\mathbb{W}_B\in R^1\)和\(\mathbb{W}_{S}\in R^{K_{h}\times K_{w}\times K_{h}\times K_{w}\times C_{in}}\),输出的结果会做相加,然后再用传统卷积的卷积核去卷它们。总体过程如下:

\[\begin{aligned}
\text{F}& =ShapeConv(\mathbb{K},\mathbb{W}_B,\mathbb{W}_S,\mathbb{P}) \\
&=Conv(\mathbb{K},\mathbb{W}_B\diamond\mathbb{P}_B+\mathbb{W}_S*\mathbb{P}_S) & \text{(1)} \\
&=Conv(\mathbb{K},\mathbf{P_B}+\mathbf{P_S}) \\
&=Conv((\mathbb{K},\mathbf{P_{BS}}),
\end{aligned}\]

\(\mathbf{P_B}, \mathbf{P_S}\)的计算过程如下所示

\[\begin{cases}\mathbf{P_B}=\mathbb{W}_B\diamond\mathbb{P}_B\\\mathbf{P_{B_{1,1,c_{in}}}}=\mathbb{W}_B\times\mathbb{P}_{B_{1,1,c_{in}}},\end{cases}\\\begin{cases}\mathbf{P_S}=\mathbb{W}_S*\mathbb{P}_S\\\mathbf{P_{S_{k_h,k_w,c_{in}}}}=\sum_i^{K_h\times K_w}(\mathbb{W}_{S_{i,k_h,k_w,c_{in}}}\times\mathbb{P}_{S_{i,c_{in}}}),\end{cases}\]

\(\mathbf{P_B}\)的计算方式很简单,就是直接相乘。接下来讲下\(\mathbf{P_S}\)的计算。对于\(\mathbf{P_S}\)中坐标为\((k_{h} ,k_{w} ,c_{in})\)的每个点,都由\(\mathbb{P}_{S_{i,c_{in}}}\in R^{K_{h}\times K_{w}}\)和\(\mathbb{W}_{S_{i,k_h,k_w,c_{in}}}\in R^{K_{h}\times K_{w}}\)相乘然后累加得到。然后\(\mathbf{P_B}, \mathbf{P_S}\)相加会得到\(\mathbf{P_BS}\),其内涵重要的形状信息,这是普通卷积做不到的。

2.2 Training and Inference

从上面的运算过程可以看出,ShapeConv比普通卷积要多两个weights的product操作,会增加时间开销,因此作者把这两个乘积操作shift from patches to kernels,对卷积核进行weight product操作。

\[\begin{cases}\mathbf{K_B}=\mathbb{W}_B\diamond\mathbb{K}_B\\\mathbf{K_{B_{1,1,c_{in},c_{out}}}}=\mathbb{W}_B\times\mathbb{K}_{B_{1,1,c_{in},c_{out}}},\end{cases}\\\begin{cases}\mathbf{K_S}=\mathbb{W}_S*\mathbb{K}_S\\\mathbf{K_{S_{k_h,k_w,c_{in},c_{out}}}}=\sum_i^{K_h\times K_w}(\mathbb{W}_{S_{i,k_h,k_w,c_{in}}}\times\mathbb{K}_{S_{i,c_{in},c_{out}}}),\end{cases}\]。据此,可以重新定义ShapeConv:

\[\begin{aligned}
\text{F}& =ShapeConv(\mathbb{K},\mathbb{W}_B,\mathbb{W}_S,\mathbb{P}) \\
&=Conv(\mathbb{W}_B\diamond m(\mathbb{K})+\mathbb{W}_S*(\mathbb{K}-m(\mathbb{K})),\mathbb{P}) \\
&=Conv(\mathbb{W}_B\diamond\mathbb{K}_B+\mathbb{W}_S*\mathbb{K}_S,\mathbb{P})& \text{(2)} \\
&=Conv(\mathbf{K_B}+\mathbf{K_S},\mathbb{P}) \\
&=Conv(\mathbf{K_{BS}},\mathbb{P}),
\end{aligned}\]

经过数学推导(此处略),公式(1)和(2)是等价的。这样一来,ShapeConv和普通卷积的复杂度一致,没有带来额外的推理时间,仅在训练时多训练了两组weights。

2.3 ShapeConv Newtwork

作者用ShapeConv去替换网络中的普通卷积,同时\(\mathbb{W}_B, \mathbb{W}_S\)都被初始化为恒等矩阵,可以让ShapeConv利用pretrained models里已经训练好的参数。

 

 

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇