ADOPに新たなSceneを追加する


ADOPに新たなSceneを追加して学習させるための手順

※ADOPとは以下のことです
https://github.com/darglein/ADOP

用意するもの

  • colmp 3.7 (バージョンとっても重要)
  • build済みのADOP

概要

colmapで点群を作成し、それをADOPビルド時に作られる./build/bin/colmap2adopを利用してインポート
そのあと、同じくADOPビルド時に作られる./build/bin/train_adopを利用して学習を開始する。

手順

1. colmapで画像から点群を作成する。

以下の手順に沿ってcolmapをインストールします。
https://colmap.github.io/install.html

winやmacでビルド済みのものを取得すると一番簡単です。
linuxの場合はコードからビルドする必要があります。

※注意
apt install colmap でlinuxは実はインストールできたりしますが、この場合3.6が入ってしまいADOPには適合しません。
必ず最新の3.7をインストールしましょう。

インストール出来たら、点群化する対象の画像を用意して、colmapの「Automatic reconstruction」を使って点群を作成します。
具体的な使い方は以下がわかりやすいです。
https://blog.goo.ne.jp/yoossh/e/d1278b39229eca47774fe5646a2bb2d7

colmap2adopでadopにインポートする

以下に沿いながらSceneにインポートします。
https://github.com/darglein/ADOP/blob/main/scenes/README.md

export SCENE_BASE=/local.home/Projects/ADOP/additional_material/colmap/Playground/

build/bin/colmap2adop --sparse_dir SCENE_BASE/sparse/0/ \
    --image_dir scenes/tt_playground/images/ \
    --point_cloud_file SCENE_BASE/dense_point_cloud.ply \
    --output_path scenes/playground_test \
    --scale_intrinsics 1 --render_scale 1 

この時point_cloud_file の値は、colmapで作成された、./dense/0/fused.plyを指定します。
image_dir は、点群に使った画像のディレクトリ
output_path は、Sceneディレクトリ(あらかじめ作成する必要はない)
scale_intrinsics は、レンダリングのスケールを指定します。

問題なく変換がうまくいったら、次は学習に移ります。

train_adopで学習を始める

まずは学習のためのconfigファイルを作成します。
ADOP/configにあらかじめ2つのconfigファイルがあります。

ここに、学習時の設定を入れます。
すでにあるcomfigファイルを複製して作成しましょう。
以下の条件に近いものを複製して作るとよいです。

configs/train_boat.ini ・・・露出値のバリエーションが多いシーンを撮影する場合
configs/train_tank_and_temples_multi.ini ・・・屋内シーンや露出値が近い画像の場合

編集対象の値

  • name ・・・名称
  • output_file_type・・・画像の拡張子
  • scene_name・・・colmap2adopで作ったsceneディレクトリ名

マシンのスペックが高くない場合(メモリエラーなどが発生するときは以下を表記の値に変更する)

train_crop_size = 256
inner_batch_size = 8
batch_size = 2

ここまで変更ができたら、以下コマンドで学習を開始します。
train_your-project.ini はご自身の環境に合わせて変更してください)

./build/bin/adop_train --config configs/train_your-project.ini

問題なければ学習が始まります。

もし、メモリエラーが起きてしまうときは

最後の render_scaleの値を 0.5などに下げてcolmap2adopをやり直すとよいです。
画像の大きさなどが小さくなり、メモリの消費量が減り、学習に使えるようになります。

もし以下のようなエラーが出る場合は、colmapから出力したplyファイルに問題がある可能性が高いです。
colmapのバージョンが問題ないか確認しましょう。

Assertion 'point_cloud_cuda->t_normal.defined() || !params->render_params.check_normal' failed!
  File: /home/bros/ADOP/src/lib/data/NeuralScene.cpp:28
  Function: NeuralScene::NeuralScene(std::shared_ptr<SceneData>, std::shared_ptr<CombinedParams>)
abort (core dumped)

ubuntu内ではなく、windowsでcolmapを動かして持ってきても問題ないので、別環境で動かしてみるのも有効です。

あとは待ちましょう

400エポックほど学習を繰り返すので、あとは待ちます。
公式曰く、12~24時間ほどかかるとのことなので、放っておきましょう。

学習が終われば、
./build/bin/adop_viewer --scene_dir scenes/newscene(newsceneは自身の環境によって変えてください)
で動きます。