でじたる箱庭計画 試行錯誤(カメラアライメントその2 HLOC + GLOMAP )
すっかり寒くなって、標高1200mのこの辺りでは、少しだけ降った雪がいつまでも残っています。タイトルの写真は散歩でのスナップ。木々の頭が霧氷で白く彩られています。
さて、
今回は「でじたる箱庭」のモデリングの候補である3D gaussian splattingのアライメントにつての試行錯誤その2です。
前回は、Nerfstudioのns-data-processからCOLMAP、HLOCとGLOMAPのggithubに記載のあったcolmapで特徴点抽出と特徴点マッチングを行なってからGLOMAPで再構成を行って評価した。結果としてGLOMAPは速いが精度が問題とわかりました。
その後、悪足掻きで少し調べてみるとGOLMAPの問題点として「外れ値」(https://github.com/colmap/glomap/issues/145)や「スケールアライメント」(https://github.com/colmap/glomap/issues/141)などが指摘されいることがわかりました。前回のGOLMAPの評価は「外れ値」と類似した問題のように思われます。
GLOMAPは問題点も指摘されているのですが、その速度については相変わらず魅力的なのと、HLOCはCOLMAPよりかなり「粘り強く」特徴抽出とマッチングができるのが魅力なので、HLOCとGLOMAPの組み合わせでアライメントする方法を試そうと思っていました。最近「HLOC+GLOMAP」の記事があったのと、HLOC+COLMAPでの事例も見つけたので、HLOCとGLOMAP の組み合わせにチャレンジしてみることにしました。
HLOCとGLOMAP の組み合わせの実施方法とその結果
上記の「HLOC+GOLMAP」はgithubにコードが公開されいてのですが、開発環境としてpixiを前提だったので、今からpixiの勉強するが面倒(実はジジイは真面目に勉強するのが苦手)ということで、そのまま使うのは諦め、HLOCのgithubのコードにあったpiplineSFM.ipynbとnerfstudioのhloc_utils.pyを参考にして簡単なツールを書いて実施してみました。
元画像
360°カメラ(insta360x4)で撮影した動画から1fpsで8方向を抽出
2072画像で各画像は3000x4000画素、視野角110°相当
処理時間
HLOCでの特徴点抽出、マッチングとCLOMAP形式への変換 3時間52分
COLMAPでの再構成 6時間26分
GLOMAPでの再構成 1時間00分
今回の事例ではアライメントの精度はCOLMAPとGLOMAPでほぼ同じで、処理時間は5時間短縮となりました。
「でじたる箱庭」で想定しているデータの場合、RealityCaptureでアライメントを行うと処理時間はかなり短いのですが複数のコンポーネントに分割されてしまう事が多く、コンポーネントのマージにそれなりに手間がかかるのが難点となっています。(RealtiyCaptureで上手にアライメントする方法があったら教えてください)
その点、nerfstudioでHLOC(HLOC+COLMAP)を使った場合、処理時間がかかるものの、これまでのところ、99%以上の画像のアライメントが取れています。また、アライメントを行うのに時間がかかるのですが、夜間に実行すれは、寝ている間に完了するのであまり問題はありませんでした。(夜間電力で省コストだし)
ただ、元画像の数が増えると、一晩では終わらないことあり、その処理時間の半分以上が、COLMAP での再構成部分だったので、GLOMAPに置き換えることで精度は同程度で処理時間が短縮できることが判ったのは収穫でした。
今後、HLOC+GLOMAPを使って、アライメントの精度などの確認をしていきたいと思います。
今回はここまで、
次は、画像の数と出来上がった3DGSモデルの画質について調べてみたいと思います。(気分次第でネタが変わることまりますので悪しからず)