0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

1枚の写真から三次元ボクセル表現が行えるMonoSceneを構築してみる[Ubuntu22.04]

Last updated at Posted at 2023-10-16

画像9.png
1枚の画像から3次元に復元できる3D Semantic Scene Completion (SSC) 技術に触れてみました。
TeslaAI day 2022のプレゼン曰く(01:12:00~くらい)、Tesla車には似たような推論モデルが使われてるっぽいので、多分ホットな手法()デス

Trainingを行うので、低スぺのグラボだと厳しそうです。
CUDAは構築してないと動かないと思います。
※この記事は、2023年10月現在のものです。

Githubはこちら↓

  • MonoScene

論文を読む限り、深度データは必要なくRGB画像があればボクセル表現できてしまうらしい。

つよつよPCスペック

やはり、要求されているPCスペックはかなり高そうです。
以下に、今回構築したPCのスペックを記載します。

  • OS:Ubuntu22.04.3LTS

  • CPU:13th Gen IntelⓇ core™ i7-13700K×24 (←強い)

  • RAM:64GB(←強い)

  • GPU:NVIDIA GeForce RTX 4090(←強い)

  • 必要ストレージ:最低30GBほど。データセットを一通り試すなら200GBは必要

  • 前提構築済
    CUDA11.8

Anaconda3のインストール

一応condaベースの構築なのでanaconda3のインストールから。入ってる人は飛ばしてください。

  • Anaconda3

bash Anaconda3-2-23.09-0-Linux-x86_64.sh(例)
yes
yes
yes

ダウンロードしたshファイルを実行し、全部yesで進みます。(enter連打だとnoが選択され、インストールされなくなってしまうので注意)
名前の前に(base)がつくようになっていれば成功。前準備おわり。

MonoSceneの構築

すべてHome直下に置いています。(パス内のuserはユーザーネームのことです。)

conda create -y -n monoscene python=3.7
conda activate monoscene
conda install pytorch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2 cudatoolkit=10.2 -c pytorch
git clone https://github.com/astra-vision/MonoScene.git
cd MonoScene/
pip install -r requirements.txt
conda install -c bioconda tbb=2020.2
pip install torchmetrics==0.6.0
pip install -e ./

データセットの設定(NYUv2)

学習に必要なデータセットを準備します。Semantic KITTI,NYUv2,KITTI-360と3種類用意されていますが、今回はNYUv2を使用します。(他のデータセットはとんでもなく容量を食います。Semantic KITTIは後述)

また、Pretrained modelsが準備されています。
/path/to/MonoScene/trained_modelsに配置することで、すぐにEvaluatingが可能になります。
NYUv2のPretrained modelsはこちらからダウンロードできます。↓
https://www.rocq.inria.fr/rits_files/computer-vision/monoscene/monoscene_nyu.ckpt

cd
export NYU_PREPROCESS=/home/user/NYU_dataset
export NYU_ROOT=/home/user/NYU_dataset/depthbin
cd MonoScene/
python monoscene/data/NYU/preprocess.py NYU_root=$NYU_ROOT NYU_preprocess_root=$NYU_PREPROCESS

Training

めちゃくちゃ時間がかかります。GPUを複数搭載している方が良いもかもしれません。2023現在最強のグラボRTX4090だと、デフォルト設定で5時間弱で終わりました。
最後のGPU数などはPCに合わせてください。epoch数はデフォルトで29ですが、変更することもできます。

cd
export NYU_LOG=/home/user/NYU_dataset
cd MonoScene/
python monoscene/scripts/train_monoscene.py dataset=NYU NYU_root=$NYU_ROOT NYU_preprocess_root=$NYU_PREPROCESS logdir=$NYU_LOG n_gpus=1 batch_size=1

Evaluating

python monoscene/scripts/eval_monoscene.py dataset=NYU NYU_root=$NYU_ROOT NYU_preprocess_root=$NYU_PREPROCESS n_gpus=1 batch_size=1

Inference

export MONOSCENE_OUTPUT=/home/user/MonoScene/outputs
python monoscene/scripts/generate_output.py +output_path=$MONOSCENE_OUTPUT dataset=NYU NYU_root=$NYU_ROOT NYU_preprocess_root=$NYU_PREPROCESS n_gpus=1 batch_size=1

Visualization

推論した形状を可視化します。今回はmayaviを使用しましたが、Open3Dを使用する方法もgithubでは紹介されています。

pip install tqdm
pip install omegaconf
pip install hydra-core

