Moiz's journal

プログラミングやFPGAなどの技術系の趣味に関するブログです

「詳解 3次元点群処理」を読むために環境設定をした

3/5/2023: GPUが認識されていなかったので、修正のため記事の後半に追記を行いました

今回は「詳解 3次元点群処理」という書籍の内容を実行するための環境設定をしようとして大変だった(特に6章)、というゆるい記事です

「詳解 3次元点群処理」を読み始めた

先日日本に一時帰国した際に、昨年発売されて話題になった「詳解 3次元点群処理 Pythonによる基礎アルゴリズムの実装」を購入し読み始めました。
内容的には3次元の点群を解析処理するいろいろな手法を解説するというものです。 処理の多くはライブラリを活用したものですが、いくつかの処理については低レベルか(numpyレベル)からの実装の解説が行われています。

この本の特に特徴的な部分は4章(点群レジストレーション)、5章(点群からの物体認識)、6章(深層学習による3次元点群処理)、での、点群をデータベースからダウンロードして実際の処理を行ってその解説を行っている部分だと思います。しかも、これらの章で扱うPythonコードはすべてgithub公開されており、実行できる環境があれば、すべて読者が実行できるようになっています。  

このように意欲的な書籍で、扱われる内容も非常に興味深いのですが、読者の前には実行環境という壁が立ちはだかります。

まず、この本はあくまで点群処理の本であり、環境設定のような本質的でない部分についてはほとんど述べられていません。  

過去に出版された技術的な書籍でも、環境設定が固定されると、数年後には実行不可能になってしまうことも多々あったので、環境設定は各自やってね、というのはある意味合理的な判断だと思います。

自分も、この書籍にでてくる断片的な情報と、ネット上のいろんな資料を比較して、どうにかこうにか2章から6章の内容が実行できる環境を設定できたので、ここに記録として残して置こうと思います。

ただしこの内容はあくまで自分が試してみた内容というだけで、他の環境でも同様に動作することを保証するものではありませんし、この内容を参考にして環境設定を行った場合に生じるいかなる結果についてもブログの著者は責任を負いません。
むしろ、各自自身の現在の環境にあわせて追加で設定が必要であり、その設定はそれぞれ異なると考えるのが自然です。あくまで「やってみた」という程度の内容であることをご理解ください。

2章から5章までのPythonとOpen3Dのバージョン

「詳解 3次元点群処理」では何箇所か実行環境についての記述があります

まず内表紙の裏にこう書いてあります

  • 本書の執筆にあたって、以下の計算機環境を利用しています.

    Ubuntu 18.04, Python 3.8, Jupyter Notebook 6.4
    Ubuntu 20.04, Python 3.8, Jupyter Notebook 6.4

3ページ目にこうあります

次に,Open3Dをインストールします.(略)次のコマンドを実行しましょう. $ pip install open3d==0.14.1
これにより,本書執筆時点での最新バージョンであるOpen3D 0.14.1がインストールされます.

とあります。

試して見ると、あまりPythonやOpen3Dの細かいバージョンは関係なさそうだったのですが、バージョン違いで動作が違うといやなので、できるだけ合わせておきたいところです。

さて、自分が普段使っているUbuntuは22.04、PythonのバージョンはPython 3.10.6です。この環境で上記のpipコマンドを実行するとエラーがでました。

ERROR: Could not find a version that satisfies the requirement open3d==0.14.1 (from versions: 0.16.0)    
     
ERROR: No matching distribution found for open3d==0.14.1

そこで今回はPythonのバージョンをコントロールするpyenvvenvを使って、バージョンをあわせました。自分はすでにpyenvをインストールしていたのでそちらを使いましたが、インストール方法はこちらなどにあります。

3.8系で最新の3.8.13をインストールしまし、venvで3dpcpという名前の環境をつくり、0.14.1のOpen3Dをインストールします。

$ pyenv install 3.8.13  
$ pyenv local 3.8.13
$ python -m venv ./3dpcp
$ source 3dpcp/bin/activate
$ pip install open3d==0.14.1

今回はエラーもでません。 3ページの記述にしたがってOpen 3Dのバージョンを確認しておきます。

$ python -c "import open3d; print(open3d.__version__)"
0.14.1  

成功したようです。これで、書籍指定の環境でPythonスクリプトやJupyter Notebookの内容を実行できます1

6.1 章の実行環境

6章の環境については、5ページめにこうかかれています。

第6章のサンプルコードは、深層学習PyTorchおよびその拡張ライブラリであるPyTorch Geometricを用います。これらのインストール方法については、第6章を参照してください.

第6章にゆくと最初の数ページ、PyTorchを使った例が示されますがインストール方法については書かれていません。

PyTorchのホームページを見ると、推奨環境ごとにPyTorchのインストール方法は違うようです。

私の環境(CUDA11.7, PIPベースインストール)では次のコマンドでインストールできると表示されました  

$ pip3 install torch torchvision torchaudio

