Ubuntu23.10系统配置PointNeXt运行环境(OpenPoints)教程

本文介绍了PointNeXt,PointNet的后续版本,它在NeurIPS上提出,指出PointNet性能的瓶颈主要在于训练策略和模型扩展,而非网络结构。作者开源了一个新的点云深度学习框架,详细指导如何在Ubuntu系统上部署和解决依赖库版本问题,包括CUDA、gcc/g++和特定库的编译问题。
摘要由CSDN通过智能技术生成

        众所周知,PointNet是基于点的点云深度学习算法的祖师爷,虽然已经有返璞归真的PointMLP、黑科技自注意力机制PointTransformer等等后来者,但是PointNet的思路依然在不断的被引用和延伸。

        在2022年的顶会NeurIPS上,Guocheng Qian 等人提出了PointNeXt,字面意思上看,就是PointNet的下一个版本。该文章系统地探讨了PointNet网络的性能瓶颈,并认为PointNet++的瓶颈在于训练策略和模型缩放,而不是之前广泛认为的网络结构。因此仅仅通过改进训练策略,PointNet++的性能就能大幅度提升,而如果进一步扩展模型的规模,精度也能有很大改善。作者将这种改进称为PointNet++的下一个版本(NeXt),即PointNeXt。

论文地址: https://arxiv.org/abs/2206.04670

代码实现:https://github.com/guochengqian/PointNeXt

在线文档: OpenPoints

        除了模型本身,作者在github上还开源了一个新的点云深度学习框架,可以直接训练和测试近几年的一些热门模型,比如PointNet++、PointMLP、本文提出的PointNeXt等。本文的目的不是解析论文和代码,而是教你如何在一台新版本的Ubuntu系统PC上完成该模型的环境部署, 尤其涉及到如何解决烦人的依赖库版本问题。

一、基本操作

        首先,按照README文档中的提示,我们需要运行以下代码,从github的仓库中克隆源代码,然后使用install.sh脚本来一键完成conda环境部署、依赖库的安装(哈哈,想得美XD)。

git clone git@github.com:guochengqian/PointNeXt.git
cd PointNeXt
source install.sh

        这里需要注意,代码给出的克隆方式需要通过SSH密钥验证,如果没有配置的话,需要前往github的源代码地址,选择HTTPS方式克隆,或者直接手动下载PointNeXt和OpenPoints两个仓库的代码并放到一起。如果想添加SSH密钥到github账户,请参考:Github配置SSH密钥连接(附相关问题解决) - 知乎引言当前,通过Git在本地仓库和远程仓库(如Github)之间进行操作,已不再支持密码验证,而是转为通过更安全的SSH密钥验证方式。 因此,本文将介绍如何生成SSH密钥以及将其添加到Github中,此外也会介绍配置过程中…icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/628727065

        推荐添加一个自己的SSH密钥,这样以后都可以用git一键部署,实测如果用HTTPS的git命令部署,OpenPoints框架的源码将不会被获取,还需要单独下载后放入PointNeXt源码目录。 

二、解决Cuda版本问题

        从git仓库克隆出源代码之后,按照在线文档提示,我们需要在系统中安装11.3版本的cuda。注意,如果我们想用install.sh脚本部署,必须在base环境中也安装指定的11.3版本cuda,只在虚拟环境中安装是无效的,安装时会自动创建新的虚拟环境覆盖掉,然后报错。

        cuda11.3版本的官方下载链接如下:CUDA Toolkit 11.3 Downloads | NVIDIA Developericon-default.png?t=N7T8https://developer.nvidia.com/cuda-11.3.0-download-archive        此处新版本(实测为22.04之后)的Ubuntu系统埋下了一个新坑,如果使用deb文件安装旧版本cuda,无论选择Local下载到本地还是Network在线安装,都会被系统强制更新到最新版。我的Ubuntu23.10就会把cuda强制更新到最新的12.4版本,导致安装脚本install.sh无法运行。因此,切记此处选择系统版本为Ubuntu后,选择runfile(local)下载后安装

三、解决gcc和g++版本问题

        把Cuda11.3装好后,我们就可以运行install.sh安装脚本了。这时,如果直接运行,会弹出gcc版本的报错,提示该脚本无法运行在gcc10以后的版本上。而ubuntu23.10自带的gcc已经是13版本了,因此我们需要调整自己系统的gcc版本。在这里不推荐一些强行修改文件的办法,因为这可能会导致显示的gcc和实际运行的版本不一致,为之后其他环境的配置造成问题。

        以所需的gcc10为例,我们首先把gcc10和g++10安装到系统里:

sudo apt-get install gcc-10 g++-10

        然后将其添加到配置选项中,并设置其优先级为100(最高):

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 100

         这时,输入命令,查看系统中已安装的gcc版本并设置默认版本:

sudo update-alternatives --config gcc

        运行后会出现选项,输入数字选择刚刚安装的gcc10即可。 对于g++,也只需要把命令中的gcc换成g++,即可调整版本。

有 3 个候选项可用于替换 gcc (提供 /usr/bin/gcc)。

  选择       路径           优先级  状态
------------------------------------------------------------
  0            /usr/bin/gcc-9    100       自动模式
  1            /usr/bin/gcc-10   100       手动模式
  2            /usr/bin/gcc-13   100       手动模式
* 3            /usr/bin/gcc-9    100       手动模式

要维持当前值[*]请按<回车键>,或者键入选择的编号:


         使用命令gcc -v(g++同理),可以看到此时系统的gcc(g++)版本已经切换,可以顺利运行脚本。

四、解决模块Chamfer编译报错问题

        运行安装脚本,会自动创建一个conda环境并以pip方式安装requirements中的依赖库。然而,在Openpoints的文件夹中我们可以看到一个cpp文件夹,这里是一些c语言编写的加速库,里面有setup.py文件来把它们打包安装到环境中。

        然而在Ubuntu23.10环境下,即使降级了gcc和setuptool,在打包chamfer_dist(倒角距离)计算模块时,依然会出现大段的不明报错信息:

FAILED: /home/zhou/下载/PointNeXt/openpoints/cpp/chamfer_dist/build/temp.linux-x86_64-3.7/chamfer.o 
/usr/local/cuda-11.3/bin/nvcc  -I/home/zhou/anaconda3/envs/openpoints/lib/python3.7/site-packages/torch/include -I/home/zhou/anaconda3/envs/openpoints/lib/python3.7/site-packages/torch/include/torch/csrc/api/include -I/home/zhou/anaconda3/envs/openpoints/lib/python3.7/site-packages/torch/include/TH -I/home/zhou/anaconda3/envs/openpoints/lib/python3.7/site-packages/torch/include/THC -I/usr/local/cuda-11.3/include -I/home/zhou/anaconda3/envs/openpoints/include/python3.7m -c -c '/home/zhou/下载/PointNeXt/openpoints/cpp/chamfer_dist/chamfer.cu' -o '/home/zhou/下载/PointNeXt/openpoints/cpp/chamfer_dist/build/temp.linux-x86_64-3.7/chamfer.o' -D__CUDA_NO_HALF_OPERATORS__ -D__CUDA_NO_HALF_CONVERSIONS__ -D__CUDA_NO_BFLOAT16_CONVERSIONS__ -D__CUDA_NO_HALF2_OPERATORS__ --expt-relaxed-constexpr --compiler-options ''"'"'-fPIC'"'"'' -DTORCH_API_INCLUDE_EXTENSION_H '-DPYBIND11_COMPILER_TYPE="_gcc"' '-DPYBIND11_STDLIB="_libstdcpp"' '-DPYBIND11_BUILD_ABI="_cxxabi1011"' -DTORCH_EXTENSION_NAME=chamfer -D_GLIBCXX_USE_CXX11_ABI=0 -gencode=arch=compute_75,code=compute_75 -gencode=arch=compute_75,code=sm_75 -std=c++14
/usr/include/linux/types.h:12:27: error: expected initializer before ‘__s128’
   12 | typedef __signed__ __int128 __s128 __attribute__((aligned(16)));
      |                           ^~~~~~

        从报错信息中看,新版本ubuntu系统的类型定义头文件发生了变化,新增了一些类型,导致编译不过。由于系统文件不敢乱动,无奈只好远程一台Ubuntu20的服务器,编译成功并打包了whl文件,使用pip成功安装。编译好的whl文件见置顶,至此环境配置完成,可顺利运行框架提供的算法模型。

可选:手动下载数据集

        在官方在线文档中,提示会在运行时自动下载所需的数据集,然而由于众所周知的原因,国内可能无法实现。同时,在使用modelnet40做分类任务的时候,ubuntu23.10会直接跳过下载过程,导致Numpy读取数据时报错。

        分类任务使用的数据集为modelnet40_ply_hdf5_2048,下载地址为:

https://shapenet.cs.stanford.edu/media/modelnet40_ply_hdf5_2048.zipicon-default.png?t=N7T8https://shapenet.cs.stanford.edu/media/modelnet40_ply_hdf5_2048.zip        下载后解压到data文件夹。

        语义分割使用的数据集为s3dis,下载地址为:

https://drive.google.com/uc?id=1MX3ZCnwqyRztG1vFRiHkKTz68ZJeHS4Yicon-default.png?t=N7T8https://drive.google.com/uc?id=1MX3ZCnwqyRztG1vFRiHkKTz68ZJeHS4Y        使用方法同上。

        

  • 18
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周_必_成

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值