建物の保存のための3D Gaussian Splatting Survey
はじめに
概要
3DGS(3D Gaussian Splatting)は、その圧倒的なクオリティで一躍、注目を集めた三次元再構築技術です。もしご存じない方は、ぜひ以下のリンクを試してみてください。
実際にデモをグリグリ動かせば、「これ、実写じゃん!」と驚くこと間違いありません。
この技術はSIGGRAPH 2023(最近ではSIGGRAPH Asiaが東京で開催されていましたね)で発表され、Best Paperを受賞しています。昨年発表されたばかりの最先端技術でありながら、すでに多くの企業や個人が関連製品やOSS(オープンソースソフトウェア)を公開しています。この中にはポケモンGoのNianticも含まれます。なんか、ライブ感。
そんな3DGSですが、ただ搭載されるだけでなく、様々な改善手法が提案されています。例えば、ArXivで検索すると関連する論文が1000本近くヒットします。もちろん無関係なプレプリントも含まれますが、多くは昨年の夏以降に投稿された本技術に関連するものです。これだけの量から目的の論文を探すのは至難の業でしょう。
本稿の目的
本稿では、3DGSの派生技術の中でも特に、建物の内外を保存するために有用な論文、ソフトウェア、知見をまとめます。
対象とするのは、建築保存に関連する技術に限定します。そのため、
- ロボティクス分野への応用研究
- Gaussian に対するセグメンテーション、マルチモーダルモデルに食べさせる研究
これらは含まない方針とします。
3DGS のおさらい
さまざまな記事があるのですが、とりあえず以下の記事を読めばよく解ると思います。
大雑把に要約すると、3DGSは、3次元空間に半透明のラグビーボールのようなGaussian(ガウス分布)を多数配置し、それらで空間中の光を表現する技術です。学習過程では、実際の画像との誤差をもとに、このGaussian を増やしたり、引き伸ばしたり、色を変えたりしながら、近似を行っていきます。
ここで重要なのは「入力データ」です。3DGSでは、以下の情報が既知であることが前提となります。
- カメラの位置と姿勢
- そのカメラでSplatのレンダリングを行って、画像と結果を比較するため
- 疎点群(Sparse Point Cloud)
- Gaussianの初期値を生成するため
- 歪みのない画像
- Gaussianの位置を学習するため
当たり前ですが、Garbage in Garbage outなので、これらがしっかりしていないと、いいシーンは推定できません。
これらは、たくさんの画像さえあれば、既存の他の技術を用いて推定することができます(Colmap)。が、大規模なシーンだとあまりうまく行かないことも多いです。
実際、もとの論文では、一番広いシーンでも、中庭くらい(5m×5m)だったように記憶しています。
大規模化
建物の外側だけを作る場合は、シーンを比較的小さくまとめることができます。なぜなら、机の上に置いた模型をぐるっと回って観察するように、外周部分だけで見せたいものが構成できるからです。サイズが大きくなっても、見えている部分は外側だけなので、作り込む範囲が限定されます。
しかし、建物の内部も保存して表現する場合は話が違います。
外側と内側の両方を近くで見たときに、細部まで破綻しないように作り込む必要があるからです。外側だけであれば「遠くから見えれば十分」ですが、内部まで作り込むと、観察する距離が近くなるため、その分リアルなディテールが求められ、データ量などが大規模になります。
広域3DGS版の京都VRをつくってみた
大規模なシーンをつくる上で一番に出てくるの以下のスライドです。学習の手法的には、多分、素の3DGSですが、レンダリングにLevel of Depth(遠くのものは表示しない)を追加しているようです。
カメラ位置推定、疎点群の作成という足回りを、レーザースキャナーを使うことでガッチリとやれば、素の3DGSでもかなりいい感じに出来るようです。EfficientGS
単純に大規模になれば、生成されるGaussianの数、つまり成果物のデータ量(Splatデータ)は大きくなります。この論文では、効率のいいGaussianの学習手法を提案しているみたいです。Gaussianの増殖をNon-SteadyなGaussianに絞ったり、枝刈を行ったり、真っ直ぐな改善ですね。
A Hierarchical 3D Gaussian Representation for Real-Time Rendering of Very Large Datasets
街とか大学の構内とか、かなり大規模なシーンの再構成が出来るようで、結構完成した感がある。
戦略もわりと素直で、Gaussianらに階層構造を導入してLevel of Depthを実現したりとか、分割して学習を進めるとか、手動でやっていたことを自動で行うためのアルゴリズムのような気がします。
HorizonGS
具体的には、やっぱりこれもLevel Of Depthとか、Chunkへの分割とか、他の手法と似たようなことをやっているみたい。まだソースコードが公開されていないので試せないですね…。
メッシュに起こす技術
3DGSの成果物は、Gaussianの集合で構成されるSplatデータです。このデータ形式はそのままでも多くのアプリケーションに対応しており、Blender、Unity、Unreal Engineなど向けのプラグインも開発されています。しかし、これらのツールは現段階ではまだ実験的な要素が強く、従来のポリゴンデータと比べると扱いにくい部分が残っています。
そのため、Splatデータからメッシュを生成する技術に関する研究が盛んに行われています。また単にSplatデータをメッシュに変換するだけでなく、視覚的な品質の向上や、Artifactと呼ばれる不要なGaussian(実際には存在しない位置に現れるデータ)を除去できるという、嬉しい効果もあります(というか、シーンの品質向上のほうが主目的)。
SuGaR
Splatデータに少しでも浮いてしまっていたりするような変なGaussianが含まれていると、それも含めてメッシュに起こそうとするので、もこもことした感じになりがちでした。
もっときれいなデータなら悪くないかもしれません。
2DGS
最初から平面で近似を行っていくので、それらを結合して簡単にメッシュに起こせるようです。動画を見た感じ割ときれいそうです。
下処理をとばす技術
ここで言う下処理はカメラ位置推定、疎点群生成のことです。これは基本はColmapだよりで、これがだめだと3DGSもうまく行きません。これを改善する手っ取り早い技術は後述するプロプライエタリなソフトウェアを使うことですが、他にも3D Gaussianを生成する手段があります。
ただ、使える情報が減るので、大規模なシーンにはどれも向いていなさそうです。
COLMAP-Free 3D Gaussian Splatting
普通カメラ位置推定を行うときは、写っている内容の特徴点同士をマッチングして、写真ごとに位置を推定します。しかし、この論文では動画から写真を切り出していることを仮定して、写真ごとのカメラの時系列的な位置の移動をBezierで近似しながら、位置推定を行っているようです。Gaussianも、LocalとGrobalに分けて、Localで位置推定につかいながらもGrobalを成長させていくみたいな。
試してみたのですが、カメラ同士の時系列性が必要になるので、なんらかのオブジェクトの周りを回るようなシーンに強く、道を歩きながら撮った動画からは再構成できませんでした。
LRM系
Deep learningで、カメラ位置はもちろん、3DGSのトレーニングなしに、GaussianのSplatデータを生成する手法があります。割と大きいモデルとはいえ、推論しているだけなので、数秒で生成できます。入力は、テキストか数枚程度の画像です。
ここで紹介するLRMはその中で、一番、シーンの生成に向いているものだと思われます。ほかの生成するモデルが、Diffusion系のモデルで、生成に重きをおいているのに対し、最初に出たGS-LRMはTransformer、Long-LRMはMamba2と系列系のモデルを採用し、複数枚の写真から回帰することを主目的としたモデルとなっています。
GSからLongへの違いは、Mamba2にしたことで計算量が減って、入力できる画像の数が32枚になったという改善です。
まだ実用的な選択肢ではなさそうです。イメージで言うとホログラムで立体的に見える写真レベル。ただ、改善はまだまだありそうなので、もしかしたら化けるかもしれない印象があります。
実務的な知見
ArXivがどうだとか、論文がどうだとか言ってきましたが、一番役に立つのは、実際に手を動かしている人の知見です。
3DGSは割とXのコミュニティが活発です。
観察していると、公式の実装とcolmapを使う人は少なく、以下の2つの手法が多いように感じます
- iPhoneのScaniverseで一気通貫
- RealityCapture/Metashape → Postshot
Scaniverse
Niantic製の3DScanアプリです。一定以上の性能があるスマホだと、オンデバイスで学習まで行ってくれる謎技術です。
とくに、iPhone/iPad では、カメラ位置推定と疎点群の生成が、ARKitとLiDARで簡単に精度良く行えるため結構きれいなシーンが生成できています。
@tweet
スマホ一台で簡単に出来るのは、ロマン。
ただ、オンデバイスでやっている以上、建物のすべてを記録するというところまでのスケールは難しそう。あとなぜかチームにiPhoneを使っている人がいなかった
RealityCapture/Metashape to Postshot
RealityCaptureとMetashapeは、3DGS以前からある、フォトグラメトリ用のソフトウェアです。
Postshotは、3DGSをGUIで実行してくれるソフトウェアです。RealityCapture・Metashapeで、カメラ位置推定と疎点群の生成を行ったあと、Postshotで学習を回す人が多いようです。もとの論文ではColmap(OSS)を使っていたのですが、あまり精度がでない、うまく画像を追加してくれない、疎点群の密度が低すぎるなどの問題から、代わりにプロプライエタリのこれらを用いているようです(たしかに全然違う)。
PostshotがRealitycaptureのデータに対応し、Realitycaptureが今年の四月に無償化されたことによって、またGUIで操作できることも相まって、一番使われているのだと思われます。
学習をサーバーで行いたいので、Windowsしか対応していないこれらは使いづらいです
便利なOSS
OSSも活発で、便利そうなリポジトリが複数あります。
Gaussian Splatting Lightning
マルチGPUとかに対応した3DGS実装。貪欲に新しい手法などを取り入れていて、紹介した技術でもすでに対応されているものが複数あります。
SuperSplat
WebでSplatデータの編集が出来ます。じゃまなSplatを削除したり、結合したり。建物の内外を統一的に学習するのは現実的ではないので、手作業で編集するときは使えるとおもいます。けっこうUIも洗練されてきてる。
終わりに
本記事は広大な3DGSに関する研究の超一部しか紹介できていません。ぜひ、ご自身でも調べてみると同時に、これからも出てくる技術動向を注視してみてください。
あと、いまできないことでも、数カ月後には出来るようになるくらい日進月歩な分野なので、思うような結果が得られなくても待ってみることは必要かもしれません。
この記事は、豆腐アドカレ老害版2024の18日目の記事です。
取り壊されてしまう田町の校舎を保存する経緯については同アドカレの3日目、以下の記事にて説明してくれています。関係者の方はDiscordにも参加できるため、ぜひよろしくおねがいします。
Discussion