いざVisualizationを実行しようとすると以下のエラーが出ました。

(monoscene) user@Ubuntu:~/MonoScene$  python monoscene/scripts/visualization/NYU_vis_pred.py +file=/home/user/MonoScene/outputs/NYU/NYU0001_0000.pkl
Traceback (most recent call last):
  File "monoscene/scripts/visualization/NYU_vis_pred.py", line 6, in <module>
    from mayavi import mlab
ModuleNotFoundError: No module named 'mayavi'

モジュールがインストールされていないようでした。
下記を実行しました。

conda install cython
pip install vtk mayavi

それでもまたエラーです。

(monoscene) user@Ubuntu:~/MonoScene$ python monoscene/scripts/visualization/NYU_vis_pred.py +file=/home/user/MonoScene/outputs/NYU/NYU0001_0000.pkl
monoscene/scripts/visualization/NYU_vis_pred.py:23: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.
Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
  coords_grid = coords_grid.astype(np.float)
Traceback (most recent call last):
  File "monoscene/scripts/visualization/NYU_vis_pred.py", line 151, in main
    d=0.75,
  File "monoscene/scripts/visualization/NYU_vis_pred.py", line 79, in draw
    figure = mlab.figure(size=(1600, 900), bgcolor=(1, 1, 1))
  File "/home/user/anaconda3/envs/monoscene/lib/python3.7/site-packages/mayavi/tools/figure.py", line 64, in figure
    engine = get_engine()
  File "/home/user/anaconda3/envs/monoscene/lib/python3.7/site-packages/mayavi/tools/engine_manager.py", line 94, in get_engine
    return self.new_engine()
  File "/home/user/anaconda3/envs/monoscene/lib/python3.7/site-packages/mayavi/tools/engine_manager.py", line 139, in new_engine
    check_backend()
  File "/home/user/anaconda3/envs/monoscene/lib/python3.7/site-packages/mayavi/tools/engine_manager.py", line 42, in check_backend
    raise ImportError(msg)
ImportError: Could not import backend for traitsui.  Make sure you
        have a suitable UI toolkit like PyQt/PySide or wxPython
        installed.

Set the environment variable HYDRA_FULL_ERROR=1 for a complete stack trace.

要約するとまだモジュールが足りないみたいですね。
下記を実行しました。

pip install pyqt5

やっとこさ、です。下記を実行します。.pklの可視化したい画像は任意です。

python monoscene/scripts/visualization/NYU_vis_pred.py +file=/home/user/MonoScene/outputs/NYU/NYU0001_0000.pkl

snapshot2.png
動きましたー!

追記:データセットの設定(Semantic KITTI)

容量が多そうで避けていましたが、Semantic KITTIも一応試してみました。
基本的にNYUv2一緒ですが、データセットの準備に一癖ありました。
下記から、データセットをダウンロードします。
https://www.cvlibs.net/datasets/kitti/eval_odometry.php
このダウンロードには、サイトへのログインが必要です。
所属やら何で使うのかを明記する必要があったと思うので、お気をつけて。
ここからはDownload odometry data set (color, 65 GB)をダウンロードしてください。
次に下記からvoxel dataをダウンロードします。
http://www.semantic-kitti.org/dataset.html#download
SemanticKITTI voxel data (700 MB)が今回使用するものです。

この2つを組み合わせることでデータセットが完成するハズでした。
後述しますが、これだけでは動きませんでした。

  • データセットの作成

先ほどダウンロードした二つを組み合わせます。odometry data setのファイルの中に00~21の番号があります。同様にvoxel data setに対応する番号のフォルダがあると思いますので、全部コピペしましょう。対応関係は以下の通りです。

/kitti/dataset/
          └── sequences/
          │       ├── 00/
          │       │   ├── times.txt
          │       │   ├── calib.txt
          │       │   ├── image_2/
          │       │   ├── image_3/
          │       |   ├── voxels/ ←コレをコピペ
          │       ├── 01/
          │       ├── 02/
          │       .
          │       .
          │       .
          │       └── 21/ #ここまで全部やる
          

ここから先は基本的にNYUv2と一緒ですが、一応記載してい置きます。

cd
export KITTI_PREPROCESS=/home/user/kitti/dataset/sequences
export KITTI_ROOT=/home/user/kitti

以下を実行すると、エラーが出てしまいました。

