点云分割笔记

目录

实例分割(1)——SGPN

实例分割(2)——3D-BoNet

全景分割——Panoptic PolarNet

SemanticKITTI

机器学习基于RANSAC的激光点云分割

车载激光雷达分割

SemanticKITTI数据集

物体分割:


主要分为基于点全连接、点卷积、体素、投影、图卷积、k-d Tree等方法
与图像的CNN网络相比,明显花样更多,并且各有优势,还没有形成一个统一的范式。
除了投影方法之外,其他方法在GPU上的优化目前还不是很好,运行不够高效。


实例分割(1)——SGPN

使用PointNet或者PointNet++作为backbone提取特征
Semantic Prediction分支就是一个语义分割分支,与PointNet一致
Confidence Map分支预测这个点是前景还是背景
Similarity Matrix分支学习每一个点的embedding,相同类别之间互相靠近,不同类别之间互相远离,与图像实例分割中的“自底向上”的方法非常类似

实例分割(2——3D-BoNet

二阶段网络,类似mask-rcnn的结构
第一个阶段预测bounding-box,并输出特征(包含全局特征和点特征)
第二个阶段在预测的bounding-box内,使用点特征和全局特征预测mask
Box的预测比较有特点,是参考的DETR直接输出若干个(24)box,并使用匈牙利匹配来与真值框进行配对,因此是一种稀疏的预测。

全景分割——Panoptic PolarNet

与图像的全景分割类似,同样采用语义分割+实例分割的方式实现
将点云投影至BEV视角,使用2D卷积的backbone
使用PolarNet的极坐标方式,并使用共享权重的全连接来编码特征(简化的pointnet)
经过环形CNN以及Unet的结构来得到最终特征,接上语义分割和实例分割两个head
其中实例分割预测实例中心以及每个点距离实例中心的offset

 

RangeNet++网络

GitHub - PRBonn/lidar-bonnetal: Semantic and Instance Segmentation of LiDAR point clouds for autonomous driving

看起来不错:

GitHub - VirtualRoyalty/PointCloudSegmentation: The research project based on Semantic KITTTI dataset, 3d Point Cloud Segmentation , Obstacle Detection

推理示例:

inference_example.ipynb

SemanticKITTI

  • squeezeseg
  • squeezeseg + crf
  • squeezesegV2
  • squeezesegV2 + crf
  • darknet21
  • darknet53
  • darknet53-1024
  • darknet53-512

可以参考:

大场景三维点云语义分割模型_一只不出息的程序员的博客-CSDN博客_大场景点云分割

机器学习基于RANSAC的激光点云分割

基于RANSAC的激光点云分割_庐陵小子的博客-CSDN博客_ransac点云分割

车载激光雷达分割

1.

GitHub - PRBonn/lidar-bonnetal: Semantic and Instance Segmentation of LiDAR point clouds for autonomous driving

训练标签需要.label格式,测试需要npy格式。

报错代码:

self.saver.restore(self.sess, restore_snap)

解决方法: 

  aaa = tf.train.latest_checkpoint(restore_snap)

  self.saver.restore(self.sess, aaa)
  print("Model restored from " + restore_snap)

OOM了,下次继续调试。

准备数据,是个项目:

https://github.com/PRBonn/semantic-kitti-api

代码:

https://github.com/PRBonn/semantic-kitti-api/blob/master/generate_sequential.py

处理完label还是.label格式
留个疑问:数据处理文件,中,标签处理后的扩展名是到底什么?

data_prepare_semantickitti.py

2RandLA-Net.

2.1

GitHub - HuangCongQing/RandLA-Net-Enhanced: RandLA-Net改进版

tensorflow1.11

SemanticKITTI数据集

2.2

GitHub - tsunghan-mama/RandLA-Net-pytorch: Pytorch Implementation of RandLA-Net (https://arxiv.org/abs/1911.11236)

有预训练,本地跑通了。

可以可视化,针对标注和预测结果都可以。

visualize_SemanticKITTI.py

但是结果不对,

报错代码:num_layer 为4

inputs['neigh_idx'] = []
for tmp in flat_inputs[num_layers: 2 * num_layers]:

flat_inputs[4:2*4]出来的值特别大,neigh_idx越界了。

2.3 torch版本:模型14m

GitHub - qiqihaer/RandLA-Net-pytorch: RandLA-Net's implementation with Pytorch

可以用QingyongHu/RandLA-Net的数据预处理,但是不保存结果。

2.4

RandLA-Net: Efficient Semantic Segmentation of Large-Scale Point Clouds
论文:https://arxiv.org/abs/1911.11236
代码:https://github.com/QingyongHu/RandLA-Net

开源了3种网络预训练

加载预训练报错:TENSORFLOW 导入失败:PROCESS FINISHED WITH EXIT CODE -1073741819 (0XC0000005)

解决方法:

TENSORFLOW PROCESS FINISHED WITH EXIT CODE -1073741819 (0XC0000005)_AI视觉网奇的博客-CSDN博客

1. 简介
提出了RandLA-Net,一个高效轻量的网络可以在大场景点云中直接得到逐点的语义信息。采用随机采样点云而不是复杂的采样策略,为了克服随机采样可能带来的关键特征丢失,一个新颖的局部特征聚合模块被提出。我们的方法可以一次推理(inference)处理一百万个点,并且比现有方法快200x倍。在Semantic3D和SemanticKITTI这两个大场景数据集上做了测试。

2. 主要贡献
1)我们分析并比较了现有的采样策略,发现随机采样(random sampling)是对于大场景点云学习最合适的策略。2)我们提出了高效的局部特征聚合模块可以通过不断提高每个点的感受野自动地保留复杂的局部结构特征。
3)我们证明了显著的内存和计算收益超过基线方法(baselines),并超过了最先进的语义分割方法在多个大场景点云数据集上。

3. 主要方法
1)首先说明了随机采样对于大场景点云的采样是很合适的,对比了几个采样策略,只有随机采样是满足实时性要求的。
2)Local Feature Aggregation:LFA模块
①Local Spatial Encoding:一般的操作,先用kNN找每个点的K个最近邻点,得到相对位置关系的表达,如公式1。在把相对位置的特征和点集本身的特征concatenate起来组成这个点的特征,如图3绿色区域所示。
②Attentive Pooling:大部分现有的方法都是用max/average pooling来做特征的降采样,作者认为基于attention的pooling更好,于是对每个点的特征施加了一个可学习的共享参数的W,得到权重分数(公式2)并与特征相乘。最后将这K(近邻)个特征加在一起(公式3),如图3橘色区域所示。
③Dilated Residual Block:类似ResNet,作者一共用了两层特征聚集模块并做了一个Skip Connection,如图3蓝色区域所示。


4. 实验
实验部分只看了在无人驾驶场景的SemanticKITTI数据集,效果有一定的提高但是有限,benchmark排行榜网(https://competitions.codalab.org/competitions/20331#results),目前最高的mIoU是60.0%。

4年前:

论文
Fast Segmentation of 3D Point Clouds: A Paradigm on LiDAR Data for Autonomous Vehicle Applications

github
https://github.com/VincentCheungM/Run_based_segmentation

不需要ROS的版本
https://github.com/suyunzzz/aiimooc_lesson/tree/c7b16e161af3d998f3ad0cbc3e3e3849f71319d6/week4homework


ros版本
https://blog.csdn.net/suyunzzz/article/details/106292024
 

物体分割:

1.PCT SPCT

来自清华计算机系的团队,开发出了一个全新的PCT网络,相比于目前主流的点云分割模型PointNet,不仅参数量减少,准确度还从89.2%提升到了93.2%。

GitHub - Strawberry-Eat-Mango/PCT_Pytorch: Pytorch implementation of PCT: Point Cloud Transformer

 像是c++

GitHub - Riverside-Software/pct: Build automation for OpenEdge ABL

还没找到测试demo的方法。


PASS3D: Precise and Accelerated Semantic Segmentation for 3D Point Cloud
论文:https://arxiv.org/abs/1909.01643

1. 简介
我们提出了一个两阶段的点云语义分割框架,首先对原始点云去除地面,快速聚类并优化候选点云簇,然后将点云簇进行坐标变化及数据增强,并训练一个点云分割网络得到每个点精确的语义标签。我们一阶段的方法可以在很短时间得到高质量的候选点云簇(proposals),大大降低后续的点云处理量,提高了整体速度。

2. 主要贡献
1)提出一个灵活的两阶段3D点云语义分割框架,结合了传统分割聚类算法和基于深度学习的优势,可以直接在3D空间获得特征。
2)我们的一阶段可以得到精炼的高召回率的候选点云簇,极大降低了后续点云处理的计算量及耗时。
3)我们的数据增广方法可以消除坐标偏差提高表现。
4)在KITTI上测试优于SOTA。

