论文: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
我打算配如下环境:
但我这台服务器实际上装的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'
直接:
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'
直接:
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 installvim ~/.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 installvim ~/.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 installvim ~/.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 installvim ~/.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 installvim ~/.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
结束之后,会出现snapshot文件夹,在/snapshot/waymo/log中可以看到结果:
关于代码的分析可能后续会发。。。。