4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

360° 全天球画像を用いた 3D Gaussian Splatting 入門(360° Gaussian Pro 編)

4
Posted at

はじめに

以前、手軽に始める 360° 画像を用いた Gaussian Splatting(基本手順編) という記事で、360° Gaussian を使って 360° 動画から 3D Gaussian Splatting(以下 3DGS)を生成する手順をご紹介しました。

その後、このツールの開発者により、従来版よりも 手軽かつ高速に 3DGS を生成できる Pro 版 がリリースされました。
本記事ではクイックスタートとして、360° Gaussian Pro の使い方をご紹介します。


動作環境

PC スペック

項目 環境
OS Windows 11
GPU NVIDIA GeForce RTX 4070 SUPER
CPU AMD Ryzen7 8700G
RAM 32 GB

360° カメラ

  • Insta360 X4 Air
    ※ THETA など他メーカーのカメラでも利用可能です。8K 以上を推奨します。

ソフトウェア

ソフトウェア 用途
LichtFeld Studio v0.5.3 3D Gaussian Splatting の GUI ツール ※
360° Gaussian Pro v1.0.1 画像の切り出し・マスキング・SfM を自動化するツール

※ LichtFeld Studio の入手について
LichtFeld Studio v0.5.x のビルド済みバイナリの無償配布は終了しました。v0.4.0 は引き続き無償でダウンロード可能です。v0.5.3 を利用するには、有償ライセンスを購入するか、ソースコードから自分でビルドする必要があります。
GitHub で公開されている最新機能を試したい方や、ライセンス購入前に試したい方は、下記を参考にご自身でビルドする方法もお試しください。

自分でビルドする場合の注意点

クリックして展開

自分でビルドする場合は、こちらのビルド手順 を参照してください。
ヒント1
公式ビルド手順には記載がありませんが、Perl のインストールが必要になる場合があります。Strawberry Perl からインストールしてください。
ただし、Perl に同梱された cmake が優先的に実行されてしまうことがありますので、C:\Strawberry\c\bin\cmake.exe は一時的に別名に変更し、今後不要であれば削除してください。念のため、その後 PC を再起動してください。
ヒント2
公式資料の Clone repository に記載されている下記コマンドでは、筆者の環境で必要なファイルが正しくダウンロードされないケースがありました。
git clone https://github.com/MrNeRF/LichtFeld-Studio
代わりに、サブモジュールの取得漏れを防ぐため、以下のように --recursive フラグを付けるか、Fork や GitHub Desktop などのクライアントソフトで clone することをお勧めします。
git clone --recursive https://github.com/MrNeRF/LichtFeld-Studio
ヒント3
なお、手順内の Checkout stable version のステップに含まれる git checkout v0.4.0スキップしてください
ビルドには長い時間がかかる場合もあるため、時間に余裕のあるときに実施することをお勧めします。


従来版との違い

代表的な違いは以下のとおりです。

  • カメラのアライメントが最新版の COLMAP / GLOMAP に対応
  • 入力形式の拡大:Equirectangular 画像のほか、DualFisheye 画像、さらにスマホなどで撮影した一般的な動画も入力できる
  • SAM3 を用いたマスキング
  • スマホやデジカメで撮った詳細画像の追加が可能
  • 各処理ステップの大幅高速化

どんな人におすすめ?

  • 手軽に進めたい人:動画を追加したあと、デフォルト設定でよければ ボタンひとつで 3DGS 生成まで 進められます
  • パラメータを自分で調整したい人:COLMAP でアライメントする際のパラメータを UI から設定できます。「ツールを使って位置合わせしました」だけでなく、使用したパラメータまで明確にする必要がある人(論文を書く方など)に向いています

全体の流れ

Gaussian Splatting では、一般的に以下の 4 つのステップを踏みます。

# 工程 内容
1 撮影 360° カメラでシーンを撮影する
2 SfM(Structure from Motion) 各画像がどの位置から撮影されたかを推定する
3 点群生成 SfM で得られたカメラ位置をもとに点群を生成する
4 Gaussian Splatting 点群をもとに 3D Gaussian Splatting モデルを生成する

