【点云配准】【深度学习】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训练与测试
-
训练:可以根据硬件条件修改代码中部分训练参数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目录下,分别单独保存三个指标下最理想的权重文件:
-
测试:分别对比了深度学习模型配准、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的原理和代码。