見出し画像

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ファイルを読み込んで表示させた結果がこちら。

./output/gerrad-hall/sparse/0

(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
./output/graham-hall/sparse/0

(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
./output/person-hall/sparse/0

(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
./output/south-building/sparse/0

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がぶん回ります。

この記事が気に入ったらサポートをしてみませんか?