地面の目印 -エスワン-

さまざま、気の向いたとき
数学関係は、今後 https://fifthtaxi.hatenadiary.jp/ へ

colmapのビルド

2022-05-30 13:49:11 | 3D

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ファイルができているが、状況は以前と変わらない。長い戦いになりそうである。

 

 


cudaを触ってみる

2022-05-13 09:59:46 | 3D

1. はじめに

 SfMをかじりはじめてから、Regard3DとBundlerを試してみた。実際にいろいろ撮影して3Dモデルを作成しようとするが、マッチングしないケースやマッチングしてもその後の画像の復元が不十分など、なかなかうまくいかないケースも多い。改めて、最初に読んだ SfMのソフトの比較記事 を読む COLMAPというソフトがよさそうである。別の記事 でもCOLMAPの結果が最もきれいであるとしていた。

 そこで、COLMAPを試すことにした。マッチングはやはりできたりできなかったりだったが、マッチングできた場合でもその後のdensificationではcuda errorで落ちてしまう。ネットの 記事 によると、densificationにはcudaを走らせるGPUが必要とあった。

 「cudaって何?」

 ネットで調べると、cudaはnVIDIA社のGPUを並列処理プロセッサとして利用するためのプログラミング環境 のようだ(例えば、https://co-crea.jp/wp-content/uploads/2016/07/File_2.pdf による)。ここで、かつてnVIDIA社のGPUであるQuadro K600を別の目的で自分のPCに増設したことを思い出した。その目的のためには、全く使用せず宝の持ち腐れになっていた。

 「cudaをインストールして、COLMAPでdensificaionができるようにしてみよう。」

 というわけでcudaを触ってみることにした。この記事はその時の試行錯誤のメモです。

 

2. cudaのインストール:失敗編

 ネットに良い記事(https://www.kkaneko.jp/tools/win/cuda.html、以下[K]とする)があったので、それを踏襲してインストールを試みる。おおよその順序は以下のとおり。

 

 (1)Visual Studioのインストール

 (2)NVIDIAドライバーのインストール

 (3)NVIDIAツールキットのインストール

 (4)NVIDIA cuDNNのインストール

 (5)nvccの実行

 (6)NVIDIA cudaサンプルプログラムのビルドと実行

 

2-1 Visual Studioのインストール

 [K]にしたがって Visual Studio Community 2022 をインストールする。時間はかかるが問題なくインストールが行えた。

 

2-2 NVIDIAドライバーのインストール

 NVIDIAドライバダウンロードのページにいき製品に適したドライバーを特定し、ダウンロード、インストールした。PCに搭載されているGPUは Quadro K600 だったので

 

  製品のタイプ:NVIDIA RTX / Quadro

  製品シリーズ:Quadro Series

  製品ファミリー:Quadro K600

  オペレーティングシステム:Windows 10 64-bit

 

とした。

 

2-3 NVIDIAツールキットのインストール

 実施時点(2022年5月)で最新のversion11.6.2をダウンロードし、インストールする。これも無事に終了。その後、環境変数 PATH, CUDA_PATH, CUDA_PATH_V11_6 が正しく設定されていることを確認。

 

2-4 NVIDIA cuDNNのインストール

 これが必要かどうか分からなかったが、[K]にあるとおりにダウンロードしインストール。

 

2-5 nvccの実行

 nvccは、"NVIDIA CUDA Compiler"の略でC/C++言語をもとに独自の拡張を行った専用言語のコンパイラらしい。

 [K]にあるとおり、https://developer.nvidia.com/blog/easy-introduction-cuda-c-and-c/ にあるコードをテキストエディタで編集しhello.cuとして保存した。nvccでのsourceファイルは、cuという拡張子とするらしい。

 Vusual Studioをインストールすると一緒にインストールされる x64 Native Tools コマンドプロンプト で、nvccによりビルドし、作成されたexeファイルを実行する。そうすると、 「Max error: 2.000000」と表示された。[K]によると、「Max error: 0.000000」と表示されるとOKとのことであったが、大した違いでないと考え先に進んだ。結果的にはこれが大きな間違いだった。

 

2-6  NVIDIA cudaサンプルプログラムのビルドと実行

 cuda をインストールすると C:\ProgramData\NVIDIA Corporation\CUDA Samples\v11.6\cuda-samples にcudaのサンプルプログラムが大量に保存される。このフォルダにvusual studio 2022のソリューションファイル Samples_VS2022.sln があるので、これをダブルクリックして立ち上げる。[K]にしたがい、「ソリューションの再ターゲット」、「ソリューションのビルド」を実行。サンプルプログラムが186あるので、ビルドには相当時間がかかった。出てきた結果は、警告の山と19個のエラー。
 186のサンプルプログラムのうち、exeファイルができているものが相当数ある。そのうちの一つがnbody。多体問題のシミュレーションのようだ。そこで改めてnbody単独でビルドすると問題なくビルドできたので、exeを実行してみる。すると、次のメッセージが出た。

 

CUDA error at C:\ProgramData\NVIDIA Corporation\CUDA Samples\v11.6\cuda- samples\Samples\5_Domain_Specific\nbody\bodysystemcuda_impl.h:302 code=13(cudaErrorInvalidSymbol) "setSofteningSquared(softeningSq)" 

 

 そこでcode13に関する情報をネットで調べると、https://www.knime.com/deeplearning4j に以下の記載があった。

 

 どうもGPUである Quadro K600 と cuda のバージョン(ここでは11.6)が合わないらしい。そこで、https://arnon.dk/matching-sm-architectures-arch-and-gencode-for-various-nvidia-cards/ をみると、NVIDIAのGPUのアーキテクチャと対応するcudaのバージョンの記載があった。Qudro K600のアーキテクチャはなんだろうと思い、近くにあったケースをみると「NVIDIA Kepler アーキテクチャにより、・・・」と書いてあった。上のサイトには、Keplerはcuda5からcuda10まで対応と書いてある。それじゃ、cuda10をインストールしてみるか。

 

3. cudaのインストール:成功(したと思われる)編

 cuda10についても[K]と同じ方によるインストールのガイダンス

(https://www.kkaneko.jp/tools/win/cuda10.html、以下[K2]とする)があった。これにしたがいインストールを行うことにした。 

 手始めにvisual studio 2022を削除して、2017をインストールする。これは、cuda10が対応するvisual studioのバージョンは2017までであることによる。後は基本的にcuda11のときと同じでインストールは順調に進んだ。

 「2-5 nvccの実行」にあげたサンプルを実行すると、めでたく「Max error: 0.000000」と表示された。

 そこで最終段階のサンプルプログラムのビルドを行った。cuda10では、サンプルプログラムの数が174に減っている。今回は、174のうち4つのサンプルのビルドに失敗したが、エラーはでなかった。

 そこで、いくつかのサンプルを実施してみた。うまくいくものと、いかないものがあった。下はoceanFFTの実施時のキャプチャ画面、実際はダイナミックな動きに迫力がある。とにかく、サンプルプログラムがいくつも動いたので良しとしよう。

 

4. cudaのコーディング

 サンプルプログラムが動くだけでは、あまりよくわかった気にならないので、実際のコーディングがどうなっているのか知りたくなった。丁度 良い資料 があったので、これにそってコーディングのマネゴトをしてみた。単純に行列の掛け算を行うというプログラムである。必要なコードは全て書いてあったので、visual studio 2017で単に編集しただけである。

 CPUだけ使ったcのプログラムとcudaでのプログラムの2種類のコードが示されているので計算速度の差が実感できるようになっている。

・通常のCでのコーディング

 visual studioを立ち上げ、新規プロジェクト(ここではConsoleApplication1とした)でコンソールを選びコードを書くだけ。ビルドすれば、Debugフォルダーに.exeファイルができる。これをコマンドプロンプトから実行できる。 

  C:\Users\ユーザー名\source\repos\ConsoleApplication1 に.slnファイルができるので、コードを直したければこれを開けばよい。 

・cudaでのコーディング

 visual studioを立ち上げてから、ファイル>新規作成>プロジェクト でプロジェクトを作成する。このとき現れるウィンドウの左側に並んだ「インストール済み」の中から、NVIDIAを選ぶ。すると kernel.cu ができるので、必要なら後で適当に名前を変える。 

 __global__ 関数がcudaプログラムの要のようで、これはmain関数の前におかなければならない。Cの場合、mainで呼び出す関数はその前に定義されていなければならないようだ。Cについてはほとんど何も知らないのでかなりいい加減。

 2つのプログラムを比較すると、明らかにcudaを利用したプログラムの計算速度の方が早かった。参考にした資料には、計算時間が表示されていたが、そのコードが示されていなかったので、計算速度を体感しただけである。

 一応、cudaが動くようになったので、次は、COLMAPのdesificationがうまくいくかどうかやってみよう。