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は自身の環境によって変えてください)
で動きます。