Step 1. 撮影・動画のエクスポート

360° カメラでシーンを撮影します。処理時間が長くなる場合があるため、慣れるまでは 1 分以内の短い動画 でテストすることをおすすめします。

前述のとおり、従来版と同様に Equirectangular 画像も使えますが、せっかくなので今回は DualFisheye を使ってみます。
Equirectangular で試したい方は、Insta360 Studio でのエクスポート手順や手ぶれ補正の設定について前回の記事(基本手順編)の Step 1 を参照してください。

Insta360 を使用している場合は、

1. USB ケーブルで PC と Insta360 を接続します
2. 処理にかけたい .insv ファイルを PC にコピーします

それだけです。 Equirectangular に変換する必要がない分、手軽ですね。


Step 2. SfM と点群生成

この手順から 360° Gaussian Pro の出番です。

従来版では SfM に SphereSfM や Metashape などのツールを自分で選ぶ必要がありましたが、本ツールでは COLMAP に統一されました。そのため、他のアプリのインストールは不要です。

詳しいステップは以下の動画でも解説されています。

2.1 画像の切り出し

1. 360° Gaussian Pro を起動します
2. Add footage to start.insv ファイルをドラッグ&ドロップします
  ※ Equirectangular や一般的な動画ファイルで試す際は .mp4 をドラッグ&ドロップします

add-image.png

3. 切り出しに関する各種設定を行います

まずはデフォルトのままで問題ありませんが、Frame Extraction には以下のような設定項目があります。

パラメータ 説明
Extract frame every 指定した秒数(またはフレーム数)のインターバルで画像を切り出す
Pick sharpest frame per interval / window 前後のフレームと比較して、ボケの少ない画像を優先的に選択するかどうかのオン / オフと、画質比較の範囲。例えば 10 の場合、前後 5 フレームを比較して最もシャープな画像を選択する
Pinhole Split Fisheye 画像を何分割の pinhole タイルに再投影するか。1 split は最速だが魚眼の約半分しかカバーしない、5 splits(既定)は重なりを持たせて全周をカバーする、9 Splits はタイル間の重なりが最大で複雑なシーン向け

詳細は公式ドキュメントを参照してください。

ℹ️ Equirectangular 入力の場合
Equirectangular 入力の場合は Pinhole Split ではなく、常に 6 面のキューブマップに変換されます。

4. (オプション) 次のマスキング設定をしやすくするための手順です
  4.1 動画のタイムラインをクリックして、マスキングの事前確認に使いたいフレームを選択します
  4.2 Extract one frame をクリックします

2.2 画像のマスキング

Gaussian Splatting の処理に不要な領域を自動でマスキングする機能です。

1. Masking タブをクリックします
2. 前節で Extract one frame をクリックした場合は画像が表示されます

masking1.png

ℹ️ Extract one frame をクリックしなかった場合
画像は表示されませんが、マスキング自体は正しく動作します。

3. Keyword SAM3 では、指定したキーワードでマスキングできます(カンマ区切りで指定)
4. Detect this frame をクリックすると、数秒後に結果をプレビューできます(プレビューが不要な場合はスキップしても OK です)

person,sky を指定した場合の結果が以下です。人物と空がマスク(ピンク)されていることがわかります。

masking2.png

5. Paintbrush では、除外したいオブジェクトをマウスでなぞって指定できます(スキップ OK)
6. Circle Mask(DualFisheye のみ)では、カメラ画像領域外をマスクします。円の半径を変更して、処理対象の領域を狭めることも可能です

💡 マスクが重要な 2 つの理由
まず、人や車などの動く被写体や、低テクスチャで特徴点の少ないオブジェクトは SfM のノイズになりやすく、カメラ位置の推定精度を下げます。SfM の精度はその後の Gaussian Splatting の出力品質に直結するため、これらをマスクで除外することが重要です。
さらに、トレーニング段階でも同様のノイズが品質を低下させます。同じ被写体が撮影位置によって異なる見た目で映り込むと、Gaussian が正しい形状・色に収束しにくくなります。マスクはこの両方の工程で品質を保つ役割を果たします。

