【LiDAR Segmentation】DS-Netの環境構築

スポンサーリンク

LiDAR-based Panoptic Segmentation via Dynamic Shifting Network

dockerでDS-Netを使うための環境構築を行う。

GitHub - hongfz16/DS-Net: [CVPR 2021/TPAMI 2023] Rank 1st in the public leaderboard of SemanticKITTI Panoptic Segmentation (2020-11-16)
Rank 1st in the public leaderboard of SemanticKITTI Panoptic Segmentation (2020-11-16) - hongfz16/DS-Net

docker container作成

以下のコマンドを実行。pytorchのバージョンは1.5, cuda=10.1, cudnn=7。

docker run -it \
    --name dsnet2 \
    --gpus all \
    --env DISPLAY=$DISPLAY \
    --env XAUTHORITY=$XAUTH \
    --volume /tmp/.X11-unix:/tmp/.X11-unix \
    --volume /home:/home \
    --volume /usr/local:/usr/local \
    --workdir ~ \
    pytorch/pytorch:1.5-cuda10.1-cudnn7-runtime

コンテナ内で以下をインストールする。
Dockerfileを書いてimageを作る際にインストールするのがより良さそう。

  • apt install
    • gcc
    • g++
    • build-essential
    • git
    • cmake=3.13
    • wget
    • libboost-all-dev
  • pip
    • easydict
    • hdbscan
    • numba
    • numpy
    • pyyaml
    • scikit-learn
    • scipy
    • tensorboard=2.3.0
    • torchvision=0.6.0
    • torch-cluster=1.5.7
    • torch-scatter=1.3.2
    • tqdm
  • spconv=1.1

cmakeをインストール

cmake=3.13のインストールは以下のコマンドで行う。

wget https://cmake.org/files/v3.13/cmake-3.13.4-Linux-x86_64.sh
chmod +x cmake-3.13.4-Linux-x86_64.sh
./cmake-3.13.4-Linux-x86_64.sh --prefix=/usr/local --skip-license

spconvをインストール

spconv=1.1をgitからcloneしてインストールする。

GitHub - traveller59/spconv at v1.1
Spatial Sparse Convolution Library. Contribute to traveller59/spconv development by creating an account on GitHub.

v1.1を使うためにspconvディレクトリの中で以下のコマンドを実行する。

git checkout v1.1

third_partyディレクトリにあるpybind11の中身が空になっているので以下のサイトからgit cloneする。

GitHub - pybind/pybind11 at 085a29436a8c472caaaf7157aa644b571079bcaa
Seamless operability between C++11 and Python. Contribute to pybind/pybind11 development by creating an account on GitHub.

そして、ディレクトリに入り以下のコマンドを実行してチェックアウトする。

git checkout 085a294

以下のコマンドを実行してspconvをインストールするが、下に示すようなエラーが出てくる。

python setup.py bdist_wheel
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
CUDA_CUBLAS
    linked by target "cuhash" in directory /root/spconv/src/cuhash
    linked by target "spconv" in directory /root/spconv/src/spconv

このエラーはlibcublas.soが見つからないといったもの。
cuda10.1を使っており、それらのファイルはcuda10.2の方になぜかあるようだった。
以下のコマンドで探すとcuda-10.2以下に入っていることが分かる。

find /usr -name libcublas*

/usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublas.so.10
/usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublasLt.so.10
/usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublasLt_static.a
/usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublasLt.so.10.2.3.254
/usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublas.so
/usr/local/cuda-10.2/targets/x86_64-linux/lib/stubs/libcublas.so
/usr/local/cuda-10.2/targets/x86_64-linux/lib/stubs/libcublasLt.so
/usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublasLt.so
/usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublas_static.a
/usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublas.so.10.2.3.254
/usr/local/cuda-10.1/doc/man/man7/libcublas.7
/usr/local/cuda-10.1/doc/man/man7/libcublas.so.7

なので、/usr/local/cuda-10.1/lib64以下にシンボリックリンクを貼ることで対応は可能。

pytorchのバージョンに注意

また、pytorchのバージョンが1.5(>1.1)なので、以下に気をつけ、修正する必要がある。

if you are using pytorch 1.4+ and encounter “nvcc fatal: unknown -Wall”, you need to go to torch package dir and remove flags contains “-Wall” in INTERFACE_COMPILE_OPTIONS in Caffe2Targets.cmake. This problem can’t be fixed in this project (to avoid this, I need to remove all torch dependency in cuda sources and drop half support).

まず、以下のコマンドでPyTorch パッケージディレクトリの場所を確認する。
このコマンドは、torch パッケージのディレクトリへのパスを表示する。通常、/opt/conda/lib/python3.7/site-packages/torch などのパスになる。

python -c "import torch; print(torch.__file__)"

#/opt/conda/lib/python3.7/site-packages/torch/__init__.py

次にCaffe2 の CMake ディレクトリに移動する

torch パッケージディレクトリ内の caffe2 ディレクトリに移動する。Caffe2Targets.cmake ファイルを探す。

INTERFACE_COMPILE_OPTIONS に含まれる -Wall フラグを含む行を探す。そして-Wallを削除する。削除したのは以下のようになる。

INTERFACE_COMPILE_OPTIONS "-Wextra;-Wno-unused-parameter;-Wno-missing-field-initializers;-Wno-write-strings;-Wno-unknown-pragmas;-Wno-missing-braces;-fopenmp"

自分の場合はINTERFACE_COMPILE_OPTIONSごとすべてコメントアウトする必要があった。

最後に以下を実行してspconvのインストールを完了する。

cd dist
pip install ./spconv-1.1-cp37-cp37m-linux_x86_64.whl

.bashrcにはCUDA関連のパスは以下のようにしている。

#CUDA
export PATH="/usr/local/cuda-10.1/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-10.1/lib64:$LD_LIBRARY_PATH"
export CUDNN_INCLUDE_PATH=/usr/local/cuda-10.1/include
export CUDNN_LIBRARY_PATH=/usr/local/cuda-10.1/lib64
export CUDACXX=/usr/local/cuda-10.1/bin/nvcc # これがないとエラー

参考

[CUDA10.1] Could not load dynamic library ‘libcublas.so.10’の解決法 – 怠惰人間の情報系ブログ

タイトルとURLをコピーしました