【论文阅读】Dynamic Graph CNN for Learning on Point Clouds

news/2024/7/7 9:50:38

论文题目: Dynamic Graph CNN for Learning on Point Clouds (用于点云学习的动态图卷积神经网络)  

论文作者: YUE WANG, 麻省理工学院; YONGBIN SUN, 麻省理工学院; ZIWEI LIU, 加州大学伯克利分校/ICSI; SANJAY E. SARMA, 麻省理工学院; MICHAEL M. BRONSTEIN, 伦敦帝国理工学院/USI Lugano; JUSTIN M. SOLOMON, 麻省理工学院

论文出处: ACM Transactions on Graphics 2019

代码仓库: https://github.com/WangYueFt/dgcnn

论文摘要: 点云提供了一种灵活的几何表示, 也包括大多数三维数据采集设备的原始输出. 点云天生缺乏拓扑信息, 因此设计一个模型去恢复拓扑就能丰富点云的表示能力. 为此, 本文提出一个新的神经网络模块EdgeConv, 适用于基于CNN的点云上的高级任务, 包括分类和分割. EdgeConv作用于在网络每层动态计算的图上. EdgeConv是可微分的, 可被插入到现有架构中. 相较于运行在外部空间或独立处理每个点的现有模块, EdgeConv: 1、结合了局部邻域信息; 2、可以堆叠应用于学习全局形状属性; 3、在多层系统中, 特征空间的邻近度在原始嵌入中跨越可能很长的距离捕捉语义特征. 在ModelNet40, ShapeNetPart, S3DIS上展示模型结果.

用于点云分割. 在网络不同层产生的特征空间结构(可视化为红点到所有其它点的距离), 观察更深层中的特征空间结构捕捉语义相似结构, 尽管它们在原始输入空间的距离很远

目录

介绍

相关工作

人工制作的特征

几何深度学习

几何生成模型

本文方法

边缘卷积

动态图更新

性质

排列不变性(置换不变性): 输入顺序的改变不会影响输出

“部分”平移不变性

与现有方法的比较

评估

分类任务

数据

结构

训练

结果

ModelNet40上的更多实验

部件分割

数据

结构

训练(同分类任务设置)

结果

点云内距离

在部分数据上的分割

室内场景分割

数据

结果

讨论


介绍

现有方法通常直接处理点云, 出于效率的考虑或这些技术在有噪声时的不稳定性而绕过昂贵的网格重建或去噪. 像室内导航、自动驾驶、机器人技术、形状合成和建模等, 这些现代应用需要对点云进行高级处理. 最近的算法不是去识别显著的几何特征(如角和边缘), 而是搜索语义线索和可供性. 这些特征通常需要基于学习的方法获得.

深度学习用于点云数据的问题: 标准的深度神经网络模型要求输入数据有规则结构, 而点云并不规则(点的位置在空间中连续分布, 它们的任何排列顺序都不会改变空间分布). 常见方法: 先将原始点云数据转换为三维网格, 但会引入量化伪影、过多内存占用, 难以捕捉高分辨率细粒度特征.

最先进的网络专门设计来处理点云的不规则性, 直接操作原始点云数据(不再传递给中间的规则表示): PointNet通过对每个点独立操作随后应用对称函数来累积特征来实现点的排列不变性; PointNet的各种扩展不再独立作用于每个点而是考虑点的邻域, 使得网络利用局部特征, 提升基本模型的性能. 这些技术主要在局部范围内独立处理点来保持排列不变性, 但这种不变性忽略了点之间的几何关系, 限制捕捉局部特征.

本文提出EdgeConv在保持排列不变性的同时捕捉局部几何结构. EdgeConv生成描述一个点和其相邻点之间关系的边缘特征, 保持相邻点的顺序不变(排列不变性). EdgeConv显式构造了一个局部图并学习边缘的嵌入, 该模型能在欧氏空间和语义空间对点分组. 

本文实验: 将EdgeConv集成到基础版本的PointNet, 未使用任何特征转换. 

主要贡献

1、提出点云学习的新操作EdgeConv来在保持排列不变性的同时更好捕捉点云局部几何特征

2、该模型能通过从层到层动态更新关系图来学习对点进行语义分组

3、EdgeConv能被整合到多个现有点云处理流程中

4、EdgeConv能在基准数据集上达到最先进性能

相关工作

人工制作的特征

几何深度学习

几何生成模型

本文方法

