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

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

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


文章目录

  • 【点云配准】【深度学习】Windows11下PCRNet代码Pytorch实现与源码讲解
  • 前言
  • PCRNet模型运行环境搭建
  • PCRNet模型运行
    • 数据集与模型权重下载
    • PFNet训练与测试
  • 总结


前言

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数据集解压并拷贝到当前工程目录下(建议),这里博主对数据集文件夹进行了重命名。

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

PFNet训练与测试

  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的原理和代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/692096.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux内核解读

来自鹅厂架构师 作者:aurelianliu 工作过程中遇到的调度、内存、文件、网络等可以参考。 1.os运行态 X86架构,用户态运行在ring3,内核态运行在ring0,两个特权等级。 (1)内核、一些特权指令,例…

debug - 只要在内存中有显示相关的数据, 就会被CE找到

文章目录 debug - 只要在内存中有显示相关的实际数据, 就会被CE找到概述笔记demo实现demo运行效果用CE查找实际数据地址找到自己的调试点 - 方法1找到自己的调试点 - 方法2打补丁备注END debug - 只要在内存中有显示相关的实际数据, 就会被CE找到 概述 自己写了一个demo, 想验…

人工智能_PIP3安装使用国内镜像源_安装GIT_普通服务器CPU_安装清华开源人工智能AI大模型ChatGlm-6B_002---人工智能工作笔记0097

接着上一节来看,可以看到,这里 创建软连接以后 [root@localhost Python-3.10.8]# ln -s /usr/local/python3/bin/python3 /usr/bin/python3 [root@localhost Python-3.10.8]# python3 -V Python 3.10.8 [root@localhost Python-3.10.8]# pwd /usr/local/Python-3.10.8 [root@…

Vue26 内置标签 v-text v-html

实例 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>v-text指令</title><!-- 引入Vue --><script type"text/javascript" src"../js/vue.js"></script></head><…

第一件事 什么是 Java 虚拟机 (JVM)

1、什么是虚拟机&#xff1f; - 这个其实是一个挺逗的事情&#xff0c;说白了&#xff0c;就是基于某个硬件架构&#xff0c;在这个硬件部署了一个操作系统&#xff0c;再构架一层虚拟的操作系统&#xff0c;这个新构架的操作系统就是虚拟机。 不知道的兄弟姐妹们&#xff0c;…

重学Java 18.学生管理系统项目

臣无祖母&#xff0c;无以至今日&#xff0c;祖母无臣&#xff0c;无以终余年 母孙二人&#xff0c;更相为命&#xff0c;是以区区不能废远 —— 陈情表.李密 —— 24.2.20 一、编写JavaBean public class Student {//学号private int id;//姓名private String name;//年龄pr…

Codeforces Round 925 (Div. 3)(A,B,C,D,E,F,G)

比赛链接 这场打的很顺&#xff0c;感觉难度和 div 4 差不多&#xff0c;不是很难。D题稍微考了考同余的性质&#xff0c;E题直接模拟过程即可&#xff0c;F题也可以暴力模拟或者拓扑排序&#xff0c;G题是个数学题&#xff0c;是个简单隔板法。A到F题都可以直接模拟就有点离谱…

「WinCC报警系统专题」简述“消息系统”

WinCC通过报警给操作员提供了有关过程故障和错误的信息。它们有助于尽早检测重要情况和避免停机时间。 一、消息系统 消息&#xff08;报警&#xff09;系统由组态和运行系统组件组成。 1、组态系统 报警记录编辑器&#xff08;如图1所示&#xff09;是报警系统的组态组件。报…

docker (九)-进阶篇-docker-compos最佳实践部署zabbix

一 部署docker环境 关闭防火墙、selinux、开启docker&#xff0c;并设置开机自启动 注意点&#xff1a;docker部署的时候&#xff0c;bip要指定&#xff0c;不然会导致虚拟机ip和容器ip冲突&#xff0c;ssh连不上虚拟机 部署请参考 docker &#xff08;二&#xff09;-yum…