3. 主要方法流程
整体流程如图2所示。

1)Stage-1:Accelerated cluster proposal
①Ground plane fitting:基于两个假设,地面点的分布符合平面,地面点的位置较低。
②Ring-based clustering:激光雷达用ring的信息,根据这个可以设定阈值快速欧式聚类,得到每个点所属的点云簇。③Proposals refinement:对候选点云簇进行优化,如扩大bbox融入更多点,有些点由于距离地面较近被归入了地面,因此这里把它们找回来。最终的候选点云簇如图3所示,相同颜色代表统一簇,不同颜色代表不同簇。

2)Stage-2: Point-wise semantic segmentation
①Data preparation:转换坐标系如图4所示,网络更易收敛。数据增广如图5所示,由于数据的分布(如汽车的朝向等)会带来坐标偏差,因此对每个点云簇进行旋转和翻转变换操作,使得整体的分布是均匀的。
②Learning-based semantic segmentation:使用PointNet++作为backbone(有更强的可以直接替换),输入网络每个点的特征为(x,y,z,intensity,n),n是相对点数。

4. 实验
在KITTI上测试,优于SOTA。一阶段仅仅耗时5ms提出30个候选簇可以得到89.5%的逐点召回率,将原始点云近30k个点降低到5k个点,降低了后续的计算量。


Ground-Aware Point Cloud Semantic Segmentation for Autonomous Driving
论文:https://jianbojiao.com/pdfs/ACMMM.pdf
代码:https://github.com/Jaiy/Ground-aware-Seg

1. 简介
我们提出了意识到地面(ground-aware)的框架来缓解无人驾驶场景激光雷达点云所带来的稀疏性问题。首先分割地面,并使用弱监督隐式地建模地面信息,用新的ground-aware attention module来获取到地面的特征,这个模块可以捕获地面和物体的长期依赖,有助于只有少量点的小物体的语义分割表现。

2. 主要贡献
1)我们提出了一个ground-aware attention网络来对无人驾驶场景的稀疏激光点云做语义分割。
2)我们提出了一个ground-aware attention module来有效的建模地面和物体的长期依赖关系。
3)实验表明我们的方法优于SOTA。

3. 主要方法
1)地面粗分割:将地面分为若干段,每段用RANSAC方法拟合一个平面,最终组成地面。将整个场景分为地面点云和物体点云两部分。
2)Region Feature Extraction:受到图表达的启发,根据原始的几何关系将点云分成若干超点(superpoints)来减少整个点云的规模。在两个点云中都进行graph-based partition(具体算法那没有细讲)。之后对每个点簇(group of points)使用PointNet提取特征。每个点得到一个64维特征,每个group得到一个512维的superpoint特征,拼接在一起得到576维特征。如图2蓝色框所示。
3)Ground-Aware Attention Module:注意力机制可以建模远距离的区域相关关系,我们将其拓展到3D点云中,据我们所知,这是第一次使用交叉注意力方式(cross-attention manner)将注意力机制用在三维点云语义分割中。
①Hard Attention:如图4所示,分别对Nx3(x,y,z)和 Nx4(x,y,z,d_g)的特征输入做特征提取,d_g是点和地面的距离。用attention block来建模这两组特征。
② Soft Attention:点到地面的距离不足以捕捉地面和物体之间的关系,因此将地面点云和物体点云分别提取特征得到g和f。attention的具体操作如公式2-4所示。最终得到N_ox512的特征。
同2中的576维特征拼接在一起送入MLP最终得到K个类别的概率。

4)Ground-Aware Loss Function:样本分布不均衡是这个任务共同的问题(人,车的类别远远小于背景类别),因此提出类别平衡的交叉熵损失loss,如公式5所示。

4. 实验
用了阿里巴巴2018BDCI竞赛的数据集(80000帧)和一个没有开源的公司数据集(3000帧),没有用KITTI的数据集测试。其他方法在这些数据集上的表现应当是作者复现得到的。


