はじめに
こんにちは、しゅんです。
今回はMeta が出してきたのが MapAnything。についてGPTが解説した記事となります。
⚠️注意!あくまでもGPTが書いてた解説です
複数画像 +(任意で)カメラ内参・カメラ姿勢・Depth・部分再構成を入力として、カメラとシーン幾何を“メトリック(実スケール)”で直接回帰する、統一Transformerモデルです。(arXiv)
MapAnything が何を解決したいのか
従来のクラシックSfM/MVSは、特徴抽出→マッチング→2-view推定→BA→MVS…のように分解して高精度を出します。一方、最近のフィードフォワード系(DUSt3R / VGGT など)は強いけど、
- 入力が画像だけ/ピンホール前提など制約が残る
- “何でも解ける”ようにするほど、出力が冗長になったり、後処理が重くなりがち
という課題がありました。(arXiv)
MapAnything は「入力の自由度」と「メトリック化」を両立させるために、出力空間を“幾何的に筋の良い形”に作り直しています。(arXiv)
コアアイデア:Factored(分解された)シーン表現
MapAnything の要は、シーン表現を RDP + Scale みたいに **分解(factorize)**することです。
- Ray directions(各ピクセルのレイ方向):内参やカメラモデルを“レイ”として表現
- Depth along ray(レイ方向の深度):各ビューごとの深度
- Pose(各ビューのカメラ姿勢):回転(クォータニオン)と並進(ただし up-to-scale)
- Metric Scale(グローバルな実スケール係数):up-to-scale をメトリックに“昇格”させる 1 個のスカラー
この「局所(各ビュー)で推定しやすい量」と「グローバルで1個にまとめたい量(スケール)」の切り分けが、異種入力にも強く、学習も安定しやすい設計になっています。(arXiv)
入力:画像 +(任意で)幾何入力を“混ぜて”OK
論文で明示されている入力は大きく3系統です:(arXiv)
- 内参(汎用 central camera)を Ray directions として入力
- Pose(view1座標系)を quaternion + translation として入力
- Depth(各ピクセル)を入力
さらに Abstract では「partial reconstructions(部分再構成)」も入力に含められる、とされています。(arXiv)
実例として、疎な点群(=疎Depth)を与えて depth completion っぽく密にする例も示しています。(arXiv)
出力:最終的に“メトリック”な3D(カメラ + 幾何)
MapAnything は N-view に対して、各ビューの Ray / Depth と Pose、そして グローバルScale を出し、最終的なメトリック再構成にします。(arXiv)
アーキテクチャ(図2の流れを噛み砕く)
論文の Figure 2 の説明を、実装視点で分解します。(arXiv)
1) 画像エンコード:DINOv2(ViT-L)を採用
画像特徴は DINOv2 ViT-L のパッチ特徴を使用。収束や汎化が良かった、と述べています。(arXiv)
2) 幾何入力は “factorize” してから同じ潜在空間へ
Depth は「平均深度」+「正規化深度」へ分解するなど、メトリック/up-to-scale混在でも学習できるように前処理します。(arXiv)
Ray directions / 正規化Depth は浅いConvで、回転・並進方向・スケール等のグローバル量はMLPで埋め込みます。(arXiv)
3) scale token + 参照ビュー埋め込み + Alternating-attention Transformer
- view1 を基準にする埋め込みを付与
- learnable scale token を1個追加
- それらを 24層の alternating-attention Transformerへ入力(12 heads, dim 768, MLP ratio 4)(arXiv)
- RoPE は使わず、DINOv2の位置情報で十分だった、という判断も書かれています。(arXiv)
4) デコード:DPT 1つで密な出力、Pose head で姿勢、scale token で実スケール
- DPT head:ray方向・up-to-scale depth・マスク・confidence などを各ビューで出す(arXiv)
- Pose head:平均プーリング系のヘッドで quaternion + up-to-scale translation を出す(arXiv)
- Scale token:MLPで metric scale factor を出し、指数スケーリングでレンジの広さに対応(arXiv)
ここが MapAnything の「メトリック化の肝」です。
何が“1つのモデル”でできる?
Abstract と Figure 1 で、少なくとも以下が射程に入ると述べています:(arXiv)
- uncalibrated SfM
- calibrated MVS
- monocular depth
- camera localization
- depth completion
- …など(12+タスク / 入力組み合わせ)(arXiv)
「入力が揃ってるほど強い」のがポイントで、例えば 内参・姿勢があるロボット用途はかなり相性が良い、という示唆もあります。(arXiv)
学習:複数データセット統一 + “入力確率”でマルチモーダルを鍛える
MapAnything が “何でも入力OK” になってる理由は、訓練時に入力モダリティを確率で出し分けるからです。(arXiv)
- 幾何入力を入れる確率:0.9
- ray / depth / pose 各要素はそれぞれ 0.5で選択
- depth を入れるときは dense と 90% sparsify を半々
- viewごとに幾何が欠ける状況も想定して per-view 0.95
- メトリックGTがあっても scale を入れない確率 0.05(=推定も鍛える)(arXiv)
さらに、学習データは 13データセットを使い、モデルは **2種類(Apache 2.0 と CC BY-NC 4.0)**を公開、としています。(arXiv)
ベンチマークの見え方(ざっくり)
- 2〜100 viewまでの dense multi-view で強い、という主張(図5の説明)(arXiv)
- 追加の幾何入力(内参・姿勢など)があると、重複構造が減って整合が上がる(図3の説明)(arXiv)
- 補足では **64通りの入力組み合わせ(2^6)**があり、代表12通りを表で示して「入力が増えるほど良くなる」ことを出しています。(arXiv)
限界(論文が正直に書いてるところ)
Limitations では、例えばこんな話が出ます:(arXiv)
- 幾何入力のノイズ/不確実性を明示的に扱っていない
- 画像が無いビュー(カメラだけのビュー)入力は未対応だが、拡張は可能そう
- test-time compute を増やす反復推論は未検証
- モダリティ融合を「Transformer前で足し込む」設計なので、より直接的な融合も今後の余地
- ピクセル↔表現が1対1で、大規模シーンのスケールはまだ課題
- 動的シーン(scene flow)は未対応
まとめ
MapAnything は「3D再構成をタスク別に分ける」流れに対して、“入力が揃っていれば揃っているほど強い”統一バックボーンを、かなり真面目に設計し直したモデルです。(arXiv)
特に factored表現(Rays/Depth/Pose + Scale token)でメトリック化する筋の良さが、マルチモーダル対応の核になっています。(arXiv)
参考リンク
Paper (arXiv PDF):
GitHub: