1.はじめに
以前にブログ「cudaに触ってみる」に書いたようにCOLMAPによる3次元モデルの作成に取り組んでいる。cudaのインストールもできたようだし、COLMAPを試してみることにした。COLMAPのサイトを見ると、実行形式をダウンロードして試してみるのが簡単そうだったので、以前の記事「SfM事始め」で作成したカモの写真を使って実施してみた。
ところが、「12878点をマッチングするためのGPUメモリが十分でない。マッチング最大数を減らせ」とか「SiftGPUのサポートが十分でない」などのエラーが出てきてしまう。ほかにも設定可能なパラメータを変えて実施してみるがうまくいかない。COLMAPには親切なマニュアルもないし、行き詰ってしまった。インストールしたのはCOLMAP-3.7のWindowsバージョンだったが、COLMAP-3.6 では、legacy compute capability が3.0以下のGPUに対する実行形式の配布は中止するということが書かれていたし、使用しているQuadro K600 の compute capability がちょうど3.0であり、いっそのことソースファイルのビルドから始めた方がよいかなと考え、軽い気持ちでCOLMAPのビルドを行うこととした。これは、間違いの始まりかな??
ここでは、COLMAPのビルドに関する試行錯誤を備忘録として書いておく。
2.COLMAPのサイトに指示にしたがって
COLMAPのサイトには、Windows環境でソースからビルドを行うには、以下を実施するとの記載があった。
git clone https://github.com/microsoft/vcpkg (1)
cd vcpkg (2)
.\bootstrap-vcpkg.bat (3)
.\vcpkg install colmap[cuda,tests]:x64-windows (4)
(1) ネットの情報によると、これは、vcpkgというWindows用のC++パッケージマネージャーをGitHubからダウンロードすることらしい。そもそもGitHubなるもののお世話になったことがないので、Git for Windows をインストールしてgit cloneというコマンドを使えるようにする必要があった。今となっては記憶が定かではないか、おそらくこのサイトあたりを見てgit clone コマンドを使えるようにしたと思う。それ程時間はかからずダウンロードは終わる。
(2) (1)でgit clone コマンドを実行したフォルダ内に vcpkg というフォルダができるので、そのフォルダにカレントディレクトリを移すだけである。
(3) カレントディレクトリ内にある bootstrap-vcpkg.bat というバッチファイルを実行する。 これもすぐに完了する。
(4) このコマンドを実行したところ、多くのファイルのダウンロード、ビルドが延々と続き最後はPCがフリーズしてしまった。
3.やり直し、やり直し、やり直し
どこが悪いのかさっぱりわからなかったが、関係するファイルをすべて削除し、もう一度2.の(1)からやり直す。(3)までは問題ない。(4)を実行し黒いコマンド窓を眺めていると、
C:\vcpkg>vcpkg install colmap[cuda,tests]:x64-windows
Computing installation plan...
A suitable version of cmake was not found (required v3.22.2). Downloading portable cmake v3.22.2...
Downloading cmake...
https://github.com/Kitware/CMake/releases/download/v3.22.2/cmake-3.22.2-windows-i386.zip -> C:\vcpkg\downloads\cmake-3.22.2-windows-i386.zip
Extracting cmake...
The following packages will be built and installed:
* assimp[core]:x64-windows -> 5.0.1#5
(以下延々とビルドするプログラムのリストが続く)
というような表示。どうも164個のプログラムをダウンロード、ビルドする必要があるようだ。それで前回あんなに時間がかかってしまったのだ。
覚悟をきめてコマンド窓を眺めていると125/164番目のプログラムが2時間たっても終わらない。それをCtrl+Cで強制中断すると残りのプログラムのビルドが始まり、164/164番目のプログラムで
Installing 164/164 colmap:x64-windows...
Building colmap[core,cuda,tests]:x64-windows...
-- Downloading https://github.com/colmap/colmap/archive/29a1e3642a3b00734a52b21e597ea4d576485fe6.tar.gz -> colmap-colmap-29a1e3642a3b00734a52b21e597ea4d576485fe6.tar.gz...
-- Extracting source C:/vcpkg/downloads/colmap-colmap-29a1e3642a3b00734a52b21e597ea4d576485fe6.tar.gz
-- Applying patch fix-dependencies.patch
-- Using source at C:/vcpkg/buildtrees/colmap/src/d576485fe6-7dd36362d1.clean
-- Configuring x64-windows-dbg
-- Configuring x64-windows-rel
-- Building x64-windows-dbg
CMake Error at scripts/cmake/vcpkg_execute_build_process.cmake:158 (message):
Command failed: C:/vcpkg/downloads/tools/cmake-3.22.2-windows/cmake-3.22.2-windows-i386/bin/cmake.exe --build . --config Debug --target install -- -v -j9
Working Directory: C:/vcpkg/buildtrees/colmap/x64-windows-dbg
See logs for more information:
C:\vcpkg\buildtrees\colmap\install-x64-windows-dbg-out.log
どうも164番目でようやくCOLMAPのビルドを行っているようだ。125番目のプログラムを強制中断しているので、当然ながらエラーメッセージが出ている。もう一度 (4) のコマンドを実行するとなぜかCOLMAPのビルドだけが行われ(125番目のプログラムはどうなった?)
C:\vcpkg>vcpkg install colmap[cuda,tests]:x64-windows
Computing installation plan...
The following packages will be built and installed:
colmap[core,cuda,tests]:x64-windows -> 2022-03-14
Detecting compiler hash for triplet x64-windows...
Restored 0 packages from C:\Users\kanri\AppData\Local\vcpkg\archives in 9.691 ms. Use --debug to see more details.
Installing 1/1 colmap:x64-windows...
Building colmap[core,cuda,tests]:x64-windows...
-- Using cached colmap-colmap-29a1e3642a3b00734a52b21e597ea4d576485fe6.tar.gz.
-- Cleaning sources at C:/vcpkg/buildtrees/colmap/src/d576485fe6-7dd36362d1.clean. Use --editable to skip cleaning for the packages you specify.
-- Extracting source C:/vcpkg/downloads/colmap-colmap-29a1e3642a3b00734a52b21e597ea4d576485fe6.tar.gz
-- Applying patch fix-dependencies.patch
-- Using source at C:/vcpkg/buildtrees/colmap/src/d576485fe6-7dd36362d1.clean
-- Configuring x64-windows-dbg
-- Configuring x64-windows-rel
-- Building x64-windows-dbg
CMake Error at scripts/cmake/vcpkg_execute_build_process.cmake:158 (message):
Command failed: C:/vcpkg/downloads/tools/cmake-3.22.2-windows/cmake-3.22.2-windows-i386/bin/cmake.exe --build . --config Debug --target install -- -v -j9
Working Directory: C:/vcpkg/buildtrees/colmap/x64-windows-dbg
See logs for more information:
C:\vcpkg\buildtrees\colmap\install-x64-windows-dbg-out.log
(中略)
You can submit a new issue at:
https://github.com/microsoft/vcpkg/issues/new?template=report-package-build-failure.md&title=[colmap]+Build+error
Include '[colmap] Build error' in your bug report title, the following version information in your bug description, and attach any relevant failure logs from above.
vcpkg-tool version: 2022-05-05-67e17c1782801cf481be9ac0b3765dff3e4bdeb8
vcpkg-scripts version: c40e73f7e 2022-05-24 (8 hours ago)
の表示。どうも
CMake Error at scripts/cmake/vcpkg_execute_build_process.cmake:158 (message):
Command failed: C:/vcpkg/downloads/tools/cmake-3.22.2-windows/cmake-3.22.2-windows-i386/bin/cmake.exe --build . --config Debug --target install -- -v -j9
というところが怪しい。そこで、メッセージの最後の段にある忠告に従い '[colmap] Build error' というレポートをGitHubに投稿することとした。
その前に悪あがきとして、COLMAPのインストールに関する日本語のサイトをまねて、関連のファイルを全部削除した上で以下のコマンドを実施。
git clone https://github.com/microsoft/vcpkg
cd vcpkg
bootstrap-vcpkg.bat
vcpkg integrate install
vcpkg install yasm-tool:x86-windows
vcpkg install colmap[cuda]:x64-windows
4番目のコマンドを実行すると、CMake projects should use: "-DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake" というメッセージが出てきたので、言うとおりに環境変数を付け加える。
5番目のコマンドはワーニングがいくつか出ただけで完了。
6番目のコマンドを実行すると、167個のプログラムをインストールすることになった。5番目のyasmに関係するプログラムが3つ増えたらしい。すると、--recurse というオプションをつけろと言っているので、その通りに実行。すると、ほとんどのプログラムはあっという間に終わり、133番目まで来た。141に30分かかった。147~155はqt5というプログラム関係で結構時間がかかった。165番目がcolmapで、errorメッセージを出して終了した。
別の日本語のサイトではqt5のインストールが必要と言っているので、その関係なのだろう。
GitHubを検索すると、[Windows] Build error · Issue #1511 · colmap/colmap · GitHub」に関連の問題のやり取りがあったので、それに従って、glogフォルダにあるlogging.h の3行をコメントアウトした。その上で初心に帰り、COLMAPのサイトの記述どおりコマンドを実行。
すると、あっという間に完了。直前のトライで時間がかかったqt5もすんなり完了。しかし、164番目のCOLMAPのところで同じエラーが出た。
万事休して、GitHubに状況を投稿。すると、英語版のVisual Studioをインストールしてからもう一度報告しろ、という冷たい返事。CMake Errorはどうなったんだ?
そんなことがあるのかなと疑いつつもネットを検索するとこのサイトに VisualStudio の英語言語パックをインストールすることで vcpkg がビルドできるようになったとの記載があった。
そこで、Visual Studio2017の日本語版を削除し、英語版をインストールし、再度COLMAPのサイトにあるコマンドを実行。その前に関係のファイルを全部削除したか、.\vcpkg install colmap[cuda,tests]:x64-windows だけ実行したのか今となっては定かではないが、おそらく関係ファイルは削除しなかったと思う。
2時間10分ほどかけて、どうにかCOLMAPがビルドできた。
このサイトに Visual Studioのソリューションファイルは "C:\Git\colmap\build\colmap\__build__\COLMAP.sln"に生成されていますので とあったが、それらしいものは見当たらない。
コマンド窓のメッセージに、 C:\Users\(ユーザー名)\AppData\Local\vcpkg\archives\33 にbinaryのキャッシュがあるというので、それを解凍し、c:\(フォルダ名)\tools に移した。実行形式のファイルに関連するフォルダC:\colmap にあるcolmap.batをコピーして、toolsフォルダ内のcolmapフォルダの名称をbinと変えたら、バッチファイルが問題なく動き、COLMAPが立ち上がった。やれやれ。でもまったくわかった気がしない。
テストデータに対してビルドしたCOLMAPを適用してみる。すると、実行形式のCOLMAPと同じように途中でトラブルに見舞われ、結局3Dモデルはできずじまい。
まとめると、COLMAPのビルドは行われたようで、実行形式のCOLMAPのフォルダにあるのと同じ.exeファイルができているが、状況は以前と変わらない。長い戦いになりそうである。