SceneEncoder: Scene-Aware Semantic Segmentation of Point Clouds with A Learnable Scene Descriptor
本文提出了一个场景编码模块来实施场景感知指导,提取有意义的全局信息加以利用,以增强全局信息的效果。该模块预测场景描述符,场景描述符学习表示场景中存在的对象的类别,并通过过滤不属于该场景的类别直接指导点级语义分割。另外,为了减少局部区域的分割噪声,本文设计了一个区域相似性损失来将特征传播到具有相同标签的相邻点上,从而提高了点特征的识别能力。

论文还将方法集成到几种网络中,并在ScanNet和ShapeNet基准数据集上进行了广泛的实验。结果表明,该方法大大提高了在baseline上的表现,达到了SOTA。


实验结果

From Planes to Corners: Multi-Purpose Primitive Detection in Unorganized 3D Point Clouds

该文提出了一种新的正交平面及其相交线、关系图和位于三个正交平面相交处的角点的无分割联合估计方法。这种在正交性下的统一场景探索允许许多应用,例如语义平面检测或局部和全局扫描对齐,这反过来可以帮助机器人定位或抓取任务。

本文的两阶段pipelines包括对正交平面进行粗略的联合估计,然后根据正交关系对平面参数进行联合求精。形成了这些图形,为进一步提取可靠的特征如线和角铺平了道路。本文的实验证明了提出的方法在从墙检测到6D跟踪的各种场景中的有效性,无论是在合成数据还是真实数据上。

步骤流程:

Learning and Memorizing Representative Prototypes for 3D Point Cloud Semantic and Instance Segmentation
三维点云语义和实例分割是三维场景理解的关键和基础。由于点集结构的复杂性,点集的分布呈现出非平衡性和多样性,表现为类别不平衡和模式不平衡。因此,深度网络在学习过程中很容易忘记非优势案例,导致学习效果不理想。虽然重新加权可以减少分类好的例子的影响,但在动态训练中不能处理非优势模式。本文提出了一种记忆增强网络来学习和记忆覆盖不同样本的典型原型。特别地,通过记录在小批量训练中看到的模式,引入了一个记忆模块来缓解遗忘问题。学习记忆项目一致地反映了显性和非显性类别和案例的可解释和有意义的信息。因此,可以通过检索存储的原型来增加扭曲的观察和罕见的情况,从而获得更好的性能和泛化。在S3DIS和ScanNetV2两个基准上进行了详尽的实验,证明了该方法在效率和有效性上的优越性。不仅总体精度有了很大提高,而且非优势类也有了很大提高。

JSNet: Joint Instance and Semantic Segmentation of 3D Point Clouds
为了同时解决三维点云的实例和语义分割问题,本文提出了一种新的联合实例和语义分割方法JSNet。首先,建立一个有效的backbone,从原始点云中提取鲁棒特征。其次,为了获得更具鉴别能力的特征,提出了一种点云特征融合模块,对backbone的不同层次特征进行融合。在此基础上,开发了一个联合实例语义分割模块,将语义特征转化为实例嵌入空间,并将转化后的特征与实例特征进一步融合,实现实例分割。同时,该模块还将实例特征聚合到语义特征空间中,促进语义分割。最后,通过对实例嵌入应用简单的mean-shift聚类来生成实例预测。

本文在large-scale 3D indoor point cloud dataset 、S3DIS 和ShapeNet数据集上评估提出的JSNET,并与现有的方法进行比较。实验结果表明,该方法达到了SOTA。JSNET在三维实例分割中,对三维语义预测有了显著的改进,也有利于零件分割。


FuseSeg: LiDAR Point Cloud Segmentation Fusing Multi-Modal Data
本文介绍了一种简单而有效的激光雷达与RGB数据融合方法,并对激光雷达点云进行分割。利用激光雷达传感器的稠密本征距离表示和标定信息,建立了两种输入模式之间的点对应关系。能够将一个域中的特征扭曲并融合到另外一个,因此可以在一个网络中联合利用来自两个数据源的信息。为了证明该方法的优点,本文扩展了点云分割网络squezeseg的RGB特征分支,并将其融合到原始结构中称之为FuseSeg,它使KITTI基准的IoU提高了18%。除了精度的提高,论文还实现了50 fps的实时性能,是KITTI激光雷达数据记录速度的五倍。

————————————————
版权声明:本文为CSDN博主「一只不出息的程序员」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43232556/article/details/106739355

你可能感兴趣的:(3D视觉,pytorch,深度学习,tensorflow)