第9章 — SfM バックエンド


Inspector の Camera Alignment ピッカーは、2 つのオプションを持つセグメンテッドコントロールです — Apple Photogrammetry (App Store ビルドのデフォルト、完全に Sandbox 準拠) と Native (Beta) (RadianceKit 独自の FAST+BRIEF+GLOMAP パイプラインバックエンド、 Phase 3.8/3.9 で開発、2026-05 時点)。Native (Beta) はオービット専用に検証され、 ≥1 000 フレームで Apple Photogrammetry より高速ですが、Phase 3 §5 品質ゲート (finalLoss ≤ 0.0115) はまだ満たしていません — そのため Beta タグが付いています。 Metashape、COLMAP、または他のフォトグラメトリーソフトウェアからの外部 SfM 結果は、 追加で File メニュー (Q3 COLMAP テキスト形式、Q6 Workspace インポート) から インポートできます — ピッカーは切り替わりませんが、インポートされたポーズが SfM 結果を置き換えます。
SfM は Structure from Motion の略です。重複する写真群から、ソフトウェアは 各画像について、共有の 3D 座標系内のカメラの位置と視線方向を再構築します。 その過程で粗い 3D 点群が生成され、これが Gaussian Splatting のトレーニングを 初期化します。SfM 結果は実際のトレーニングの入力であり、後の画像品質を 決定的に左右します。
RadianceKit は 5 つの SfM 経路を提供します: アプリに組み込まれた 2 つのバックエンド (Q1 Apple Photogrammetry、Q4/Q5 Native)、外部ツールからの 2 つのインポート経路 (Q3 COLMAP テキスト形式、Q6 バイナリ Workspace インポート)、および Q2 COLMAP バイナリ (App Store 外の Developer ビルドでのみ利用可能)。どれが正しいかは シーンタイプ (オブジェクトの周りのオービット、室内、ドローン飛行) と、外部 ソフトウェアがすでに再構築を提供しているかどうかによって異なります。
Q1 — Apple Photogrammetry
場所
Expert View → Inspector → トレーニング構成 → Camera Alignment ピッカー、項目「Apple Photogrammetry」。
技術詳細
もともと Object Capture 用に開発された Apple の組み込み フォトグラメトリーフレームワークをラップします。Apple は内部的に独自パイプライン (手順は公開されていません) で特徴を抽出し、マルチビューマッチングで検証し、 Apple Silicon Neural Engine + GPU 上でバンドル調整を解きます。バックエンドは 完全に App Store 準拠 (外部バイナリなし、Sandbox=true、オンデバイス) ですが、 カメラポーズと粗い点群のみを提供します — トラック長や再投影誤差などの診断 メトリックはありません。Apple の推奨に従って数百枚の画像までスケーリングします。 直線的なドローン飛行や大規模な屋外シーンで ~500 フレームを超えると、再現性のある クラッシュや個々のカメラの静かな破棄が観察されています。
Q3 — COLMAP テキスト形式 (Metashape / ETH3D)
場所
メニュー「File → Import COLMAP / Metashape Workspace…」 (Cmd+⇧+I) または sparse/0/cameras.txt を含むフォルダのドラッグ&ドロップ。
技術詳細
標準化された COLMAP テキストエクスポートを読み込みます — sparse/0/ サブフォルダ内の 3 つのテキストファイル cameras.txt、images.txt、 points3D.txt — そして内部の SfM 結果モデルに変換します。COLMAP バイナリ エクスポートと同じ形式定義で、バイナリの代わりに ASCII で記述されています。 Agisoft Metashape、RealityCapture、PolyCam、ETH3D ベンチマークがまさにこの レイアウトで出力します。パーサーはバイナリパーサーとカメラモデル検出を共有します (すべての一般的なモデル: SIMPLE_PINHOLE、PINHOLE、OPENCV、OPENCV_FISHEYE、 FULL_OPENCV)。コメント行と空行に対して堅牢。テストで ~1 400 カメラ (ETH3D Tunnel) まで問題なくスケーリングします。
Q4 — Native SfM (インクリメンタル)
場所
Expert View → Inspector → トレーニング構成 → Camera Alignment ピッカー、項目「Native (Beta)」。インクリメンタルがこのバックエンドの デフォルトモード — Inspector には別のマッパーピッカーはありません。CLI 経由で モードを明示的に設定するには –native-sfm または –sfm-mapper incremental を 使用します。
技術詳細
GPU 加速された SfM パイプライン全体の独自実装: FAST+BRIEF 特徴量、または CoreML 経由の SuperPoint+LightGlue (–coreml-features 付き)、続いて Hamming-KNN マッチング、RANSAC 基礎行列、 トラック構築、初期ペア選択、2 視点ブートストラップ (F→E プラス DLT)、PnP 登録と マルチビュー三角測量を用いる greedy インクリメンタルマッパー、最後に Huber Loss と 解析的ヤコビアンを Cholesky Solve で用いる Schur 簡約 Levenberg-Marquardt による バンドル調整。完全に App Store 準拠: 外部バイナリなし、Sandbox=true。Phase 3.10 で 提供された R2 崩壊検出器付き: アプリが入力フレームの 60 % 未満しか登録しない、 またはカメラあたりの点数が 13 を下回ると、自動的にグローバルマッパー (Q5) に フォールバックします。経験的にオービット/ターンテーブルシーンでクリーン。より 一般的な動き (ドローン飛行、複雑な形状の室内空間) では成功率は低くなります — ただし、検出器がこれらのケースをキャッチします。~200 カメラまで確実にスケーリングし、 それ以上は実行時間が大幅に長くなります。
Q5 — Native SfM (グローバル)
場所
インクリメンタルマッパー (Q4) が崩壊検出器をトリガーした場合 (入力フレームの 60 % 未満が登録される、またはカメラあたりの点数が 13 を下回る)、 自動的に呼び出されます。CLI –sfm-mapper global 経由でのみ手動で強制可能。 Inspector では、グローバル手法は別のピッカーからアクセスできません — アプリが切り替えるタイミングを自分で決定します。
技術詳細
ネイティブパイプラインのグローバルバリアント。まず Q4 と同じく 特徴抽出 + マッチング、続いてすべての検証済みペアの相対ポーズ推定、その後 回転平均化 (世界座標系内のすべてのカメラ回転を同期) と平行移動平均化 (大きなカメラ数での整数オーバーフローを避けるため、行列フリーのスパース 定式化に基づく LSQR)。原則として ~5 000 カメラまでスケーリングしますが、 実際には数百カメラを超えると品質が低下します — K-1351 での Phase 3.8 §5 受け入れゲート測定では、目標の 0.0115 ではなく finalLoss 0.07 が得られました。 「フォールバックティア」として扱われます: インクリメンタルマッパーが退化したときに 登場しますが、それ自体は品質を再チェックされません。
Q6 — Metashape / COLMAP テキスト Workspace インポート (Phase Q7)
場所
File メニュー → 「Import COLMAP / Metashape Workspace…」 (Cmd+⇧+I)。sparse/0/cameras.{bin,txt} と images/ を含むフォルダの ドラッグ&ドロップ。
技術詳細
ドラッグ&ドロップまたは Open パネルで選択されたフォルダが、 3 つの COLMAP Workspace レイアウト (sparse/0/、sparse/、またはルート) の いずれかに一致するかどうか、および再構築がバイナリ (cameras.bin) かテキスト (cameras.txt) かを自動検出します。バイナリパスは COLMAP バイナリパーサーを 使用し、テキストパスは ETH3D ローダーを使用します — どちらも同じ SfM 結果 モデルを生成し、パイプラインの残り (画像をインポートし、MCMC トレーニングを開始) は ソースに依存しません。画像はアプリ Sandbox ブックマークシステム経由で セキュリティスコープで開かれるため、インポートは App Store バージョンでも 動作します。特に「Metashape エクスポートを再構築なしで再計算」のケースを 意図しています。File メニュー項目で言及されている検出は、選択されたフォルダが 認識可能な Workspace でない場合、アプリログで警告します。
どのバックエンドをいつ?
| シナリオ | 推奨バックエンド |
|---|---|
| オブジェクトスキャン、50–200 枚 | Q1 Apple Photogrammetry |
| 大規模屋外 / ドローン / >500 枚 | Q6 Workspace インポート (Metashape または COLMAP で計算してから読み込み) |
| Metashape/RealityCapture エクスポートあり | Q6 インポート (SfM 不要) |
| ETH3D / 学術 COLMAP テキストセット | Q3 COLMAP テキストインポート |
| 厳密な App Store 準拠 + オービットシーン | Q4 Native インクリメンタル |
| Q4 が失敗 | Q5 Native グローバル (自動) |
| ETH3D ベンチマークデータ | Q3 (autotest precomputed) |
クイック比較
| バックエンド | App Store | Sandbox | 外部 バイナリ | 最適用途 | 最大 ~Cams |
|---|---|---|---|---|---|
| Q1 Apple PG | ✅ | ✅ | — | Orbit-Object | ~300 |
| Q2 COLMAP Binary | ❌ (Developer ビルドのみ) | — | colmap/glomap | Outdoor large | ~5 000 |
| Q3 COLMAP テキストインポート | ✅ | ✅ | — | Bench rigs | ~1 500 |
| Q4 Native インクリメンタル | ✅ | ✅ | — | Orbit-Object | ~200 |
| Q5 Native グローバル | ✅ | ✅ | — | Q4 フォールバック | ~1 351 |
| Q6 Workspace インポート | ✅ | ✅ | — | Metashape 再利用 | ソース 毎 |