【CVPR 2024三维点云配准开源代码复现】EYOC——基于渐进距离扩展的无监督远距离点云配准算法


前言

该项目提出了一种名为 EYOC (Extend Your Own Correspondences) 的无人监督远距离点云配准方法,旨在解决传统点云配准方法对姿态标签的依赖性及其在新数据分布上的泛化不足问题。EYOC 的核心创新在于利用渐进式自监督学习,通过多轮训练逐步扩展点云对的配准距离,使得模型能够适应新的点云分布而无需全球姿态标签。算法设计中,通过引入空间过滤和最近邻搜索等策略,有效提高了配准标签的精度。实验结果表明,EYOC 在多个自动驾驶数据集上的表现与有监督方法相当,同时在无标签条件下显示出更强的泛化能力。实验展示了 EYOC 在不同数据集上的显著性能提升,尤其在新数据集上的配准召回率提升了17.4%。


一、Overview of EYOC

在这里插入图片描述
Paper links:https://arxiv.org/abs/2403.03532, CVPR’24
Code links:https://github.com/liuQuan98/EYOC

二、项目复现

1.Requirements

Ubuntu 14.04 or higher
CUDA 11.1 or higher
Python v3.7 or higher
Pytorch v1.6 or higher
MinkowskiEngine v0.5 or higher

2.创建并配置conda虚拟环境

conda create -n eyoc python=3.7 pip=21.1
conda activate eyoc

笔者习惯嫌将项目下载下来,之后使用pycharm打开,在pycahrm的终端进行操作。
在这里插入图片描述

笔者是ubuntu20系统,配置4060显卡

conda install pytorch=1.9.0 torchvision cudatoolkit=11.1 -c pytorch -c nvidia
pip install numpy

在安装以上依赖包的时候,默认开发者们已经配备了梯子,由于网络连接引起的安装失败,此处不做讨论。

pip install -U git+https://github.com/NVIDIA/MinkowskiEngine -v --no-deps --install-option="--blas_include_dirs=${CONDA_PREFIX}/include" --install-option="--blas=openblas"
pip install -r requirements.txt

MinkowskiEngine需要单独安装,其余的包由requirements.txt一起安装。按照官网给我安装命令的顺序,在单独安装MinkowskiEngine的时候会报错,这是由于缺少openblas库。

cannot find -lopenblas: 没有那个文件或目录
collect2: error: ld returned 1 exit status
error: command '/usr/bin/g++' failed with exit code 1

使用下面的指令安装一下即可:

conda install openblas-devel -c anaconda

由于此时还没安装一些基本的依赖包,所以还会有别的报错,比如:

Best match: numpy 2.2.3
Processing numpy-2.2.3.tar.gz
error: Couldn't find a setup script in /tmp/easy_install-yhvpiyl4/numpy-2.2.3.tar.gz

也是一样的思路,补上这个库就行了,看博客的开发者们可以先装requirements.txt,再装这个ME,应该就能避免这个报错,问题不大。

Finished processing dependencies for MinkowskiEngine==0.5.4

到这儿,ME就装好了,下面装requirements.txt。
找个好的节点,开始装就行了,遇到哪个包有问题或者装不上,在requirements.txt注释一下,单独装上就行。


总结

源代码复现笔者遇到的问题都在上面了,运行之后,发现该项目并不适合笔者目前的研究,暂且搁置…

### 关于三维点的方法和研究 #### 一、基于迭代最近点算法(ICP) 在处理3D点云数据时,迭代最近点(Iterative Closest Point, ICP)算法是一种广泛采用的技术。该技术旨在最小化两组几何数据之间的距离差异,从而实现精确匹[^1]。 对于ICP而言,其核心在于寻找源点集与目标点集中对应的最邻近点对,并计算变换矩阵使得这些对应点间的欧氏距离平方和达到最小值。此过程反复执行直至满足收敛条件或最大迭代次数限制为止。 ```python import numpy as np from scipy.spatial import KDTree def icp(source_points, target_points, max_iterations=50, tolerance=1e-4): prev_error = float('inf') for _ in range(max_iterations): tree = KDTree(target_points) distances, indices = tree.query(source_points) transform_matrix = compute_transformation_matrix(source_points, target_points[indices]) source_points = apply_transform(transform_matrix, source_points) current_error = sum(distances)/len(distances) if abs(prev_error - current_error) < tolerance: break prev_error = current_error return source_points def compute_transformation_matrix(src_pts, tgt_pts): H = src_pts.T @ tgt_pts U, _, Vt = np.linalg.svd(H) R = Vt.T @ U.T t = np.mean(tgt_pts - src_pts@R, axis=0).reshape(-1, 1) T = np.eye(4) T[:3,:3] = R T[:3,-1:] = t return T def apply_transform(T, points): ones_col = np.ones((points.shape[0], 1)) homog_points = np.hstack([points, ones_col]).T transformed_homog = T @ homog_points return transformed_homog[:-1].T ``` #### 二、深度学习驱动下的端到端解决方案 近年来,在CVPR会议上出现了许多利用神经网络来解决3D点云问题的研究成果。这类方法通常构建卷积层或其他类型的编码器结构以提取输入点云的空间特征表示;随后设计解码机制完成姿态估计任务或将待对象映射至参考坐标系下[^2]。 例如PointNet++模型能够有效捕捉局部区域内的形状特性并将其聚合为全局描述符,进而辅助后续操作如分类、分割以及此处讨论的刚体运动补偿等应用场合。此外还有其他变种架构比如DeepClosestPoint(DCP),它引入了图注意力机制进一步提升了跨模态间相似度量能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值