【点云配准】【深度学习】Windows11下GCNet代码Pytorch实现与源码讲解
提示:最近开始在【点云配准】方面进行研究,记录相关知识点,分享学习中遇到的问题已经解决的方法。
文章目录
前言
GCNet是由格灵深瞳公司的Lifa Zhu等人在《Leveraging Inlier Correspondences Proportion for Point Cloud Registration【2022】》【论文地址】一文中提出的模型,通过利用内部对应关系比例来提高基于特征学习的点云配准性能:金字塔层次解码器用于在多个尺度上表征点特征,一致的投票策略用于保持一致的对应关系,以及几何引导的编码模块,用于考虑几何特征。
在详细解析GCNet网络之前,首要任务是搭建GCNet【Pytorch-demo地址】所需的运行环境,并完成模型训练和测试工作,展开后续工作才有意义。
GCNet模型运行环境搭建
在win11环境下安装anaconda环境参考,方便搭建专用于GCNet模型的虚拟环境。
-
查看主机支持的cuda版本(最高)
# 打开cmd,执行下面的指令查看CUDA版本号 nvidia-smi
-
安装GPU版本的torch【官网】。
其他cuda版本的torch在【以前版本】找对应的安装命令。
-
博主安装环境参考
# 创建虚拟环境 conda create -n GCNet python==3.10 # 查看新环境是否安装成功 conda env list # 激活环境 activate GCNet # githup下载GCNet源代码到适合目录内,解压文件 # 分别安装pytorch和torchvision pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 通过清华源安装GCNet所需的第三方包(博主这里因为已经安装了torch,因此删除了requirements中的的torch和open3d) pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorboard pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt # 安装open3d,这里适合博主的是0.9以上 python -m pip install open3d==0.16 # 编译一些额外的自定义包 cd cpp_wrappers sh compile_wrappers.sh # 查看所有安装的包 pip list conda list
安装cpp_wrappers自定义包的过程中可能出现“No module named ‘numpy.distutils._msvccompiler’ in numpy.distutils; trying from distutils building ‘grid_subsampling’ extension”(相似的问题同理解决):
解决方法Lib\site-packages\setuptools_distutils_msvccompiler.py拷贝到Lib\site-packages\numpy\distutils下:
GCNet模型运行
数据集与模型权重下载
其他数据太大了,这里暂时只介绍3DMatch和3DLoMatch数据集下模型的训练、评估和使用。其他数据集太大了。
名称 | 下载地址 | 说明 |
---|---|---|
3DMatch和3DLoMatch数据集 | 【下载地址】 | 两个与三维点云匹配和配准相关的数据集 |
预训练模型权重 | 【 BaiduDisk: vr9g】 | 在3DMatch, 3DLoMatch, Odometry KITTI and MVP-RG数据集上分别训练好的权重 |
打开configs/threedmatch.yaml配置文件,将下载好的3DMatch和3DLoMatch数据集解压并拷贝到root参数指定的工程目录下(建议),也可以自定义修改。
数据集的目录结构:
| -- indoor
| -- train (#82, cats: #54)
| -- 7-scenes-chess
| -- 7-scenes-fire
| -- ...
| -- sun3d-mit_w20_athena-sc_athena_oct_29_2012_scan1_erika_4
| -- test (#8, cats: #8)
| -- 7-scenes-redkitchen
| -- sun3d-home_md-home_md_scan9_2012_sep_30
| -- ...
| -- sun3d-mit_lab_hj-lab_hj_tea_nov_2_2012_scan1_erika
GCNet训练与测试-3DMatch和3DLoMatch数据集
训练
打开configs/threedmatch.yaml配置文件,自定义权重和日志保存路径。
# 开始训练
python train.py configs/threedmatch.yaml
正在训练:
训练好的权重放置在train_logs/3dmatch/checkpoints里。
测试:
-
1. 3DMatch 数据集测试
# --data_root:训练集所在路径 --checkpoint 权重文件保存路径 --vis 显示拼接效果 --no_cuda 不使用gpu参与测试 python eval_3dmatch.py --benchmark 3DMatch --data_root your_path/indoor --checkpoint your_path/3dmatch.pth --saved_path work_dirs/3dmatch [--vis] [--no_cuda] # eg: python eval_3dmatch.py --benchmark 3DMatch --data_root Datasets/indoor --checkpoint train_logs/3dmatch/checkpoints/best_loss.pth --saved_path work_dirs/3dmatch
–vis 显示拼接效果 每测试一组数据就展示一次拼接效果
–no_cuda 不使用gpu参与测试
-
2. 3DLoMatch 数据集测试
# --data_root:训练集所在路径 --checkpoint 权重文件保存路径 --vis 显示拼接效果 --no_cuda 不使用gpu参与测试 python eval_3dmatch.py --benchmark 3DLoMatch --data_root your_path/indoor --checkpoint your_path/3dmatch.pth --saved_path work_dirs/3dlomatch [--vis] [--no_cuda] # eg: python eval_3dmatch.py --benchmark 3DLoMatch --data_root Datasets/indoor --checkpoint train_logs/3dmatch/checkpoints/best_loss.pth --saved_path work_dirs/3dmatch
-
可能出现的错误
“1.UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xae in position 1035: illegal multibyte sequence”
解决方式:Windows打开文件时会默认使用系统的默认编码(gbk)进行解码,这里文件编码格式(utf-8)与默认编码不匹配,需要修改在utils/yaml.py内容。# 将原码 with open(filepath, 'r') as f: # 修改为 with open(filepath, 'r', encoding='utf-8') as f:
2.AttributeError: module ‘numpy’ has no attribute ‘int’
解决方式:在numpy版本更新时numpy.int在NumPy 1.20中已弃用,在NumPy 1.24中已删除,找到报错地方,将numpy.int更改为numpy.int_。# 将原码 mutual_corrs = np.array(mutual_corrs, dtype=np.int) # 修改为 mutual_corrs = np.array(mutual_corrs, dtype=np.int_)
GCNet使用
官方3DMatch示例:源点云向目标点云对齐。
# --src_path 源点云 --tgt_path 目标点云 --checkpoint 模型权重
# voxel_size 体素大小类似点云抽稀 --npts 采样点数目
python demo.py --src_path demo_data/cloud_bin_21.pth --tgt_path demo_data/cloud_bin_34.pth --checkpoint your_path/3dmatch.pth --voxel_size 0.025 --npts 5000
# eg: python demo.py --src_path demo_data/cloud_bin_21.pth --tgt_path demo_data/cloud_bin_34.pth --checkpoint your_path/3dmatch.pth --voxel_size 0.025 --npts 5000
为数据设置适当的体素大小,对具有大量点的点云对的数据设置一个大的体素大小(作用理解成点云抽稀)。
个人数据集示例:源点云向目标点云对齐。
python demo.py --src_path demo_data/src.ply --tgt_path demo_data/tgt.ply --checkpoint 3dmatch.pth --voxel_size 0.5 --npts 2000
总结
尽可能简单、详细的介绍了GCNet的安装流程以及GCNet的使用方法。后续会根据自己学到的知识结合个人理解讲解GCNet的原理和代码。