PCAccumulation从零复现记录(持续更新)

论文:Dynamic 3D Scene Analysis by Point Cloud Accumulation

代码github链接:https://github.com/prs-eth/PCAccumulation


服务器无管理员权限,无法使用apt-get,很多需要从源码手动编译。发现一个很好用的screen命令,即使退出ssh连接程序也会在后台执行,断网也不怕,而且下载比较大的数据集和依赖库的时候,在screen里面后台下载就不用一直等着了。screen非root用户安装。

数据和代码

首先从github上下载代码,用

git clone https://github.com/prs-eth/PCAccumulation.git
cd PCAccumulation

加载两个数据集Waymo和nuScenes并解压,加载checkpoints并解压:

wget --no-check-certificate --show-progress https://share.phys.ethz.ch/~gsg/PCAccumulation/data.zip
unzip data.zip
wget --no-check-certificate --show-progress https://share.phys.ethz.ch/~gsg/PCAccumulation/checkpoints.zip
unzip checkpoints.zip

代码运行说明

官方给的运行命令为:

python main.py configs/waymo/waymo.yaml 10 1 --misc.mode=val --misc.pretrain=checkpoints/waymo.pth --path.dataset_base_local=$YOUR_DATASET_FOLDER

或者:
python main.py configs/nuscene/nuscene.yaml 10 1 --misc.mode=val --misc.pretrain=checkpoints/nuscene.pth --path.dataset_base_local=$YOUR_DATASET_FOLDER

这两个分别是在Waymo数据集和nuscene数据集上的实验,运行main.py,configs目录不用变,这个是两个数据集的配置文件,包含有数据集信息等,10为epoch,1为iteration,--misc.mode为训练模式,有train、test、val, --misc.pretrain为预训练模型的路径,也就是下载的checkpoints所在的路径,这是官方训练好的,你也可以自己训练,--path.dataset_base_local为数据集所在的位置,也就是解压之后的compressed文件夹。因此我运行的waymo数据集命令为:

python main.py configs/waymo/waymo.yaml 10 1 --misc.mode=val --misc.pretrain=checkpoints/waymo.pth --path.dataset_base_local=compressed

环境配置

我打算配如下环境:

  • Python 3.8.3, PyTorch 1.10.2+cu111, CUDA 11.1, gcc 9.4.0, GeForce RTX 3090

但我这台服务器实际上装的CUDA10.1版本,公用的为了不影响别人无法升级,后续会有一些改动,但不影响跑代码。

首先创建一个python3.8的虚拟环境pj:

 conda create -n pj python=3.8   

安装pytorch,查了一下官网没有1.10.2版本,于是从网站上查找:

http://download.pytorch.org/whl/torch_stable.html

选择对应版本:

cu表示cuda11.1,torch版本为1.10.2,cp38表示python3.8

右键复制链接地址,然后直接:

pip install http://download.pytorch.org/whl/cu111/torch-1.8.0%2Bcu111-cp38-cp38-linux_x86_64.whl

或者下载到本地进行安装。

然后下载一些官网提示的包:

pip install pyfilter nestargs pyyaml open3d

运行代码报错:

OSError: libX11.so.6: cannot open shared object file: No such file or directory

这是因为我没有下载这个东西,需要自己手动编译。后来发现....需要编译的东西超级多的。比如:

OSError: libGL.so.1: cannot open shared object file: No such file or directory

OSError: libxcb.so.1: cannot open shared object file: No such file or directory

OSError: libGLdispatch.so.0: cannot open shared object file: No such file or directory

当我尝试安装其中某一个软件包的时候,就会报错其他的依赖包没有安装,于是我追根溯源,找到了安装的源头,一个一个编译(我太难了。。。)

手动下载各种依赖,由于太多了我放在另一个页面中,一定要按照顺序下载(整理的时候可能有些顺序错误需要自己注意一下),因为后面的依赖会依赖前面的依赖,没有管理员权限就是这么麻烦,我是真的会谢。下载地址。

这里的安装步骤为,下载之后,比如 libglx0_1.3.2-1_amd64.deb这个包,则使用命令:

dpkg -i libglx0_1.3.2-1_amd64.deb

就能下载了,如果报错一定是有些依赖包没下,根据提示缺什么补什么就好了。


再次运行代码,这个错误没有了,出现以下错误:

ModuleNotFoundError: No module named 'numba'

PCAccumulation从零复现记录(持续更新)_第1张图片

直接:

pip install numba


运行代码报错:

ModuleNotFoundError: No module named 'torchsparse'

从网站上下载:https://github.com/mit-han-lab/torchsparse

放在PCAccumulation/libs中解压缩:

tar -zxvf torchsparse_master.tar.gz

cd torchsparse_master

python setup.py install

由于我服务器的cuda版本和环境的cuda版本不匹配,所以不能编译,于是,

将/libs/dataset.py中的

from torchsparse.utils.quantize import sparse_quantize

变成:

from libs.torchsparse_master.torchsparse.utils.quantize import sparse_quantize

将/libs/torchsparse_master/torchsparse/__init__.py中的开头添加:

