3D Graph Neural Networks for RGBD Semantic Segmentation
3D Graph Neural Networks for RGBD Semantic Segmentation
动机
主要针对的任务是RGBD语义分割, 不同于往常的RGB图像的语义分割任务, 这里还可以更多的考虑来自D通道的深度信息. 所以对于这类任务需要联合2D外观和3D几何信息来进行联合推理.
深度信息编码
关于将深度信息编码为图像的方法有以下几种:
- 通过HHA编码来将深度信息编码为三通道: horizontal disparity, height above ground and norm angle(水平视差、地面上方高度和范数角度).
- 直接将深度图像作为一个1通道图像输入.
之后FCN直接在编码图像上进行特征提取.
RGBD图像分割
关于如何进行RGBD图像的分割, 以往有的工作主要有以下的几种方法:
- 将深度图直接作为另一个输入图像. 使用两个CNN结构来分别处理颜色与深度信息来提取特征. 这样造成需要双倍的计算和存储消耗. 而且这样的设定将2D图像像素与3D空间中的真实位置割裂开来, 可能会带来一定的错误. 因为单独考虑2D空间中的像素, 其得出的邻居关系, 在空间中可能并不能对应表示很好的邻近关系.
- 另一种选择是使用3D CNN, 使用在 voxelized 3D space 中, 这类方法更好地利用了3D空间中的上下文信息, 然而由于3D体素网络的计算成本很高, 因此在高分辨率和复杂场景中进行扩展具有一定的挑战. 另外, 3D空间的量化也可能导致额外的误差.
- 各向异性卷积提供了一个更好的对于形状分析学习非欧滤波器的方法. 然而它对于大尺度RGBD图像的密集语义分割任务的处理还是有些困难, 因为点之间的关联很复杂, 它们通常依赖于定义明确的点关联, 例如网格, 这些网格不容易用于复杂的RGBD分割数据.
为了处理上述挑战, 文章提出了一个端到端的3D图神经网络, 这直接从3D点中学习表示.
图神经网络
当前很多工作已经努力将神经网络推广到图数据上.
一个方向是将卷积神经网络(CNN)应用于图. 在谱方法中, CNN用于依赖于拉普拉斯矩阵的谱域. 然而[6]使用哈希函数, 因此可以将CNN应用于图. 另一个方向是将神经网络循环应用于图的每个节点, 产生了“图形神经网络”. 该模型包括一个传播过程, 它类似于图模型的消息传递. 这种模型的最终学习过程可以通过BPTT算法来实现.
这里使用的消息传播模型的图神经网络, 基础更新公式为:
其中h为隐藏状态, m对于当前节点的邻居信息的汇总后的结果, 具体如何汇聚, 看具体不同的模型的设定, 文章是使用的均值. 函数M是计算消息的函数, 而F是用来更新隐藏状态的函数. 和循环卷积神经网络类似, M, F是不同的时间步上是共享权值的. 简单的M和F可以使用像素级加法和全连接层来分别表示 这些更新函数指定了图内信息的传播模型. 也可以使用多个M来包含来自有着不同类型的边的图的更多信息.
通过执行上述传播模型一定数量的步骤来执行推断, 最终预测可以在节点处或在图级别产生, 具体取决于任务. 例如, 可以将隐藏表示(或其聚合)提供给另一个神经网络以执行节点(或图)分类.
图神经网络与许多现有模型密切相关, 例如条件随机场(CRF)和循环神经网络网络(RNN). 文章专注于成对CRF, 但请注意, 这里的连接扩展到了高阶模型上.GNN可以被看作是一个RNN从序列到图数据上的泛化.
- 当输入图是链式结构的时候, 邻居被从当前节点的单个父节点来生成;
- 当输入图是树时, GNN也与Tree-LSTM密切相关. 在这种情况下, 消息计算是所有子节点的隐藏表示的总和. 与常见图神经网络的主要区别在于每个子节点会计算其自己的遗忘门输出副本-它们在其父单元内存更新中被聚合在一起.
贡献
- 首先基于深度信息将2D像素投射到3D空间中, 并且将每个3D点与一元特征向量(即, 2D分割CNN的输出)相关联.
- 然后, 我们构建一个图, 其节点是这些3D点, 并通过在3D空间中找到最近的邻居来构造边.
- 对于每个节点, 将图像特征向量作为初始表示, 并使用循环函数迭代地更新它.
这种动态计算方案的关键思想是节点状态由其历史状态和其邻居发送的消息共同确定, 同时将外观和3D信息同时考虑在内.
使用每个节点的最终状态来执行每个节点的分类任务. 采用BPTT算法计算图形神经网络的梯度. 此外, 通过传播梯度到一元CNN促进端到端的培训.
图构建
给定图像, 基于像素的2D位置和深度信息来构建有向图, 让[x, y, z]表示相机坐标系中的点的3D坐标, 并且让[u, v]表示其根据针孔相机模型投影到图像上的坐标. 根据透视投影几何产生式子:
这里的fx和fy表示沿着x和y的焦距长度(focal length), 并且cx和cy表示主点(the principal point). 为了形成图, 将每个像素视为一个节点, 并通过有向边缘将其连接到3D空间中的K近邻(KNN), 在我们的实验中K设置为64. 注意, 这个过程产生不对称结构, 即, 自A到B的边的存在不一定意味着自B到A的边的存在.
传播模型
在构造完图后, 使用CNN作为一元模型来计算每个像素的特征, 这些特征作为对应节点的初始隐藏层表示, 从而编码外观信息. 给定已经编码好几何上下文信息的3D图, 图神经网络可以用来利用外观和几何信息.
信息传递过程如下:
这里的g是一个多层感知机, 文章是用的是ReLU作为对应的非线性激活函数. 每个时间步, 每个节点收集来自邻居节点的消息. 消息首先被汇聚平均后, 与节点原始隐藏状态进行融合更新.这里关于F的选择, 主要有两种:
- Vanilla RNN Update. 使用多层感知机作为更新函数.
- 表示为:
- 这里将隐藏状态和消息拼接后传入MLP q.
- LSTM Update. 使用LSTM来进行更新. 它能够维持自身的记忆来帮助从接受的信息中提取更为有用的信息.
网络的大致情况如上.
预测模型
对于每个节点v在得分图中对应的像素, 这里预测语义类别yv的概率pyv使用下面的公式计算:
这里的s是一个所有节点共享的有着softmax层MLP. 注意这里拼接了一元CNN输出的初始隐藏状态和T个时间步之后的迭代输出隐藏状态.
最终使用一个softmax交叉熵损失函数来对每个节点进行损失计算, 使用BPTT进行训练.
效果
实验细节
We evaluate our method on two popular RGBD datasets: NYUD2 and SUN-RGBD.
NYUD2 contains a total of 1,449 RGBD image pairs from 464 different scenes. The dataset is divided into 795 images from 249 scenes for training and 654 images from 215 scenes for testing. We randomly split 49 scenes from the training set as the validation set, which contains 167 images. The remaining 654 images from 200 scenes are used as the training set.
划分比例: tr:val:te = 654:167:654 = 1:0.25 :1
SUN-RGBD consists of 10,335 images, which are divided into 5,285 RGBD image pairs for training and 5,050 for testing.
All our hyperparameter search and ablation studies are performed on the NYUD2 validation set.
For most of the ablation experiments, we use a modified VGG-16 network, i.e., deeplab-LargeFov with dilated convolutions as our unary CNN to extract the appearance features from the 2D images. We use the fc7 feature map. The output feature map is of size H×W×C where H, W and C are the height, width and the channel size respectively. Note that due to the stride and pooling of this network, H and W are 1/8 of the original input in terms of size.** 因此, 我们的 3D 图形是建立在向下采样的特征图之上的.**
为了进一步合并上下文信息, 我们使用全局池从特征图计算另一个 C 维向量. 然后将向量附加到所有空间位置, 从而生成一个 H×W×2C 特征图.
In our experiment, C=1024 and a 1×1 convolution layer is used to further reduce the dimension to 512.
We also experimented by replacing the VGG-net with ResNet-101 or by combining it with the HHA encoding.
- We initialize the unary CNN from the pre-trained VGG network.
- We use SGD with momentum to optimize the network and** clip the norm of the gradients such that it is not larger than 10**.
- The initial learning rates of the pre-trained unary CNN and GNN are 0.001 and 0.01 respectively.
- Momentum is set to 0.9.
- We initialize RNN and LSTM update functions of the Graph Neural Network** using the MSRA method**.
- We randomly scale the image in scaling range [0.5, 2] and randomly crop 425×425 patches.
- For the multi-scale testing, we use three scales 0.8, 1.0 and 1.2.
- In the ResNet-101 experiment, we modified the network by reducing the overall stride to 8 and by adding dilated convolutions to enlarge the receptive field.
- We adopt two common metrics to evaluate our method: mean accuracy and mean intersection-over-union (IoU).
对比结果
消融实验
- 传播时间步数: 当传播步长较大时, 振荡可能与优化过程有关. 我们发现 3 到 6 个传播步会产生合理的良好结果.
- 更新方程: 比较了描述的两个更新方程. 普通 RNN 的性能与 LSTM 相似. LSTM 更新的计算复杂度远远大于香草 RNN. 根据这个发现, 于是所有的实验使用普通 RNN 更新.
- 2D VS.3D 图: 为了研究 3D 图的增加带来了多大的改进, 将其与基于二维像素位置的二维图进行了比较. 使用相同的图神经网络进行实验, 并在表 4 中显示不同传播步骤的性能. 整个测试集的结果如表 5 所示. 表明, 使用 3DGNN, 可以捕获更多的三维几何上下文, 从而使预测更加准确. 另一个有趣的观察是, 即使简单的 2DGNN 仍然优于采用普通 CNN 的方法.
- 性能分析: 现在将3DGNN与一元CNN进行比较, 以便研究如何通过利用3D几何信息来增强GNN. 基于单尺度数据输入的结果列于表5中. 3DGNN模型优于一元和2DGNN模型, 这再次支持3D上下文信息在语义分割中很重要的事实.
- 为了进一步理解3D信息带来的优势, 文章统计了对于各个类别带来的性能提升. 对于特定的类别, 由于在2D空间中很容易被误分类, 而结合空间信息后, 反而容易分类了.
- 为了进一步理解什么导致了提升, 分析了不同大小的物体的性能增益如何变化. 特别地, 对于每个语义类, 首先将真实分割图划分为连接组件的集合, 其中每个组件被重新构造为该类中对象的一个实例. 然后计算所有类的对象实例的大小. 就像素数而言, 对象大小的范围高达10,200个不同的值. 我们将它们分成34个bins, bin宽为3,000. 记录每个bin中对象实例的预测精度的平均改进. 如图6所示, 3DGNN处理最好的是大中型对象而不是小对象. 这一结果证明3DGNN可以克服一元CNN的感受域的有限大小, 并捕获图像中的长程依赖性.
- 定性分析: 在图7中的SUN-RGBD数据集上显示了模型的示例结果, 并将其与一元CNN进行了比较. 可以看出, 3DGNN利用3D几何上下文信息, 并且与一元CNN相比, 学习到更好的分类表示.
- 失败案例分析. 最后, 展示和分析了模型的代表性失败案例.
- 首先, 当物体具有相似的深度时, 模型有时无法做出良好的预测, 特别是对于小物体. 在图8的第一行中, 由于这一事实, 灯被错误分类为百叶窗.
- 第二种类型的失败案例是由于形状复杂的对象造成的. 不连续的深度可以使3D邻域相当嘈杂. 如图8的第二行所示, 该表被识别为其他对象的片段.
- 此外, 当两个对象的2D外观和3D上下文相似时, 我们的方法不能很好地工作. 例如白板混淆成白墙, 如图8第三排所示.
总结
提出了一种用于RGBD语义分割的新型3D图神经网络. 图神经网络建立在从RGB图像中提取颜色和深度的点之上. 我们的3DGNN利用2D外观信息和3D几何关系, 它能够捕捉图像中的长距离依赖, 这在传统方法中难以建模. 各种实证结果表明, 我们的模型在标准RGBD语义分段基准上实现了良好的性能.
将来, 我们计划调查反馈以调整构造图的结构.
思考
- 如何编程实现梯度裁剪?
- MSRA方法初始化如神经网络的更新函数有什么好处? 如何初始化?
- Pytorch如何设置参数的初始化?
相关链接
- 论文:http://openaccess.thecvf.com/content_ICCV_2017/papers/Qi_3D_Graph_Neural_ICCV_2017_paper.pdf
- 代码:https://github.com/yanx27/3DGNN_pytorch
3D Graph Neural Networks for RGBD Semantic Segmentation的更多相关文章
- 论文笔记之:Decoupled Deep Neural Network for Semi-supervised Semantic Segmentation
Decoupled Deep Neural Network for Semi-supervised Semantic Segmentation xx
- 《Graph Neural Networks: A Review of Methods and Applications》阅读笔记
本文是对文献 <Graph Neural Networks: A Review of Methods and Applications> 的内容总结,详细内容请参照原文. 引言 大量的学习 ...
- Graph Neural Networks for Computer Vision
Graph Neural Networks for Computer Vision I was attracted by this image: This is an inspiring image ...
- DAG-GNN: DAG Structure Learning with Graph Neural Networks
目录 概 主要内容 代码 Yu Y., Chen J., Gao T. and Yu M. DAG-GNN: DAG structure learning with graph neural netw ...
- 论文解读(GIN)《How Powerful are Graph Neural Networks》
Paper Information Title:<How Powerful are Graph Neural Networks?>Authors:Keyulu Xu, Weihua Hu, ...
- 论文解读(SelfGNN)《Self-supervised Graph Neural Networks without explicit negative sampling》
论文信息 论文标题:Self-supervised Graph Neural Networks without explicit negative sampling论文作者:Zekarias T. K ...
- 论文阅读 Streaming Graph Neural Networks
3 Streaming Graph Neural Networks link:https://dl.acm.org/doi/10.1145/3397271.3401092 Abstract 本文提出了 ...
- 论文解读(DAGNN)《Towards Deeper Graph Neural Networks》
论文信息 论文标题:Towards Deeper Graph Neural Networks论文作者:Meng Liu, Hongyang Gao, Shuiwang Ji论文来源:2020, KDD ...
- 论文解读(LA-GNN)《Local Augmentation for Graph Neural Networks》
论文信息 论文标题:Local Augmentation for Graph Neural Networks论文作者:Songtao Liu, Hanze Dong, Lanqing Li, Ting ...
随机推荐
- 题 FatMouse‘Trade
FatMouse准备了M磅的猫食,准备与守卫仓库的猫交易,这些猫包含他最喜欢的食物,JavaBean. 仓库有N个房间.第i间房间包含J [I]磅的JavaBeans,并且需要F [i]磅的猫粮.Fa ...
- c++数据类型漫谈
在计算机眼里所有数据都是0101,二进制才是物理世界的主宰,c++的数据类型相对其他高级语言是相对较细的,因为是继承C而来,但是c++为什么要设计这么多数据类型呢?因为人类难以理解二进制,这就是数据类 ...
- 201772020113李清华《面向对象程序设计(java)》第十周学习总结
1.实验目的与要求 (1) 理解泛型概念: (2) 掌握泛型类的定义与使用: (3) 掌握泛型方法的声明与使用: (4) 掌握泛型接口的定义与实现: (5)了解泛型程序设计,理解其用途. 2.实验内容 ...
- Lightgbm 随笔
lightGBM LightGBM 是一个梯度 boosting 框架,使用基于学习算法的决策树.它可以说是分布式的,高效的,有以下优势: 更快的训练效率 低内存使用 更高的准确率 支持并行化学习 可 ...
- frist Django app — 一、 创建工程
缘起 既然python都学了,学习python的时候感觉是相见恨晚,一种新的编程语言带给我一种新的思考问题的方式,为了巩固学过的东西并进一步学习python,就想学学Django,看看会不会带给我关于 ...
- C# ADO.NET中设置Like模糊查询的参数
ADO.NET进行参数化时会自动将参数值包含在单引号中,除了特殊需求,最好不要自己手动添加单引号.ADO.NET中识别参数标识是使用符号@,如果在SQL语句中将参数标识放在单引号中,单引号中的参数标识 ...
- mysql查询正在执行的sql
mysql> SHOW VARIABLES LIKE "general_log%"; +------------------+------------------------ ...
- css background-image 自适应宽高——转载
就是这么简单的一句话,设置背景图,并让它100%的适应导航栏宽高,并设置不重复,大小100%就OK了 .zjhn-nav li.active a{ background-image:url(../im ...
- Python-基础函数与常用模块考核
第二模块考核(2019/ 03/ 03) ### 第一模块内容1.请写出 “路飞学城alex” 分别用utf - 8和gbk编码所占的位数(口述) ➜ ~ python3 >>> b ...
- matrix矩阵变换参数图形化详解