【点云配准】【深度学习】Windows11下GCNet代码Pytorch实现与源码讲解

【点云配准】【深度学习】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的原理和代码。

猜你喜欢

转载自blog.csdn.net/yangyu0515/article/details/136249393