![見出し画像](https://assets.st-note.com/production/uploads/images/138520394/rectangle_large_type_2_d3acc51adeaf74c0c11626fd222863d1.jpeg?width=1200)
今話題のGaussian Splattingについて解説してみた(1/2)
ANDPAD ZERO、研究開発Gの菊野です。
今回は最近話題の「Gaussian Splatting」について解説したいと思います。
元の論文を読み解きながらの解説になるため少しテクニカルなお話になりますが、Gaussian Splattingの仕組みの理解やメリット、デメリットについても学んでいただけると幸いです。
Gaussian Splattingとは?
![](https://assets.st-note.com/img/1714097492571-4jAMwnicFT.png?width=1200)
Gaussian Splattingとは、複数の画像からシーンやモデルを作る技術なのですが、これに似たような技術は今までも耳にしたことがあるのではないでしょうか。
フォトグラメトリやNeRFなど、これまでANDPAD noteでご紹介した事例もそのひとつです。ANDPAD 3Dスキャンで用いているLiDARスキャンも、複数画像に深度センサを活用しており、似た技術のひとつといえます。iPhoneやiPadから簡単に点群などの3次元データが作成出来るようになったことにより、モバイルスキャンが一気に一般化されました。
外から見るとGaussian SplattingもLiDARスキャンやフォトグラメトリのように3Dデータを生成する技術で一緒なのでは?と思われるかもしれませんが、厳密にいうと少し違います。
例えば、Gaussian Splattingは、3次元空間の表現方法が他の3次元データ生成と異なります。LiDARスキャンやフォトグラメトリのように、メッシュや点群として表現しているわけではなく、ガウス分布で表現しているのです。
「ガウス分布で表現」…?よくわからないですよね…
まずはどのように3次元空間の表現方法が違うのかを、ひとつづつ噛み砕きながら説明させていただきます。
様々な3次元空間の表現方法
様々な3次元空間の表現方法①(メッシュ、点群、サーフェル):
3次元空間を表現する方法は様々あります。例えば、
・点群では、点の集合体
・メッシュでは、主に三角形の集合体
・サーフェルデータでは円の集合体
で構成されていて、おのおのの表現方法では、データの持ち方が統一されています。
その中でも今一番主流なのがメッシュによる描画方法となります、メッシュの場合の描画方法は、基本的に、三つの頂点から構成された三角形が連なるもので構成されていて、その三角形にテクスチャ(2次元画像)が貼り付けられることで構成されています。このメッシュとテクスチャデータは画面上に表示するための描画効率が良いため、現状でも主流で使われるデータ形式となっています。
![](https://assets.st-note.com/img/1714098179146-DGRs6Gmb0b.png?width=1200)
アニメーションやゲーム作成においては、このメッシュデータが主流でありますが、他方、点群データなどは測量データなどで良く用いられる3次元空間の表現方法となります。
サーフェルデータ(画像2、右の画像)以外は、3Dを触ったことがある方であれば聞いたことがある表現方法だったかと思います。
様々な3次元空間の表現方法②(NeRF):
次に、簡単にNeRF(Neural Network Radiance Field)についても解説してみたいと思います。
NeRFは、ニューラルネットワーク(人間の脳の神経細胞を模したデータ処理方法)を使い複数視点の画像から、精細な任意視点の画像を生成する技術です。3次元空間をネットワークで表現するというのは、想像しづらいかもしれませんが、実は仕組み自体はシンプルです。仮設空間内にカメラを設置しその場所から光線を飛ばし、光線が経由した場所の色と密度(≒透明感のようなもの)を推測し積層させて、複数の光線で画像を埋めることで精度の高い描画ができていくイメージです。(画像3)
従来の仕組みに比べてカメラ位置情報(x,y,z)とカメラの向き(θ, Φ)という5つのパラメーター、いわば5Dの情報から学習させているにもかかわらず、実際に3次元空間を生成出来ることはすごいことだと思います。一方で、リアルタイムレンダリングとして使うには最低でも30秒程度描画に時間がかかってしまうという難点、また、学習に最低でも数時間かかってしまうという課題があります。
![](https://assets.st-note.com/img/1714098608179-TKcTkk3UJm.png?width=1200)
さて、ここまでが、Gaussian Splattingの説明に入るための長い前置きだったのですが、様々な3次元空間の表現方法について、わかっていただけましたでしょうか?
いよいよ、本題であるGaussian Splattingについて、どういった仕組みか見ていきたいと思います。
一部、NeRFとの類似点(複数視点の画像から3次元空間を作成し、任意視点で詳細な画像を描画ができる)もありますので、そのあたりも意識しつつ解説できればと思います。
Gaussian Splattingの表現方法・仕組み
Gaussian Splattingの表現方法:
Gaussian Splattingとは、複数の画像からシーンやモデルを作る技術という点では上記で紹介した様々な3次元空間表現と似ています。他方、メッシュや点群データとの相違点として、Gaussian Splattingは、『3Dガウス』と呼ばれる楕円型状の分布(霧のようなもの)を重ね合わせることで3次元空間を構成するという特徴があります。
(楕円型を選んでいる理由は深いものは無く、円形や球状のものでも試したところ楕円型が一番精度が高く描画が出来たことが理由と論文では述べられています。)
![](https://assets.st-note.com/img/1714098702932-BHMVuOtJJz.png?width=1200)
一つ一つの3Dガウスは、位置情報(Location: x,y,z)、バラツキ(covariance: σ)、透明度(Alpha: α)、色(Color)というパラメーターから構成されています。(画像.7)小さい複数の3Dガウスが3次元上で構成されることで、詳細な画像を描画することが可能になります。
![](https://assets.st-note.com/img/1714098817172-2QdCnUDByC.png?width=1200)
Gaussian Splattingの仕組み:
Gaussian Splattingは複数画像からシーン表現を生成し、任意の視点から画像を生成することができる仕組みとお伝えしましたが、その仕組みの流れについて解説します。
①初期点群設定、②3Dガウスに置き換え、③任意視点の画像生成、④最適化となります。詳しくは以下の図をご確認ください。
①初期点群設定:
事前準備:SfM(複数画像から点群データを生成する仕組み)の技術を使い、初期位置になる点群データを作成します
②3Dガウスに置き換え:
SfMで生成した点群データを3Dガウスで置き換える。
③任意視点の画像生成
次に実際の画像と比較するために3Dガウスをラスター化させます。(ラスター化とは、3次元の図形をピクセル画像に変換することを指します)ラスター化した画像と元の写真を比較することで、どのぐらい3Dガウスで表現したものが情報として正しいかを確認します。GPUの高速なソート処理を使うことで、このラスター化が瞬時に行えます。このラスター化が瞬時に行えることで、Gaussian Splattingでリアルタイムレンダリングや最適化の処理時間がほとんどかからない理由となってます
④最適化
勾配降下法を使い3Dガウスのパラメーターを微調整させる。これを繰り返す(7000 ~ 30000回程度)
![](https://assets.st-note.com/img/1714098948389-pWXpiunhrM.png?width=1200)
最適化の部分はあくまでも、機械学習でもよくつかわれる勾配降下法が使われており、3Dガウスの4つのパラメーター(位置情報,、透明度、色、バラツキ)を微調整させてコストを最小化することで、3Dガウスのバラツキや位置を調整させ、もっともらしい3Dガウスを生成させています。実際の仕組みでは、3Dガウスを分割させる仕組みや削除する仕組みなど、もう少し複雑な処理を行っています。
Gaussian Splattingのメリット・デメリット
Gaussian Splattingのメリット①・短時間で画像作成:
3Dガウスのメリットは主に瞬時に3Dガウスから任意視点の詳細な画像を生成することができることが挙げられます。そのため3Dガウスの最適化が短時間で行えるということと、リアルタイムレンダリングのような体感で描画できるというのがNeRFに比べた最大のメリットとなっています。GPUの高速ソート処理を行うことで、画像の短時間作成を行っております。初期のNeRFでは学習時間に48時間かかっていたのですが、Gaussian Splattingでは40分程度で完了できるため、同等程度の描画を行う上で、パフォーマンスが大きく向上したといえます。
Gaussian Splattingのメリット②・NeRFと同等レベルの描画:
(論文にも記載があるのですが・・・)Gaussian Splattingの描画とNeRFでの描画では、同等レベルまたはそれ以上に精度で描画出来ると結果が論文で発表されています。この部分についてはまた次の記事で実際に比較をしながら共有できればと思います。
![](https://assets.st-note.com/img/1714099012704-k8P4x3lhcq.png?width=1200)
実際に毎度おなじみに弊社オフィス8階のロビーで撮影を行って見ましたが、細かい照明や植物まで撮影できており細かい部分もしっかりと撮影できていることが分かります。
![](https://assets.st-note.com/img/1714099046978-xb1rEsOgmc.png?width=1200)
Gaussian Splattingのデメリット①・データ容量とメモリが重い:
Gaussian Splattingのメリットについてここまで紹介させていただきましたが、必ずしもすべて良いかというとそうとも限りません。まず点群やメッシュと違いデータ容量が重いということと、メモリを多く消費する必要があるという課題が見受けられます。さきほどの表からも読み取れるのですが、NeRFと同等のスコアを出すにはメモリを10倍弱必要とするという結果も出ています。Gaussian Splattingは、あくまでも新しい3次元空間の表現方法であるため、今後より一層最適化されることを期待しましょう。
Gaussian Splattingのデメリット②・複雑な空間の撮影が難しい:
論文によればGaussian SplattingがNeRFと比べて複雑な空間の再現に向いているとのことです。撮影方法を工夫することでかなりの品質を実現することができました。その工夫とは、「常に中心を向きながら撮影すること」です。
撮影する対象物が中心にある場合では、その周りを周回しながら中心を向いて撮影することが一般的ですが、対象物が中心にない場合でも、外側を向くことなく、常に部屋の中心を向きながら撮影することで綺麗に撮影できるようになっています。
実際に、私が弊社ロビーを撮影した際にも、中心を向いて撮った場合と外側を向いて撮った場合で、以下のような精度の違いが発生しました。このあたりの細かい撮影方法・工夫点などについては次回の記事で詳しく紹介できればと思います。
![](https://assets.st-note.com/img/1714099114458-I9LFjYmGHk.png?width=1200)
![](https://assets.st-note.com/img/1714099144692-7nhR3DbvbF.png?width=1200)
まとめ
今回はGaussian Splattingの仕組みについて説明してみましたがいかがだったでしょうか?Gaussian Splattingが複数画像から3次元空間やシーンを生成する仕組みであり、そもそも3次元空間の表現方法自体が違うことを学んでいただけていたら幸いです。
Gaussian Splattingを調査した上で、Gaussian Splattingでは表現できない3D空間というのがあるのでは?ということを感じました。
例えば、NeRFであればカメラの位置ごとに光線を飛ばし、色や透明度を変更できるため、反射などを精細に表現することができますが、Gaussian Splattingにおいては反射という要素が3Dガウスにないため、この表現が難しいのでは?と感じたところであり、このあたりについても今後の記事で検証していきたいと思っています。
この記事を読んで自分でもGaussian Splattingを試してみたいと感じた方はぜひLumaAIやScaniverseといったiOSのアプリを使いGaussian Splattingの撮影してみたり、Unreal Engineを使えば簡単にGaussian Splattingのデータを表示することができます。ぜひご関心のある方は試してみてください。
参考文献リスト:
元の論文:https://github.com/graphdeco-inria/gaussian-splatting
論文の説明動画:https://www.youtube.com/watch?v=xgwvU7S0K-k&t=7532s