遵循图神经网络的思想, 通过构建局部邻域图并在连接相邻点对的边上应用类似卷积的操作来开发局部几何结构, 该操作称为边缘卷积EdgeConv, 具有介于平移不变性和非局部性之间的属性. 这个图在网络每一层之后动态更新(一个点的k个最近邻集合在层之间变化, 是从嵌入序列计算出的). 特征空间的邻近性不同于输入空间的邻近性, 导致信息在整个点云中的非局部扩散. 

边缘卷积

左: 从点对xi和xj计算边缘特征eij, h()用全连接层实例化;
​​​​​​​右: EdgeConv的输出是通过聚合与每个连接顶点发出的所有边相关联的边缘特征计算得到的.

动态图更新

利用每层得到的特征空间中的最近邻来重新计算图, 感受野和点云的直径一样大, 而且是稀疏的. 本文架构学习如何去构建用在每一层的图, 在计算特征空间中一个成对的距离矩阵, 然后对每个单独的点取k个最近邻的点.

性质

排列不变性(置换不变性): 输入顺序的改变不会影响输出

“部分”平移不变性

与现有方法的比较

本文形状分类神经网络架构不同阶段产生的特征空间结构. 左: 输入三维空间中的欧式距离; 中: 经点云变换阶段后的距离(相当于形状的全局变换); 右: 最后一层的特征空间中的距离

评估

分类任务

数据

ModelNet40(40个类别的12311个网格CAD模型, 9843个模型用来训练, 2468个模型用来测试), 对于每个模型, 从网格表面均匀采样1024个点, 点云被重新缩放以适应单位球. 只需要采样点的(x,y,z)坐标, 丢弃原始网格. 训练阶段通过随机缩放物体和扰动物体和点的位置来扩充数据.

结构

上方分支: 用于分类任务的模型结构
​​​​​​​下方分支: 用于分割任务的模型结构
点云变换块: 通过应用一个估计的3*3矩阵来将输入点集对齐到规范空间, 为了估计这个3*3矩阵, 使用一个连接了每个点坐标和其与其k个近邻点坐标差的张量
EdgeConv块: 对输入应用多层感知器为每个点计算边缘特征, 在相邻边缘特征之间池化后输出

4个EdgeConv层来提取几何特征, 这4个使用3个共享全连接层(64,64,128,256). 根据每个EdgeConv层的特征重新计算图并将新的图用于下一层. 所有EdgeConv层的最近邻个数k=20. Shortcut来提取多尺度特征和一个共享全连接层(1024)来聚合多尺度特征, 将之前层的特征连接起来得到一个64+64+128+256=512维的点云. 使用一个全局最大/求和池化来得到点云全局特征, 使用两个全连接层(512,256)(0.5概率的dropout)来变换全局特征. 所有层包含LeakyReLU和批归一化. 将训练数据分80%去训练、20%来验证, 用验证集来选择k. 选好k后在整个训练数据上重新训练模型, 在测试集上评估模型. 其它超参数的选择方法与之相似.

训练

学习率0.1的SGD, 使用余弦退火将学习率降至0.001. 批归一化的动量为0.9, 不使用批归一化衰减. 批尺寸为32, 动量为0.9

结果

ModelNet40数据集上的分类结果
使用固定k-NN图的本文Baseline比PointNet++提高了1%

模型复杂度(ModelNet40分类任务)

ModelNet40上的更多实验

各组件的效果
不同最近邻k的效果: 过大的k会降低性能
本文模型(训练在k=20的1024个点)对点云密度的鲁棒性, 模拟测试时输入点随机丢失的情况
即使丢掉一半的点, 模型结果依然不错, 但低于512个点性能会急剧下降

部件分割

数据

ShapeNet部件数据集(16个物体类别的16881个形状, 共有标注50种部件), 每个点被分类成几个预先定义部件类别标签之一. 从每个训练形状采样2048个点, 大多采样点集被少于6个部件标注.

结构

(前文结构图的下方分支)经空间变换网络后, 有3个EdgeConv层. 一个共享全连接层(1024)聚合之前层的信息. Shortcut来包含所有EdgeConv输出作为局部特征描述符. 3个共享全连接层(256,256,128)来转换逐点特征. 批归一化、dropout、ReLU和分类任务相似.

训练(同分类任务设置)

结果

形状IoU: 该形状内不同部件IoU的平均

类别IoU: 该类别中所有形状IoU的平均

