点云复现经过
一、复现仓库
核心流程
特征检测——提取关键点
- Harris 3D:这是点云中的三维扩展,基于角点检测的算法。它寻找点云中的角点,这些点在多个方向上都有显著的弯曲。
- SIFT-3D:SIFT(尺度不变特征变换)算法的三维扩展,用于检测点云中的关键点。它可用于匹配不同视角的点云。
- ISS(Intrinsic Shape Signature):ISS算法基于曲率估计,寻找点云中的稳定关键点。它可以有效地检测不同尺度和方向上的关键点。
- SHOT(Signature of Histograms of Orientations):SHOT算法计算每个关键点周围的法线方向直方图,并用于描述点云的局部形状。
- ISS+RIFT:这是ISS(Intrinsic Shape Signature)关键点检测与RIFT(Rotation Invariant Feature Transform)描述子相结合的方法,用于增强关键点的描述性能。
- 3D Harris:类似于Harris 3D,这个算法基于点云中的角点,但可能采用不同的角点检测策略。
- USIP:一种无监督稳定兴趣点检测器,可以在任意变换下从 3D 点云中检测高度可重复且精确定位的关键点,而无需任何地面实况训练数据
特征描述——特征描述子
- FPFH(Fast Point Feature Histograms):FPFH算法结合了点云中每个点的直方图信息,用于描述点云的局部特征。它考虑了点的相对位置和法线信息。
- PFH(Point Feature Histograms):PFH算法扩展了FPFH,更细致地描述点云的局部形状,考虑了点之间的配准信息。
- SHOT:SHOT不仅用于关键点检测,还可用于描述点云的局部结构。它考虑了点云中每个点的法线和相对位置。
- 3D Shape Context:这是一种描述子算法,使用点云中的形状上下文来表示关键点的局部特征。
- Spin Image:Spin Image是一种描述子算法,它将点云中的二维直方图用于描述关键点的局部结构,通常用于点云配准任务。
- Unique Shape Context:这是一种改进的形状上下文算法,用于描述点云中的关键点。它考虑点云中关键点的拓扑和几何信息。
- 4D-FPFH:4D-FPFH(Four-Dimensional Fast Point Feature Histograms)是FPFH的扩展,考虑了关键点的四维直方图来描述点云的局部特征。
- Super3D:Super3D是一种用于描述点云中关键点的多尺度算法,通过考虑点云的多个层次来提高描述子的性能。
特征匹配——关键点匹配
变换估计
RANSAC 详解
最后计算得出的理论模型与测试值的误差最小。最小二乘法的思想。通过计算最小均方差关于参数a、b的偏导数为零时的值。事实上,在很多情况下,最小二乘法都是线性回归的代名词。
遗憾的是,最小二乘法只适合与误差较小的情况。试想一下这种情况,假使需要从一个噪音较大的数据集中提取模型(比方说只有20%的数据时符合模型的)时,最小二乘法就显得力不从心了。
RANSAC算法的输入是一组观测数据(往往含有较大的噪声或无效点),一个用于解释观测数据的参数化模型以及一些可信的参数。RANSAC通过反复选择数据中的一组随机子集来达成目标。被选取的子集被假设为局内点,并用下述方法进行验证:
- 有一个模型适应于假设的局内点,即所有的未知参数都能从假设的局内点计算得出。
- 用1中得到的模型去测试所有的其它数据,如果某个点适用于估计的模型,认为它也是局内点。
- 如果有足够多的点被归类为假设的局内点,那么估计的模型就足够合理。
- 然后,用所有假设的局内点去重新估计模型(譬如使用最小二乘法),因为它仅仅被初始的假设局内点估计过。
- 最后,通过估计局内点与模型的错误率来评估模型。
- 上述过程被重复执行固定的次数,每次产生的模型要么因为局内点太少而被舍弃,要么因为比现有的模型更好而被选用。
3DMatch论文解析
数据集介绍:https://blog.csdn.net/zhulf0804/article/details/110259055
论文介绍:https://xgyopen.github.io/2019/03/20/2019-03-20-imv-pointcloud-3dmatch-paper/
内容 | 描述 |
---|---|
Marvin官网 | 普林斯顿大学维护的深度学习框架。C++,仅依赖CUDA 7.5和cuDNN 5.1 |
论文《一种改进的点云局部几何特征匹配方法_史魁洋》 | |
使用深度学习进行点云匹配(一) | 第1个示例(Demo: Align Two Point Clouds with 3DMatch) |
使用深度学习进行点云匹配(二) | 第2个示例(Converting 3D Data to TDF Voxel Grids) |
使用深度学习进行点云匹配(三) | 第3个示例(Training 3DMatch from RGB-D Reconstructions) |
使用深度学习进行点云匹配(四) | 更换数据跑第1个示例(Demo: Align Two Point Clouds with 3DMatch) |
使用深度学习进行点云匹配(五) | TDF的具体含义、如何训练3DMatch描述子 |
利用深度学习进行点云匹配(六) | 孪生网络,第3个示例(Training 3DMatch from RGB-D Reconstructions) |
KNN算法与Kd树 | |
刚体变换 | |
RANSAC算法详解 | |
回环检测 | |
三维重建中的表面模型构建—TSDF算法 | |
下面是其他的链接 | |
机器人视觉 移动机器人 VS-SLAM ORB-SLAM2 深度学习目标检测 yolov3 行为检测 opencv PCL 机器学习 无人驾驶 | |
一文教你读懂3D目标检测 | |
open3d文档 | 包含点云处理、KD树 |
PointNet & PointNet++论文解析
知乎论文介绍:https://zhuanlan.zhihu.com/p/369059467
https://xgyopen.github.io/2019/04/01/2019-04-01-imv-pointcloud-pointnet-paper/
内容 | 描述 |
---|---|
原始论文:PointNet | PointNet主页 |
代码:pointnet | Py2.7、TF1.0.1、Ubuntu14.04(CUDA8.0、cuDNN5.1) |
CVPR2017口头报告视频 | PointNet |
原始论文:PointNet++ | PointNet++主页 |
代码:pointnet++ | Py2.7/Py3、TF1.2、Ubuntu14.04 |
原始论文:Frustum PointNets | Frustum PointNets主页 |
对于 train.py |
默认参数,实现的是点云分类
在sys.path中添加当前目录(provider.py)、/models目录(pointnet_cls.py)、/utils目录(tf_util.py)
新建/log目录,将pointnet_cls.py、train.py拷贝一份副本至此文件夹做备份,并生成log_train.txt
载入/data中的训练集、测试集(/data/modelnet40_ply_hdf5_2048/train_files.txt、/data/modelnet40_ply_hdf5_2048/test_files.txt)
主体代码(PointNet分类网络):
架构:输入B×N×3,输出B×40,T-Net+分类器
损失:两部分构成(classify_loss + mat_diff_loss * reg_weight)train_one_epoch()函数的思路
读取数据:训练集有5个文件(每个文件中有2048个数据),每个epoch打乱读取这5个文件的顺序,只取每个文件的data键**(2048, 2048, 3)-数据、label键(2048, 1)**-标签
截取data的前NUM_POINT(取1024)个点**(2048, 1024, 3)**
打乱data**(2048, 1024, 3)、label(2048,)**中2048个数据的顺序,并将label展平
算出每个batch的数量num_batches**(64=2048//32)**
对每个batch的数据batch_data
(32, 1024, 3)
通过旋转(rotation)、抖动(jittering)做数据增强
- 旋转:对batch_data中的每个数据**(1024, 3)**旋转不同的3×3矩阵(对应Ry)
- 抖动:
360°
FCGF论文阅读笔记
https://blog.csdn.net/weixin_43977640/article/details/112642898
https://cloud.tencent.com/developer/article/1756250
PointNetLK网络结构由两个部分组成:特征提取网络和LK配准网络。特征提取网络是一个PointNet网络,用于从输入的三维点云中提取特征。LK配准网络是一个多层感知器(MLP),用于从特征中估计变换矩阵。具体来说,特征提取网络由几个全连接层和几个局部特征提取层组成,其中局部特征提取层使用类似于PointNet的架构。LK配准网络由几个全连接层组成,其中最后一层输出一个4x4的变换矩阵。整个网络的输入是两个三维点云,输出是一个变换矩阵,用于将源点云中的点映射到目标点云中的对应点。
卷积之1*1 卷积(残差网络)、2D/3D卷积、转置卷积数学推导、应用实例
https://cloud.tencent.com/developer/article/2289817?areaId=106001