为什么程序员不能一次性写好,需要不停改bug?

写程序不是一次性完成的原因有很多&#xff0c;其中包括了解不充分、需求变更、复杂性、人为因素等多个方面的原因。 需求不明确&#xff1a; 在项目一开始&#xff0c;对需求可能存在歧义或不完整的理解。有时候&#xff0c;业务需求会在开发过程中发生变化&#xff0c;导致…

Go应用性能分析实战

Go很适合用来开发高性能网络应用&#xff0c;但仍然需要借助有效的工具进行性能分析&#xff0c;优化代码逻辑。本文介绍了如何通过go test benchmark和pprof进行性能分析&#xff0c;从而实现最优的代码效能。原文: Profiling Go Applications in the Right Way with Examples…

【Vuforia+Unity】AR03-圆柱体物体识别

1.创建数据库模型 这个是让我们把生活中类似圆柱体和圆锥体的物体进行AR识别所选择的模型 Bottom Diameter:底部直径 Top Diameter:顶部直径 Side Length:圆柱侧面长度 请注意&#xff0c;您不必上传所有三个部分的图片&#xff0c;但您需要先为侧面曲面关联一个图像&#…

工具分享:在线键盘测试工具

在数字化时代&#xff0c;键盘作为我们与计算机交互的重要媒介之一&#xff0c;其性能和稳定性直接影响到我们的工作效率和使用体验。为了确保键盘的每个按键都能正常工作&#xff0c;并帮助用户检测潜在的延迟、连点等问题&#xff0c;一款优质的在线键盘测试工具显得尤为重要…

Java后端底座从无到有的搭建(随笔)

文章目录 开发模式的演变草创时期1.0时期&#xff08;基座时期&#xff09;1.1时期&#xff08;低代码时期&#xff09;2.0时期&#xff08;无代码时期&#xff09; 前言&#xff1a;本文是笔者在初创公司&#xff0c;一年多来Java后端服务底座搭建过程的总结&#xff0c;如有不…

四旋翼无人机控制-零散笔记整理

四旋翼无人机控制-零散笔记整理 说明仿真框架 说明 这是低创文章&#xff0c;本意是整理本科留下来的一堆零碎的纸质笔记&#xff0c;整理完就把纸质的扔了。所以前后不连贯&#xff0c;也可能有错误&#xff0c;图片都是直接拍的笔记照片&#xff0c;很丑。如果想系统学习的可…

【C++】STL- > string类(超详解!!!)

文章目录 前言1、string类的出现1.1 C语言中的字符串1.2 平时使用 2. 标准库中的string类2.1 string类的常用文档&#xff08;重要&#xff09;&#xff01;&#xff01;&#xff01;&#xff01;2.2 string类的常用接口说明(接口原型我这里就不展示了&#xff0c;文档中都有可…

前后端分离(delivery-management)部署文档

1. 前端项目:delivery-management 1.1. 前端项目打包 执行命令:npm run build 或者yarn run build,生成dist目录。 构建流程如下图: 1.2. 文件上传 将打包好的前端项目(dist目录),上传到服务器,并拷贝到nginx安装目录html目录下。 执行上传命令(sftp):put -r E:\…

展示用HTML编写的个人简历信息

展示用HTML编写的个人简历信息 相关代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document…

Windows 自带的 Linux 子系统(WSL)安装与使用

WSL官网安装教程&#xff1a; https://learn.microsoft.com/zh-cn/windows/wsl/install Windows 自带的Linux子系统&#xff0c;比用VM什么的香太多了。可以自己看官方教程&#xff0c;也可以以下步骤完成。 如果中间遇到我没遇到的问题百度&#xff0c;可以在评论区评论&#…

Redis(03)——发布订阅

基础命令 基于频道 publish channel message&#xff1a;将信号发送到指定的频道pubsub subcommand [argument [argyment]]&#xff1a;查看订阅或发布系统状态subscribe channel [channel]&#xff1a;订阅一个或多个频道的信息unsubscribe [channel [channel]]&#xff1a;退…