WSL2でGLOMAPを試してみる
「汎用のグローバルStructure-from-Motionパイプライン」で「COLMAPと比較すると、はるかに効率的でスケーラブルな再構築プロセスを提供」するらしいGLOMAPを試してみます。
使用するPCはドスパラさんの「GALLERIA UL9C-R49」。スペックは
・CPU: Intel® Core™ i9-13900HX Processor
・Mem: 64 GB
・GPU: NVIDIA® GeForce RTX™ 4090 Laptop GPU(16GB)・GPU: NVIDIA® GeForce RTX™ 4090 (24GB)
・OS: Ubuntu22.04 on WSL2(Windows 11)
です。
1. 準備
環境構築
python3 -m venv golmap
cd $_
source bin/activate
Ubuntu 22.04のcmakeだとversionが古いため、buildします。
wget https://github.com/Kitware/CMake/releases/download/v3.30.1/cmake-3.30.1.tar.gz
tar xfvz cmake-3.30.1.tar.gz && cd cmake-3.30.1
./bootstrap && make -j$(nproc) && sudo make install
COLMAPもビルド&インストールします。Ubuntu 22.04のcolmapパッケージがCUDA非対応のためです。手順はこちらを参照ください。
最後に、glomapのビルド&インストールです。READMEままだとbuildエラーとなるので、-Dオプション2つ追加します。
mkdir build
cd build
cmake .. -GNinja \
-DSuiteSparse_CHOLMOD_INCLUDE_DIR=/usr/include/suitesparse \
-DSuiteSparse_CHOLMOD_LIBRARY=/usr/lib/x86_64-linux-gnu/libcholmod.so
ninja
sudo ninja install
データセットのダウンロードと展開
サンプルとして提示されている こちら (OneDrive)からデータセットをダウンロードします。
(いろいろと面倒くさいので)ブラウザでダウンロードした後、unzipコマンドで ./data ディレクトリ以下に展開します。
mkdir ./data
cd $_
unzip /path/to/Downloads/gerrard-hall.zip
unzip /path/to/Downloads/graham-hall.zip
unzip /path/to/Downloads/person-hall.zip
unzip /path/to/Downloads/sourth-building.zip
cd ..
2. 試してみる
サンプルのデータセットのそれぞれで試してみます。
(1) gerrard-hall
用意された画像100枚。
DATASET=gerrard-hall
/usr/local/colmap/bin/colmap feature_extractor \
--image_path ./data/${DATASET}/images \
--database_path ./data/${DATASET}/database.db
/usr/local/colmap/bin/colmap exhaustive_matcher \
--database_path ./data/${DATASET}/database.db
/usr/local/bin/glomap mapper \
--database_path ./data/${DATASET}/database.db \
--image_path ./data/${DATASET}/images \
--output_path ./output/${DATASET}/sparse
glomap mapperコマンドは、58秒ほどで終了。
real 0m58.551s
user 4m23.607s
sys 2m22.027s
colmapコマンドを起動して、
colmap gui
output_pathに出力された binファイルを読み込んで表示させた結果がこちら。
(2) graham-hall
用意された画像1,276枚。
DATASET=graham-hall
/usr/local/colmap/bin/colmap feature_extractor \
--image_path ./data/${DATASET}/images \
--database_path ./data/${DATASET}/database.db
/usr/local/colmap/bin/colmap exhaustive_matcher \
--database_path ./data/${DATASET}/database.db
/usr/local/bin/glomap mapper \
--database_path ./data/${DATASET}/database.db \
--image_path ./data/${DATASET}/images \
--output_path ./output/${DATASET}/sparse
glomap mapperコマンドは、22分07秒ほどかかりました。
real 22m7.013s
user 230m19.048s
sys 1m3.410s
(3) person-hall
用意された画像330枚。
DATASET=person-hall
/usr/local/colmap/bin/colmap feature_extractor \
--image_path ./data/${DATASET}/images \
--database_path ./data/${DATASET}/database.db
/usr/local/colmap/bin/colmap exhaustive_matcher \
--database_path ./data/${DATASET}/database.db
/usr/local/bin/glomap mapper \
--database_path ./data/${DATASET}/database.db \
--image_path ./data/${DATASET}/images \
--output_path ./output/${DATASET}/sparse
glomap mapperコマンドは、7分43秒ほどかかりました。
real 7m43.143s
user 50m19.794s
sys 38m31.819s
(4) south-building
用意された画像128枚。
DATASET=south-building
/usr/local/colmap/bin/colmap feature_extractor \
--image_path ./data/${DATASET}/images \
--database_path ./data/${DATASET}/database.db
/usr/local/colmap/bin/colmap exhaustive_matcher \
--database_path ./data/${DATASET}/database.db
/usr/local/bin/glomap mapper \
--database_path ./data/${DATASET}/database.db \
--image_path ./data/${DATASET}/images \
--output_path ./output/${DATASET}/sparse
glomap mapperコマンドは、39秒ほどで終了。
real 0m39.297s
user 3m44.923s
sys 1m31.213s
3. まとめ
4つのサンプルのgolmapコマンド時の実行時間をまとめると、以下。
gerrard-hall : 100枚、 58秒 → 0.58秒/枚
graham-hall : 1276枚、1,327秒 → 1.040秒/枚
person-hall : 330枚、463秒 → 1.40秒/枚
south-building : 128枚、39秒 → 0.30秒/枚
36,000枚で5.5時間とProject Pageに書いているのは、たしかにそうなのかもしれない(未検証…)。
なお、GLOMAPはGPUアクセラレーションをサポートしていないのでCPUがぶん回ります。