平均IoU(mIoU): 所有测试形状的IoU的平均

ShapeNet part数据集上mIoU(%)

本文在桌子、椅子、台灯上的测试结果

点云内距离

源点(红点)和 分割模型第三层EdgeConv后的特征空间中同类别多个点云之间的欧式距离
尽管点来源不同, 但语义相近的部分距离相近

在部分数据上的分割

模型对部分数据有鲁棒性, 模拟形状从六边(顶部、底部、右侧、左侧、前部、后部)之一以不同百分比丢弃部分的情况.

保留更多点, mIoU提高, 涡轮的分割结果得到改善

室内场景分割

数据

S3DIS(6个室内区域共272个房间的三维扫描点云, 每个点属于13个语义类别中的一种), 每个房间分成1m*1m的块, 每个点表示成一个9维向量(XYZ, RGB, 归一化空间坐标). 训练时为每个块采样4096个点, 所有点被用来测试. 对6个区域使用相同的6折交叉验证, 报告平均评估结果.

结果

本文输出了更平滑的分割结果, 如前两行的墙体(青色)、后两行的椅子(红色)和柱子(品红色)

讨论

1、局部几何特征对三维识别任务很重要

2、本文架构可整合到现有基于点云的任务的流程, 还可改进的地方: 

(1)合并快速数据结构, 而非计算成对距离来评估k最近邻查询

(2)考虑更大点云组之间的高阶关系, 而非成对考虑

(3)设计一个非共享的转换网络, 对每个局部块进行不同作用, 增加模型灵活性


http://www.niftyadmin.cn/n/4556742.html

相关文章

Sonarqube安装及基本使用

1 需要环境 2 解压包 #解压 unzip sonarqube-6.7.4.zip3 创建数据库 4 修改配置文件 cd /usr/local/sonarqube-6.7.4/conf vim sonar.propertiessonar.jdbc.usernameroot sonar.jdbc.password123456 sonar.jdbc.urljdbc:mysql://192.168.38.45:3306/sonar?useUnicodetrue&am…

Redis + keepalived 高可用行配置检测脚本

Redis 在生产配置中;除redis集群、哨兵模式之外;主从模式还是比较普遍的。 配置 redis 多主从;由 keepalived 做 VIP 地址漂移。可以实现redis的高可用性。 keepalived 配置示例;(master 主节点配置,backup…

.net里的timer

}} ElapsedEventArgs e) { Console.WriteLine("The Elapsed event was raised at {0}" using System;using System.Timers;//在这个空间下面public class Timer1{ private static System.Timers.Timer aTimer; public static void Main() { aTimer new System.Timer…

jenkins环境搭建(一)

1 安装 rpm -ivh jenkins-2.190.3-1.1.noarch.rpm2 修改配置 vim /etc/sysconfig/jenkins#用户 JENKINS_USER"root" #端口 JENKINS_PORT"8000"3 启动jenkins systemctl start jenkins #启动失败,查看日志 journalctl -xe #建立软连接 ln -s …

Maven 梳理 - maven新建web项目提示javax.servlet.http.HttpServlet was not found on the Java Build Path...

方法一&#xff1a; <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> 方法二&#xff1a; Java Bui…

C语言好学么。

好不好学 我想没有问题 ||| 还是很好学的 看你怎么学 你一定会学好的了 ||| 不好学 ||| 只要你是学理科的 所以你进大学了如果想学好C语言的话 c语言和高等数学有联系的 认真的学就很简单 说难也难 我也是当时是从零开始学习的 ||| 我觉得不难学 就必须得去吧高等数学搞好 怎么…

Jenkins集成Gitlab、Jdk、Maven(二)

1 集成Gitlab 1.1 安装插件 Credentials Binding1.2 git安装 #Jenkins 服务器上要有git环境 yum install git -y #查看版本 git --version1.3 生成公钥/私钥 #生成命令 ssh-keygen -t rsa cd /root/.ssh/ #查看公钥 cat id_rsa.pub #查看私钥 cat id_rsa1.4 gitlab设置公…

c语言的一些问题

将这些输入到 TruboC 即32767 因为最大的正数为0111111111111111 加一后就变成1000000000000000 也就是最大的负数了因为最小的负数为1000000000000000 本身也是个结果 打字总会吧 答案补充 自己做不出来 自己求结果不是更好么 ||| //溢出问题://最大值1变成最小值 即-32768//最…