import sys
sys.path.append(r"/opt/data/private/pj/PCAccumulation/libs/torchsparse_master/torchsparse")

将import torchsparse.backends as backends

变成:

import backends as backends

将/libs/torchsparse_master/torchsparse/operators.py中的

from torchsparse.tensor import SparseTensor

变成:

from tensor import SparseTensor

将/libs/torchsparse_master/torchsparse/tensor.py中的

from torchsparse.utils import make_ntuple

变成:

from utils import make_ntuple

将/libs/torchsparse_master/torchsparse/utils/tune.py开头加上:

import sys
sys.path.append(r"/opt/data/private/pj/PCAccumulation/libs/torchsparse_master")

问题以粗暴的方式得以解决。


运行代码报如下错误:

ModuleNotFoundError: No module named 'torch_scatter'

由于版本的原因我不能直接pip下载,选择whl下载:https://pytorch-geometric.com/whl/

下载后直接:

pip install torch_scatter-2.0.9-cp38-cp38-linux_x86_64.whl


报错:

ModuleNotFoundError: No module named 'tensorboardX'

PCAccumulation从零复现记录(持续更新)_第2张图片

直接:

pip install tensorboardX


报错:

ModuleNotFoundError: No module named 'google'

需要下载google.protobuf这里使用源码编译。

首先下载依赖:

下载m4:http://mirrors.kernel.org/gnu/m4/

tar -xzvf m4-1.4.13.tar.gz  #解压
cd m4-1.4.13   #进入目录
./configure --prefix=/opt/data/private/pj/install/m4   #配置,--prefix为设置安装的目录
make   #编译
make install   #安装

手动编译,需要配置环境变量,不然的话安装后续依赖依然会报错,找不到m4,执行:

vim ~/.bashrc

使用 i 进行写操作,在文件中加入:

export PATH=/opt/data/private/pj/install/m4/bin:$PATH

后面的路径为设置的安装路径,然后执行命令使之生效:

source ~/.bashrc

cd ..  #退出目录

下载autoconf:http://mirrors.kernel.org/gnu/autoconf/

tar -xzvf autoconf-2.69.tar.gz
cd autoconf-2.69
./configure --prefix=/opt/data/private/pj/install/autoconf
make
make install

vim ~/.bashrc

export PATH=/opt/data/private/pj/install/autoconf/bin:$PATH

source ~/.bashrc
cd ..     

下载automake:http://mirrors.kernel.org/gnu/automake/

tar -xzvf automake-1.16.tar.gz
cd automake-1.16
./configure --prefix=/opt/data/private/pj/install/automake
make
make install

vim ~/.bashrc

export PATH=/opt/data/private/pj/install/automake/bin:$PATH

source ~/.bashrc
cd ..  

下载libtool:http://mirrors.kernel.org/gnu/libtool/

tar -xzvf libtool-2.4.6.tar.gz
cd libtool-2.4.6
./configure --prefix=/opt/data/private/pj/install/libtool
make
make install

vim ~/.bashrc

export PATH=/opt/data/private/pj/install/libtool/bin:$PATH

source ~/.bashrc
cd ..  

下载protobuf:https://github.com/google/protobuf

unzip protobuf-master.zip 或者tar -zxvf protobuf-master.tar.gz 解压到protobuf

cd protobuf

./autogen.sh   #自动生成configure配置文件

./configure --prefix=/opt/data/private/pj/install/protobuf

make
make install

vim ~/.bashrc

export PATH=/opt/data/private/pj/install/protobuf/bin:$PATH

source ~/.bashrc
cd ..  


再次运行代码,报错:

RuntimeError: Ninja is required to load C++ extensions

需要安装ninja,它也依赖于上面安装的m4这些,还需要安装re2c

下载re2c:http://re2c.org/index.html#download

tar -xzvf re2c-2.0.tar.gz
cd re2c-2.0
./configure --prefix=/opt/data/private/pj/install/re2c
make
make install

vim ~/.bashrc

export PATH=/opt/data/private/pj/install/re2c/bin:$PATH

source ~/.bashrc
cd ..  

下载ninja:https://github.com/ninja-build/ninja/releases

tar -xzvf ninja-1.10.2.tar.gz

cd ninja-1.10.2

./configure.py --bootstrap

然后把ninja-1.10.2所在的目录加入环境变量

vim ~/.bashrc

export PATH=/opt/data/private/pj/libs/ninja-1.10.2:$PATH

source ~/.bashrc
cd .. 

输入ninja --version如果出现版本号就代表安装成功。


 报错:

ninja: build stopped: subcommand failed.

应该是编译错误,cuda版本的问题,执行:

export TORCH_CUDA_ARCH_LIST="7.5"


报错:

ImportError: libcudart.so.10.1: cannot open shared object file: No such file or directory

conda install cudatoolkit=10.1


出现这个就表示成功了。正在eval中~~~

结束之后,会出现snapshot文件夹,在/snapshot/waymo/log中可以看到结果:

PCAccumulation从零复现记录(持续更新)_第3张图片

 关于代码的分析可能后续会发。。。。

 

你可能感兴趣的:(pytorch,计算机视觉,linux)