cd MonoScene/
python monoscene/data/semantic_kitti/preprocess.py kitti_root=$KITTI_ROOT kitti_preprocess_root=$KITTI_PREPROCESS
Traceback (most recent call last):
  File "monoscene/scripts/train_monoscene.py", line 169, in main
    trainer.fit(model, data_module)
  File "/home/user/anaconda3/envs/monoscene/lib/python3.7/site-packages/pytorch_lightning/trainer/trainer.py", line 552, in fit
    self._run(model)
  File "/home/user/anaconda3/envs/monoscene/lib/python3.7/site-packages/pytorch_lightning/trainer/trainer.py", line 864, in _run
    self._call_setup_hook(model)  # allow user to setup lightning_module in accelerator environment
  File "/home/user/anaconda3/envs/monoscene/lib/python3.7/site-packages/pytorch_lightning/trainer/trainer.py", line 1177, in _call_setup_hook
    self.datamodule.setup(stage=fn)
  File "/home/user/anaconda3/envs/monoscene/lib/python3.7/site-packages/pytorch_lightning/core/datamodule.py", line 428, in wrapped_fn
    fn(*args, **kwargs)
  File "/home/user/MonoScene/monoscene/data/semantic_kitti/kitti_dm.py", line 34, in setup
    color_jitter=(0.4, 0.4, 0.4),
  File "/home/user/MonoScene/monoscene/data/semantic_kitti/kitti_dataset.py", line 54, in __init__
    os.path.join(self.root, "dataset", "sequences", sequence, "calib.txt")
  File "/home/user/MonoScene/monoscene/data/semantic_kitti/kitti_dataset.py", line 199, in read_calib
    calib_out["Tr"][:3, :4] = calib_all["Tr"].reshape(3, 4)
KeyError: 'Tr'

Set the environmexport KITTI_LOG=/home/user/kittient variable HYDRA_FULL_ERROR=1 for a complete stack trace.

Trってなんぞや。と言われてしまいました。
おかしいな、と思いcalib.txtを確認してみると、なんとTrの行がありませんでした。
アップデートで消されてしまったんですかね?
色々調べると、Trが含まれているcalib.txtデータを発見しました。
下記からダウンロードできます。
https://www.cvlibs.net/download.php?file=data_odometry_calib.zip
二度手間ですがこのcalib.txtを、00~21のフォルダ毎に全部コピペしましょう。
再度python monoscene/data/semantic_kitti/preprocess.py kitti_root=$KITTI_ROOT kitti_preprocess_root=$KITTI_PREPROCESSを実行したら無事通過しました。

※ここから先は基本的にNYUv2と一緒です。

Training(kitti)

epoch数は29、RTX4090で実行した結果、30時間強かかりました。
epoch数を変えるか、Pretrained modelsの使用をお勧めします。
Semantic KITTIのPretrained modelsは以下のURLからダウンロードできます。
https://www.rocq.inria.fr/rits_files/computer-vision/monoscene/monoscene_kitti.ckpt

最後のGPU数などはPCに合わせてください。

cd
export KITTI_LOG=/home/user/kitti
cd MonoScene/
python monoscene/scripts/train_monoscene.py \dataset=kitti \enable_log=true \kitti_root=$KITTI_ROOT \kitti_preprocess_root=$KITTI_PREPROCESS\kitti_logdir=$KITTI_LOG \n_gpus=1 batch_size=1

Evaluating(kitti)

python monoscene/scripts/eval_monoscene.py \dataset=kitti \kitti_root=$KITTI_ROOT \kitti_preprocess_root=$KITTI_PREPROCESS \ n_gpus=1 batch_size=1

Inference (kitti)

export MONOSCENE_OUTPUT=/home/user/MonoScene/outputs
python monoscene/scripts/generate_output.py \+output_path=$MONOSCENE_OUTPUT \dataset=kitti \kitti_root=$KITTI_ROOT \kitti_preprocess_root=$KITTI_PREPROCESS \n_gpus=1 batch_size=1

Visualization(kitti)

generate_output.pyを実行した日時でファイル名が変わるのでコピペの際は注意

python monoscene/scripts/visualization/kitti_vis_pred.py +file=/home/user/MonoScene/outputs/2023-10-18/12-02-51/kitti/08/000000.pkl +dataset=kitti

実行すると、画像のようなボクセル描画を確認できました。
snapshot3.png

おわりに

ひとまず構築して、動作確認程度はできました。
もうちょっと触ってみて、進展があれば追記していこうと思います。
追記:2023/11/13 Semantic kittiデータセットでの実行

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?