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

本文详细描述了如何在Windows11环境下使用Pytorch实现PCRNet点云配准模型,包括环境设置、数据集准备、模型权重下载、训练过程以及常见问题的解决方案。作者还展示了模型的训练效果与其他配准方法的对比。
摘要由CSDN通过智能技术生成

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

提示:最近开始在【点云配准】方面进行研究,记录相关知识点,分享学习中遇到的问题已经解决的方法。



前言

PCRNet是由卡内基梅隆大学的Sarode, Vinit等人在《PCRNet: Point Cloud Registration Network using PointNet Encoding【2019】》【论文地址】一文中提出的模型,使用PointNet对点云提取全局特征,不需要计算点云之间的一一对应关系,快速实现了点云的配准。
在详细解析PCRNet网络之前,首要任务是搭建PCRNet【Pytorch-demo地址】所需的运行环境,并完成模型训练和测试工作,展开后续工作才有意义。

博文使用的代码是其他作者用pytorch改写的,非原论文作者源码


PCRNet模型运行环境搭建

在win11环境下安装anaconda环境参考,方便搭建专用于PCRNet模型的虚拟环境。

  • 查看主机支持的cuda版本(最高)
    # 打开cmd,执行下面的指令查看CUDA版本号
    nvidia-smi
    
  • 安装GPU版本的torch【官网】,PyTorch的cuda版本与系统自带的cuda版本必须一致。
    其他cuda版本的torch在【以前版本】找对应的安装命令。
  • 博主安装环境参考
    # 创建虚拟环境
    conda create -n PCRNet python==3.10
    # 查看新环境是否安装成功
    conda env list
    # 激活环境
    activate PCRNet
    # githup下载MiVOS源代码到适合目录内,解压文件
    # 分别安装pytorch和torchvision
    pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
    # 通过清华源安装PCRNet所需的第三方包(博主这里因为已经安装了torch,因此删除了requirements中的的torch==1.4.0)
    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
    # 安装open3d,这里适合博主的是0.9以上
    python -m pip install open3d==0.16
    # 安装自定义的包emd loss
    cd loss/cuda/emd_torch & python setup.py install
    # 查看所有安装的包
    pip list
    conda list
    

安装自定义的包 emd loss 过程中可能出现的问题

解决方法:只安装了CUDA的运行环境,需要再安装开发环境,因此按照下图进行了安装。

正确安装成功

部分错误的解决可能需要安装ninja【参考】,但是也会引入新的错误,博主在安装 emd loss 过程中不需要安装ninja。


PCRNet模型运行

数据集与模型权重下载

名称下载地址说明
modelnet40数据集下载地址ModelNet40是一个常用的三维物体识别数据集,用于训练和评估三维深度学习模型。
预训练模型权重Complete: c4z7】 【Paritial: pcno】在modelnet40数据集训练好的权重

将下载好的modelnet40数据集解压并拷贝到当前工程目录下(建议),这里博主对数据集文件夹进行了重命名。

将下载好的预训练权重(训练好的)拷贝到当前工程目录下(建议),这里博主对预训练权重文件进行了重命名。

PCRNet训练与测试

  1. 训练:可以根据硬件条件修改代码中部分训练参数epochs和batch-size修改训练次数和训练的batchsize等,详细的代码内容将在后续博文中介绍。

    # 源码参考命令 root:数据集的位置 CUDA_VISIBLE_DEVICES:使用gpu 0
    CUDA_VISIBLE_DEVICES=0 python modelnet40_train.py --root your_data_path/modelnet40_ply_hdf5_2048
    # 博主执行命令 root的modelnet40_ply_hdf5_2048是原始文件名,博主这里是因为重命名
    python modelnet40_train.py --root modelnet40 
    

    windows下在custom_train.py文件开头添加os.environ[‘CUDA_VISIBLE_DEVICES’] =‘0’,不在命令行使用CUDA_VISIBLE_DEVICES=0。

    正在训练:

    训练权重保存在work_dirs\models\checkpoints目录下,分别单独保存三个指标下最理想的权重文件:

  2. 测试:分别对比了深度学习模型配准、icp配准和fgr配准方法。

    # 深度学习模型配准
    # 源码参考命令 root:数据集的位置 checkpoint:预训练权重的位置 cuda:使用cuda
    python modelnet40_evaluate.py --root your_data_path/modelnet40_ply_hdf5_2048 --checkpoint your_ckpt_path/test_min_loss.pth --cuda
    # 博主执行命令 root的modelnet40_ply_hdf5_2048是原始文件名,博主这里是因为重命名了,checkpoint同理
    python modelnet40_evaluate.py --root modelnet40 --checkpoint Complete_test_min_loss.pth --cuda
    

    # 深度学习模型配准
    # 源码参考命令,root:数据集的位置 checkpoint:预训练权重的位置 show:展示结果
    python modelnet40_evaluate.py --root your_data_path/modelnet40_ply_hdf5_2048 --checkpoint your_ckpt_path/test_min_loss.pth --show
    # 博主执行命令,root的modelnet40_ply_hdf5_2048是原始文件名,博主这里是因为重命名了,checkpoint同理
    python modelnet40_evaluate.py --root modelnet40 --checkpoint Complete_test_min_loss.pth --show
    


    其中绿色点云为源点云,红色点云为参照点云,蓝色点云为配准后的源点云,可以看到蓝色点云与红色点云完全对齐,这表明训练效果极佳。

    上述俩个指令的没有什么区别,下面命令只是可视化展现了每个点云的配准效果。

    # icp配准
    # 源码参考命令,root:数据集的位置 method:使用的方法(默认是深度学习的)
    python modelnet40_evaluate.py --root your_data_path/modelnet40_ply_hdf5_2048 --method icp
    # 博主执行命令,root的modelnet40_ply_hdf5_2048是原始文件名,博主这里是因为重命名了,checkpoint同理
    python modelnet40_evaluate.py --root modelnet40 --method icp
    

    # icp配准
    # 博主执行命令,root的modelnet40_ply_hdf5_2048是原始文件名,博主这里是因为重命名了,checkpoint同理
    python modelnet40_evaluate.py --root modelnet40 --method icp --show
    


    可以看到蓝色点云与红色点云没有完全对齐,这表明效果不是很理想。

    # fgr配准
    # 源码参考命令,root:数据集的位置 method:使用的方法(默认是深度学习的)
    python modelnet40_evaluate.py --root your_data_path/modelnet40_ply_hdf5_2048 --method fgr  --normal
    # 博主执行命令,root的modelnet40_ply_hdf5_2048是原始文件名,博主这里是因为重命名了,checkpoint同理
    python modelnet40_evaluate.py --root modelnet40 --method fgr  --normal
    

    # fgr配准
    # 博主执行命令,root的modelnet40_ply_hdf5_2048是原始文件名,博主这里是因为重命名了,checkpoint同理
    python modelnet40_evaluate.py --root modelnet40 --method fgr  --normal --show
    


    可以看到蓝色点云与红色点云完全对齐,这表明效果极佳。

可能出现的问题1: open3d版本问题。

解决方法: 将icp.py中的o3d.registration更改成o3d.pipelines.registration。
可能出现的问题2: open3d版本问题。

解决方法: 将fgr.py中的o3d.pipelines.registration.registration_fast_based_on_feature_matching更改成o3d.pipelines.registration.registration_fgr_based_on_feature_matching。

暂时没有个人数据集可以训练


总结

尽可能简单、详细的介绍了PCRNet的安装流程以及PCRNet的使用方法。后续会根据自己学到的知识结合个人理解讲解PCRNet的原理和代码。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值