本文记录了博主阅读论文《Depth-Aware CNN for RGB-D Segmentation》的笔记,原文提供代码,更新于2019.03.12。
《Depth-Aware CNN for RGB-D Segmentation》
摘要
卷积神经网络受到了固定网格状的卷积核结构的限制,因此无法处理几何学信息(geometric information)。现有方法要么是用一张额外的图像表示深度,要么是在3D体元(voxels)或点云(point cloud)中处理空间信息。但这样计算量大且内存消耗大。为了解决这个问题,本文中介绍了两种直观、灵活、有效的算子:depth-aware convolution和depth-aware average pooling。在信息传递(propagation)过程中运用像素间的深度相似度,空间信息可以无缝融合进CNN。如此,在不引入任何额外参数的情况下,两种算子都可以很轻松地整合进现有CNN中。
Introduction
将深度信息融入CNN是一项困难但重要的工作,目前已有一些在此方面的研究:(列在下面,如果有阅读笔记后面会有链接指向笔记的博客)
- 《Locality-Sensitive Deconvolution Networks with Gated Fusion for RGB-D Indoor Semantic Segmentation》(2017,阅读笔记)
- 《Indoor Semantic Segmentation using depth information》(2013,阅读笔记)
- 《Geometry Driven Semantic Labeling of Indoor Scenes》(2014,阅读笔记)
- 《Indoor Segmentation and Support Inference from RGBD Images》(2012,阅读笔记)
- 《3d graph neural networks for RGBD semantic segmentation》(2017,阅读笔记)
- 《rgb-d scene labeling: features and algorithms》(2012,阅读笔记)
- 《self-paced cross modality transfer learning for efficient road segmentation》(2017,阅读笔记)
本文中提出了一个用于RGB-D分割任务的端到端Depth-aware CNN(D-CNN)。 其中,Depth-aware convolution算子在普通的卷积上加了一个depth simialrity项,该项强制与核中心位置具有相同深度的像素比其他像素对输出的贡献更大。另一个算子(depth-aware average pooling)则在计算局部区域的均值时考虑了相邻像素之间的深度信息。这两种操作的设计都基于一个假设:具有相同语义标签和相似深度的两个物体之间的相互影响要更多一些(具有相同语义标签的两个像素具有相似的深度)。
如下图所示,像素A和C之间的关联度应该比A和B的关联度要大。
主要贡献:
- 可以将深度图中的集合信息无缝整合进CNN;
- 不增加传统CNN参数和计算量;
- 可以直接替代原来的卷积和池化部分。
Depth-Aware CNN
算子输入:
- 特征图 x ∈ R c i × h × w \mathbf{x}\in\mathbb R^{c_i\times h\times w} x∈Rci×h×w;
- 深度图 D ∈ R h × w \mathbf{D}\in\mathbb R^{h\times w} D∈Rh×w
其中 c i c_i ci是输入特征图的通道数, h h h是高, w w w是宽。
输出: y ∈ R c o × h × w , 其 中 \mathbf{y}\in\mathbb R^{c_o\times h\times w},其中 y∈Rco×h×w,其中c_o$是输出特征通道数。
尽管 x \bf x x和 y \bf y y都是3D张量,但是下面为了简洁在2D空间维度阐述这两个算子。
Depth-Aware Convolution
对于在 y \bf y y上的某个像素位置 p 0 \bf p_0 p0,标准2D卷积的输出是
y ( p 0 ) = ∑ p n ∈ R w ( p n ) ⋅ x ( p 0 + p n ) \mathbf{y(p_0)}=\sum_{\mathbf{p}_n\in\mathcal R}\mathbf{w}(\mathbf{p}_n)\cdot \mathbf{x}(\mathbf{p}_0+\mathbf p_n) y(p0)=pn∈R∑w(pn)⋅x(p0+pn)
其中 R \mathcal R R是 x \mathbf x x内在位置 p 0 \bm p_{\bf 0} p0处的局部网格(local grid), w \bf w w是卷积核。
为了描述深度信息,增加了两类权重:
- 可学习的卷积核 m \bf m m;
- 两个像素之间的深度相似度 F D \bm F_{\bf D} FD。
此时,上面的公式就变成了
y ( p 0 ) = ∑ p n ∈ R w ( p n ) ⋅ F D ( p 0 , p 0 + p n ) ⋅ x ( p 0 + p n ) \mathbf{y(p_0)}=\sum_{\mathbf{p}_n\in\mathcal R}\mathbf{w}(\mathbf{p}_n)\cdot \bm F_{\mathbf D}(\mathbf{p_0,p_0+}\mathbf p_n)\cdot \mathbf{x}(\mathbf{p}_0+\mathbf p_n) y(p0)=pn∈R∑w(pn)