これで6.1深層学習の基礎のサンプルコード(pytorch_practice)は実行できるようになりました。

6.2章の実行環境 (Docker失敗編)

これは失敗の記録なので、とばして次のセクションにすすんでも問題ありません

6.2に進むと新たにPyTorch Geometricというライブラリが必要だとかかれています。

さらに環境についてはこのように書かれています

本書では安定した環境のためDockerによる環境設定を提供していますが、(略)

続いて

Dockerを用いる場合には本書添付のサンプルコードのdocker/secrtion_deep_learning2ディレクトリ以下のサンプルコードおよびDockerfileを利用してください

実際にdocker/section_deep_learningを見てみると次のようなファイルがあります。

docker_build.sh Dockerfile docker_run.sh

とくに実行のマニュアルなどは無いようです。どう使ってよいのかまったくわからないのですが、とりあえずDockerのウェブページなどを見ながらDockerの環境を設定して、実行してみました。

docker_build.shはとりあえず実行できたのですが、docker_run.shはエラーがでて実行できませんでした。

Dockerについてほぼ知らない私にはこれ以上進めることができませんでした。

6.2章の実行環境(Anaconda、とりあえず動作した編)

6.2章を見返すとこのような続きがあります

(略),執筆時点(2022/08/08)での最新のPyTorch GeometricはAnacondaを用いて容易にインストールできます.

更に、

Anacondaを用いる場合には
$ conda install pyg -c pyg
というコマンドにてインストールできます.

とあります。

この本でAnacondaの記述が出てくるのはたぶんこれが初めてなのでとまどいますが、とりあえずAnacondaの環境設定を行います。

まずこれまで使っていたpyenvの環境を抜けます

$ deactivate

自分はたまたまAnacondaの実行環境をインストールしていたのでそれを利用します。そうでなければAnacondaのインストールを行います。

次に環境を作ります。今回は3dpcp_dlという名前にします。過去にインストールしたパッケージとコンフリクトしてそうだったので、--no-default-packageを指定しました。

$ conda create --no-default-package --name 3dpcp_dl

アクティベートします

$ conda activate 3dpcp_dl

追記(3/5/2023)
Cudaのバージョンを確認します3

$ nvcc --version

自分のCudaのバージョンは11.7なので、11.7に対応したPyTorchをインストールします。

PyTorchのインストール方法ページによると、Linux + Conda + Cuda 11.7の組み合わせでPyTorchをインストールするには次のコマンドが必要だそうです。

conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia

先程作成した環境(3dpcp_dl)にインストールするために次のコマンドを実行します。

$ conda install -n 3dpcp_dl pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia

追記(3/5/2023)終わり

必要なライブラリをインストールします

$ conda install -n 3dpcp_dl jupyter    
$ conda install -n 3dpcp_dl pyg -c pyg    
$ conda install -n 3dpcp_dl tensorboard -c conda-forge    
$ conda install -n 3dpcp_dl -c anaconda h5py

(h5pyは3/5/2023に追加)

さらに、自分の環境ではtorch_sparseでエラーがでたので、インストールしなおしました
まずPyTorchのバージョン確認

$ python -c "import torch; print(torch.__version__)"    
1.12.1  

このバージョンと手元のCudaのバージョンにあわせてtorch_sparseをインストールしなおします(参考)

あくまで私の環境(PyTorch: 1.12.1, Cuda: 11.7)の場合ですが、次のコマンドでtorch_sparseをインストールできました。

pip install torch_sparse -f https://pytorch-geometric.com/whl/torch-1.12.1+cu117.html

また、cuda関連でエラーがでていたので、cuda-toolkitの再インストールも行いました。(参考

これでとりあえず、私は6.2章のコード(modelnet10_classification.ipynb)が実行できるようになりました。

最後に

どうにかこうにか「詳解3次元点群処理」のコードを手元で実行できるようになったので記録がてらブログにしましたが、たまたま動作しているレベルで、一般的な環境とはとてもいえません。
あくまでやってみた、というレベルです。

まだ6章後半、7章の内容の確認はできていないので、もしなにか修正が必要なら内容をアップデートしようと思います。

あと、Dockerについて少し学んで、Dockerを使った環境での実行もできるようしたいなとも思っていますが、こちらはいつになるかわかりません。


  1. ところで、Jupyter Notebookについてですが、最初の環境では言及ありますが、本文では実行方法など記述がありません。5ページではipythonの実行方法が説明されていますが、ipythonについてははこのページ以降記述がありません。ちょっと不思議です。
  2. secrtionはsectionのタイポだと思われます。
  3. Cudaがインストールされていない場合は、まずCudaのインストールページを参照してインストールします。PyTorchは今の所Cuda-11.7までサポートしているようなので、インストールするのは11.6か11.7が良いと思います。自分の環境(Ubuntu 22.04| + GTX2080Ti)では、deb(network)でCuda-11.7がインストールができました。(deb(local)では失敗)。