2.3 SfM の設定

こちらも、まずはデフォルトのままで問題ありません。

alignment.png

補足として、Matcher ではマッチング方法を選べます。

Matcher 説明
Sequential 撮影順に隣接フレーム同士だけを比較する。高速で、連続フレームが重なる動画入力ではたいていこれが最適
Exhaustive 全画像を総当たりで比較する。順序のないフォトセットに最も強く高品質だが、ペア数が画像数の 2 乗で増えるため最も低速
Spatial GPS を使って物理的に近い画像同士だけを比較する。信頼できる GPS があれば高速かつ高品質で、実寸スケールも付与される(.osv ファイルでは現状まだ実験的)

その他の設定は以下のとおりです。

設定 内容とメリット
GLOMAP global mapper フレームを 1 枚ずつ登録していくのではなく、全カメラ位置を一括で解く方式。10〜100 倍高速で、既定でオンになっています。
Geometry Timeline Check 実験的機能。似た見た目の別の場所(同じ内装の部屋、上り下りした階段など)を同一地点と誤認してモデルが自分自身に折り重なる現象を、「時間的に離れたフレームが同じ場所にいるのはおかしい」というルールで検出し、自動で修復します。fold が検出されたときだけ処理時間が数分増えます
Reuse Fisheye features pinhole タイルで特徴点を再検出せず、Stage 1 で検出した特徴を再利用します。pinhole タイルの処理が高速になり、VRAM も約 1 GB で済みます(通常は 4〜8 GB)。ただし細部の再現性がやや低下し、一部が欠落する場合があります

このほか、スクリーンショットに写っている項目についても簡単に触れておきます。

  • Overlap:Sequential の場合に、前後いくつのフレームまで比較するか
  • Loop detection:同じ場所に戻ってきたことを検出してループを閉じる処理のオン / オフ
  • Lens priors:レンズパラメータの初期値。Auto (recommended) のままで OK
  • Preset quality:品質プリセット。Save... で自分の設定に名前を付けて保存できます

さらに Advanced settings を開くことで、COLMAP に関するさまざまな設定も可能です(例えば SIFT 特徴点の上限は fisheye で 32,768、pinhole タイルで 8,192 が既定値です)。

詳細は公式ドキュメントを参照してください。

2.4 詳細写真の追加(オプション)

Pro 版では、360° 画像だけでなく スマホや一眼カメラなどで撮影した高画素の写真 も混在させることが可能です。
これにより、360° 写真では失われがちな風景内の文字やイラストのディテールを再現できます。

追加するには、画面右側の Detail photosAdd detail photos... で詳細画像が格納されたフォルダを指定するだけです。

additional-photo.png

⚠️ 注意
詳細画像も SfM にかけるため、推定しやすいように 複数視点の写真を用意してください。上の例では、案内板を少しずつ角度を変えながら 14 枚撮影しています。

2.5 3D Gaussian Splatting 学習ツールの選択

Train タブをクリックします。

Pro 版では LichtFeld StudioPostshotBrush をサポートしています。
トレーニングまで自動化したい場合は、いずれかをインストールして適宜設定してください。実行ファイルのパスや Iterations、Strategy、Max Splats などをこの画面から指定できます。

筆者は 3DGS の学習過程も確認したいため、No Train を選択しています。

train.png

2.6 実行

ここまでできたら、画面下部の Run Pipeline をクリックします。
同じく画面下部に進捗が表示されるので、完了するまで待ちます。

progress.png

⚠️ 長時間処理が進んでいないように見える場合
画面左下の Log ボタンをクリックしてログを確認してください。

終了後、Alignment タブを開くと結果を確認できます。結果は 0_train_data に保存されます。

alignment-result.png

この時点で結果が期待どおりでなければ、設定を変えてアライメントを再実行できます。
また、結果が傾いている場合や位置がずれている場合は、Rotate / Translate の各パラメータ(X, Y, Z)をマウスでドラッグすると調整可能です(Align ground で地面に合わせることもできます)。
最後に Apply edits をクリックすると、出力ファイルに反映されます。

