干货!从动态点云中学习的无监督3D物体分割
bigegpt 2025-06-10 13:09 12 浏览
宋子扬:
香港理工大学计算机系博士二年级, 导师 YANG Bo. 研究兴趣为无监督的三维场景理解
本文设计了一种通用的、能分割多个物体的无监督3D物体分割方法:这种方法在完全无标注的点云序列上进行训练,从运动信息中学习3D物体分割;经过训练后,能够直接在单帧点云上进行物体分割。为此,本文提出了无监督的3D物体分割方法OGC (Object Geometry Consistency)。
OGC: Unsupervised 3D Object Segmentation from Rigid Dynamics of Point Clouds
论文:
https://arxiv.org/abs/2210.04458
代码:
https://github.com/vLAR-group/OGC
在物体部件分割和室内、室外物体分割任务上的效果图(无需任何人工标注):
01
Introduction
三维点云物体分割是三维场景理解的关键问题之一,也是自动驾驶、智能机器人等应用的基础。然而,目前的主流方法都是基于监督学习,需要大量人工标注的数据,而对点云数据进行人工标注是十分耗费时间和人力的。
02
Motivation
本文旨在寻求一种无监督的3D物体分割方法。我们发现,运动信息有望帮助我们实现这一目标。如下图1所示,在左图中的蓝色/橙色圆圈内,一辆汽车上的所有点一起向前运动,而场景中其他的点则保持静止。那么理论上,我们可以基于每个点的运动,将场景中属于汽车的点和其他点分割开,实现右图中的效果。
Figure 1. 利用运动信息分割物体的motivation
利用运动信息分割3D物体的想法已经在一些现有的工作中得到了探索。例如,[1] 和 [2] 利用传统的稀疏子空间聚类的方法从点云序列中分割运动的物体;SLIM [3] 提出了第一个基于学习的方法来分割运动的前景和静止的背景。然而,现有的方法都在以下的一个或多个方面存在局限性:
1)只适用于特定场景,不具备通用性;
2)只能实现运动的前景和静止的背景之间的二类分割,无法进一步区分前景中的多个物体;
3)(几乎所有的现有方法都存在的局限)必须要多帧的点云序列作为输入,而且只能分割出其中在运动的物体。但是理论上,我们利用运动信息学会辨别某些物体之后,当这些物体以静止的状态出现在单帧点云中,我们应该依然能辨别它们。
针对上述问题,我们希望设计一种通用的、能分割多个物体的无监督3D物体分割方法:这种方法在完全无标注的点云序列上进行训练,从运动信息中学习3D物体分割;经过训练后,能够直接在单帧点云上进行物体分割。为此,本文提出了无监督的3D物体分割方法OGC (Object Geometry Consistency)。本文的主要贡献包括以下三点:
1)我们提出了第一个通用的无监督3D物体分割框架OGC,训练过程中无需任何人工标注,从点云序列包含的运动信息中学习;经过训练后能直接在单帧点云上进行物体分割。
2)作为OGC框架的核心,我们以物体在运动中保持几何形状一致作为约束条件,设计了一组损失函数,能够有效地利用运动信息为物体分割提供监督信号。
3)我们在物体部件分割和室内、室外物体分割任务上都取得了非常好的效果
03
Method
3.1
Overview
如下图2所示,我们的框架包括三个部分:
1)一个物体分割网络(橙色部分),从单帧点云估计物体分割mask;
2)一个自监督的场景流估计网络(绿色部分),估计两帧点云之间的运动(场景流);
3)一组损失函数(蓝色部分),利用2)估计出的运动为1)输出的物体分割mask提供监督信号。
在训练过程中,需要三个部分联合工作;在训练后,只需保留1)的物体分割网络,即可用于分割单帧点云。
Figure 2 OGC示意图
对于OGC框架中的物体分割网络和场景流估计网络,我们可以直接利用现有的网络结构,如下图3所示。具体来说:
3.2
OGC Losses
OGC框架的关键,就在于如何利用运动信息为物体分割提供监督信号。为此,我们设计了以下损失函数:
1)Dynamic loss:现实世界中大部分物体的运动都可以用刚体变换来描述。因此在这项损失函数中,我们要求对每个估计出的物体分割mask,其中所包含的点的运动必须服从同一个刚体变换:
上式中,
表示每个物体分割mask上拟合出的刚体变换。如果一个mask实际上包含了两个运动方向不同的物体,这两个物体上点的运动必然不可能服从同一个刚体变换。此时用这两个物体上的点强行拟合出的刚体变换与这些点的实际运动并不一致,这个mask就会被损失函数惩罚。可以看到,dynamic loss能帮助我们区分运动方向不同的物体。但是,如果实际上属于同一个物体的点被分割成两块,即“过度分割”,dynamic loss并不能惩罚这种情况。
2)Smoothness loss:物体上的点在空间中一般都是连接在一起的,否则物体就会断裂。基于这一事实,我们提出了对物体分割mask的平滑性先验,要求一个局部区域内相互邻近的点被分配到同一个物体:
上式中H表示某个点的领域内包含的点的数量。可以看到dynamic loss和smoothness loss起到了相互对抗的效果:前者根据运动方向的不同将点区分开;后者则根据空间中的近邻关系将邻近的点聚合,以抵消潜在的“过度分割”问题。这两项损失函数联合起来,为分割场景中的运动物体提供了充足的监督信号。
3)Invariance loss:我们希望将学习到的运动物体分割充分地泛化到外形相近的静态物体。为此,我们要求物体分割网络在面对处于不同位姿的同一物体时,能够无差别地辨别(分割)该物体。具体来说,我们对同一场景施加两个不同的空间变换(旋转,平移和缩放)v1和v2,使得场景中物体的位姿都发生变化,然后我们要求场景的分割结果保持不变:
Invariance loss能有效地将从运动物体学习到的分割策略泛化到不同位姿的静态物体。
3.3
Iterative Optimization
当我们从运动信息中学会了分割物体,理论上我们可以用估计出的物体分割来提升对运动(场景流)的估计质量,随后从更准确的运动信息中更好地学习分割物体。为实现这一目标,我们提出了如下图4所示的“物体分割-运动估计”迭代优化算法:初始阶段,我们通过FlowStep3D网络估计运动。在每一轮中,我们首先从当前估计出的运动信息学习物体分割;随后用我们的Object-aware ICP算法,基于估计出的物体分割来提升对运动的估计质量,将改善后的运动估计送入下一轮。
Figure 4 “物体分割-运动估计”迭代优化算法示意图
在迭代过程中用到的Object-aware ICP算法,可以看作传统的ICP算法向多物体场景的拓展,算法的具体细节可以参考原文附录A.2。
04
Experiments
Evaluation on Synthetic Datasets
我们首先在SAPIEN数据集和我们在自己合成的OGC-DR / OGC-DRSV数据集上评估了OGC对物体部件分割和室内物体分割任务的效果。从下面两个表格可以看到,在高质量的合成数据集上,OGC不仅领先于传统的无监督运动分割和聚类方法,还达到了接近甚至超越全监督方法的效果。
Figure 5 不同方法在SAPIEN数据集上的定量结果对比
Figure 6不同方法在OGC-DR/OGC-DRSV数据集上的定量结果对比
Evaluation on Real-World Outdoor Datasets
接下来,我们评估OGC在极具挑战性的室外物体分割任务上的表现。首先,我们在KITTI Scene Flow(KITTI-SF)数据集上进行评估。KITTI-SF包含200对点云用于训练,200单帧点云用于测试。实验结果如下表所示:我们的方法达到了与全监督方法接近的优异性能。
Figure 7不同方法在KITTI-SF数据集上的定量结果对比
在实际应用中,有时无法收集到包含运动的序列数据,但我们可以将相似场景中训练出的OGC模型泛化过来。这里,我们将上述KITTI-SF数据集上训练好的OGC模型拿来,直接用于分割KITTI Detection(KITTI-Det)和SemanticKITTI数据集中的单帧点云。注意:KITTI-Det和SemanticKITTI中的点云都是通过雷达采集的,比KITTI-SF中双目相机采集的点云稀疏很多,且KITTI-SF(3769帧)和SemanticKITTI(23201帧)的数据规模都远远大于KITTI-SF。实验结果如下面两张表所示:我们在KITTI-SF上训练的OGC模型能直接泛化到稀疏的雷达点云数据,并取得与全监督方法接近的效果。
Figure 8在KITTI-Det数据集上的定量结果对比(*表示模型在KITTI-SF上训练)
Figure 9在SemanticKITTI数据集上的定量结果对比(*表示模型在KITTI-SF上训练)
Ablation Studies
我们在SAPIEN数据集上对OGC框架的核心技术进行了消融实验:
1)损失函数设计:从下方图表可以看到,OGC的三个损失函数结合使用能带来最好的效果。如果移除dynamic loss,所有点会被分到同一物体;如果移除smoothness loss,会出现“过度分割”的问题。
2)迭代优化算法:可以看到,随着迭代轮数增多,更高质量的运动估计确实带来了更好的物体分割表现。
Figure 10 在SAPIEN数据集上的消融实验(图-左和表-上:损失函数设计;表下:迭代优化算法)
05
Summary
最后总结一下,我们提出了第一个点云上的无监督3D物体分割框架。这个框架的核心是一组基于物体几何形状一致性的损失函数,利用运动信息有效地监督物体分割。我们的方法在完全无标注的点云序列上训练,训练后可以直接用于分割单帧点云,在多种任务场景下都展示出了非常好的效果。未来OGC还可以进一步拓展:
1)当有少量标注数据时,如何将无监督的OGC模型与这些标注数据结合取得更好的性能;
2)当有多帧作为输入时,如何利用多帧信息更好地分割。
References
[1] U. M. Nunes and Y. Demiris. 3D motion segmentation of articulated rigid bodies based on RGB-D data. BMVC, 2018.
[2] C. Jiang, D. P. Paudel, D. Fofi, et al. Moving Object Detection by 3D Flow Field Analysis. TITS, 22(4):1950–1963, 2021.
[3] S. A. Baur, D. J. Emmerichs, F. Moosmann, et al. SLIM: Self-Supervised LiDAR Scene Flow and Motion Segmentation. ICCV, 2021.
[4] B. Cheng, A. G. Schwing, and A. Kirillov. Per-Pixel Classification is Not All You Need for Semantic Segmentation. NeurIPS, 2021.
[5] Y. Kittenplon, Y. C. Eldar, and D. Raviv. FlowStep3D: Model Unrolling for Self-Supervised Scene Flow Estimation. CVPR, 2021.
相关推荐
- 了解Linux目录,那你就了解了一半的Linux系统
-
大到公司或者社群再小到个人要利用Linux来开发产品的人实在是多如牛毛,每个人都用自己的标准来配置文件或者设置目录,那么未来的Linux则就是一团乱麻,也对管理造成许多麻烦。后来,就有所谓的FHS(F...
- Linux命令,这些操作要注意!(linux命令?)
-
刚玩Linux的人总觉得自己在演黑客电影,直到手滑输错命令把公司服务器删库,这才发现命令行根本不是随便乱用的,而是“生死簿”。今天直接上干货,告诉你哪些命令用好了封神!喜欢的一键三连,谢谢观众老爷!!...
- Linux 命令速查手册:这 30 个高频指令,拯救 90% 的运维小白!
-
在Linux系统的世界里,命令行是强大的武器。对于运维小白而言,掌握一些高频使用的Linux命令,能极大提升工作效率,轻松应对各种系统管理任务。今天,就为大家奉上精心整理的30个Linu...
- linux必学的60个命令(linux必学的20个命令)
-
以下是Linux必学的20个基础命令:1.cd:切换目录2.ls:列出文件和目录3.mkdir:创建目录4.rm:删除文件或目录5.cp:复制文件或目录6.mv:移动/重命名文件或目录7....
- 提高工作效率的--Linux常用命令,能够决解95%以上的问题
-
点击上方关注,第一时间接受干货转发,点赞,收藏,不如一次关注评论区第一条注意查看回复:Linux命令获取linux常用命令大全pdf+Linux命令行大全pdf为什么要学习Linux命令?1、因为Li...
- 15 个实用 Linux 命令(linux命令用法及举例)
-
Linux命令行是系统管理员、开发者和技术爱好者的强大工具。掌握实用命令不仅能提高效率,还能解锁Linux系统的无限潜力,本文将深入介绍15个实用Linux命令。ls-列出目录内容l...
- Linux 常用命令集合(linux常用命令全集)
-
系统信息arch显示机器的处理器架构(1)uname-m显示机器的处理器架构(2)uname-r显示正在使用的内核版本dmidecode-q显示硬件系统部件-(SMBIOS/DM...
- Linux的常用命令就是记不住,怎么办?
-
1.帮助命令1.1help命令#语法格式:命令--help#作用:查看某个命令的帮助信息#示例:#ls--help查看ls命令的帮助信息#netst...
- Linux常用文件操作命令(linux常用文件操作命令有哪些)
-
ls命令在Linux维护工作中,经常使用ls这个命令,这是最基本的命令,来写几条常用的ls命令。先来查看一下使用的ls版本#ls--versionls(GNUcoreutils)8.4...
- Linux 常用命令(linux常用命令)
-
日志排查类操作命令查看日志cat/var/log/messages、tail-fxxx.log搜索关键词grep"error"xxx.log多条件过滤`grep-E...
- 简单粗暴收藏版:Linux常用命令大汇总
-
号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部下午好,我的网工朋友在Linux系统中,命令行界面(CLI)是管理员和开发人员最常用的工具之一。通过命令行,用户可...
- 「Linux」linux常用基本命令(linux常用基本命令和用法)
-
Linux中许多常用命令是必须掌握的,这里将我学linux入门时学的一些常用的基本命令分享给大家一下,希望可以帮助你们。总结送免费学习资料(包含视频、技术学习路线图谱、文档等)1、显示日期的指令:d...
- Linux的常用命令就是记不住,怎么办?于是推出了这套教程
-
1.帮助命令1.1help命令#语法格式:命令--help#作用:查看某个命令的帮助信息#示例:#ls--help查看ls命令的帮助信息#netst...
- Linux的30个常用命令汇总,运维大神必掌握技能!
-
以下是Linux系统中最常用的30个命令,精简版覆盖日常操作核心需求,适合快速掌握:一、文件/目录操作1.`ls`-列出目录内容`ls-l`(详细信息)|`ls-a`(显示隐藏文件)...
- Linux/Unix 系统中非常常用的命令
-
Linux/Unix系统中非常常用的命令,它们是进行文件操作、文本处理、权限管理等任务的基础。下面是对这些命令的简要说明:**文件操作类:*****`ls`(list):**列出目录内容,显...
- 一周热门
- 最近发表
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- resize函数 (64)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- mybatis大于等于 (64)
- xcode-select (66)
- mysql授权 (74)
- 下载测试 (70)
- linuxlink (65)
- pythonwget (67)
- androidinclude (65)
- logstashinput (65)
- hadoop端口 (65)
- vue阻止冒泡 (67)
- oracle时间戳转换日期 (64)
- jquery跨域 (68)
- php写入文件 (73)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)