ℹ️ 位置・向きはどちらのツールでも調整可能
LichtFeld Studio でも位置や向きは変更可能なので、使いやすいほうで調整してください。

なお、上のスクリーンショットで赤く表示されているカメラが 2.4 で追加した詳細写真です。案内板の周囲に集まっているのがわかります。


Step 3. Gaussian Splatting

3.1 データの読み込み

1. LichtFeld Studio を起動します
2. 上記で生成された 0_train_data フォルダをウィンドウにドラッグ&ドロップします
3. Load Dataset ダイアログが表示されたら Load をクリックします

lfs.png

lfs2.png

点群と画像が正しく読み込まれたことを確認してください。
カメラ画像の表示が不要な場合は、画面右側の Rendering タブにある Camera Frustums のチェックを外します。

lfs3.png

3.2 トレーニング設定

ここではトレーニング設定の一例を紹介します。慣れてきたらさまざまな設定を試してみてください。

1. Training タブをクリックします
2. StrategyMRNF を選択します
3. Steps Scaler を適宜設定します

条件 推奨値
画像数が 300 枚以下 1
画像数が 300 枚を超える 画像枚数 / 300

⚠️ トレーニングがうまくいかない場合
上記の設定で実行してもトレーニングが収束せず、画面がホワイトアウトしてしまう場合は、Steps Scaler を 画像枚数 / 3002〜3 倍 に設定すると安定しやすいです。

4. Max Gaussians で最大ガウシアン数を設定します
デフォルトは少々多めなので、スキャンエリアのサイズにもよりますが 1,500,000 程度からスタートして様子を見るとよいでしょう。ディテールが不足していると感じたら値を増やしてみてください。

オプション設定 1:
マスク画像を使用したい場合は以下の設定を行います。

  • Mask ModeIgnore に設定
  • Alpha Mask → チェックを外す

オプション設定 2:
詳細写真を追加した場合は Undistort をオンにします。

lfs4.png

他のパラメータについては、まずは上記の設定で進め、慣れてきたら試行錯誤してみてください。

3.3 トレーニングの実行

1. マウス操作で、トレーニングの経過を観察したいエリアにクローズアップしておきます
  (筆者の例では中央のオブジェクト周辺)
2. Start Training をクリックしてトレーニングを開始します
3. 最初はぼんやりとした表示ですが、ステップが進むにつれて徐々にクリアになっていきます

lfs5.png

トレーニングステップが上限に達すると自動で終了します。
途中経過を保存しておきたい場合は、Save Checkpoint をクリックするとその時点の結果を記録できます。

3.4 エクスポート

出力データは SuperSplat Editor などのツールを使って、動画作成やビューワーでの閲覧に活用できます。

1. File → Export をクリックします
2. 出力フォーマットを選択します(例:.ply


まとめ

これまで従来の無料版を使用してきましたが、Pro 版になって SfM の精度が高くなり、結果として 3DGS の出力品質も上がりました
また、マスキングの精度も向上しています。各ステップの処理も高速になり、待ち時間が減りました。

今回は DualFisheye での操作方法を紹介しましたが、Equirectangular でも同じ流れです。
筆者の実験環境では Equirectangular を使ったほうが処理時間は短かったです。結果についても、個人的には Equirectangular 画像を用いたもののほうが好みでした。シーンや好みによっても変わるため、両方を試して自分に合ったフローを見つけてみてはいかがでしょうか。

Pro 版の価格は 149 ユーロです。有料ですが、定番ソフトである Metashape とおおむね同じ価格帯です。
画像の切り出しやマスキング、SfM までの処理を、アプリケーションを切り替えることなくワンタッチで実行できるため、利便性を考えると十分に検討する価値があると思います。ご興味がある方はぜひお試しください。

📝 ご質問について
ご質問は公式の Discord をおすすめしますが、軽微な内容でしたら筆者にご質問いただいても OK です。

作例(詳細画像あり / なし)

参考までに、詳細画像あり/なしの出力も掲載しておきます。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?