DUSt3R:3Dコンピュータービジョンの基盤モデル

機械学習分野では、世間的にも話題のLLM(Large Language Model)をはじめ、多様な大量データでニューラルネットワークを事前学習(Pre-training)した基盤モデル(Foundation Model)が様々な下流タスク(Downstream Tasks)で高い性能を発揮し、その汎用性を示している。


Transformer Explainer:テキスト生成モデルの可視化ツール
LLMの仕組みを可視化した教材というと、以前LLM Visualizationを紹介しましたがTransformer ExplainerはWebブラウザ上で実際にGPT-2を動作させてその仕組みを視覚的に確認できる↓Transformer ...


3Dコンピュータービジョンにおいても、3D Geometric Foundation Modelと総称される大規模基盤モデルの登場でパラダイムシフトが起こっている。

DUSt3R (Dense and Unconstrained Stereo 3D Reconstruction)

DUSt3R(ダスター)はCVPR2024で発表された論文 DUSt3R: Geometric 3D Vision Made Easyで提案された3Dコンピュータービジョンの基盤モデル。
Geometric 3D Vision Made Easy“(幾何学的3Dビジョンを簡単に)というタイトル通り、幾何学的な制約を利用して段階的に3D情報を算出していく従来手法と違い、DUSt3Rは2D画像から直接密な3D情報(Pointmap)を推定できる。

DUSt3Rは大規模な事前学習によって、画像以外の幾何情報不要で、しかも従来手法よりはるかに少なく離れた疎な視点画像でも強力に3次元情報を推定できることを示した↓



疎な視点から3次元情報を復元するsparse multi-view scene reconstructionというタスクの手法と位置付けることもできる。


DUSt3Rの根幹

DUSt3Rの根幹はViT(Vision Transformer)ベースのニューラルネットワークによる推論処理。
2枚のRGB画像を入力とし、入力画像2枚の全ピクセルに対応するPointmap(3D位置座標)とConfidence(推定信頼度)を出力する。


入力 Image I_1:RGB画像 (W×H×3)
Image I_2:RGB画像 (W×H×3)
出力 Pointmap X^{1,1}Image I_1の各ピクセルに対応する3次元位置座標(つまり点群)
Confidence C^{1}Pointmap X^{1,1}の各ピクセルの推定信頼度 (0~1)
Pointmap X^{2,1}Image I_2の各ピクセルに対応する3次元位置座標(つまり点群)
Confidence C^{2}Pointmap X^{2,1}の各ピクセルの推定信頼度 (0~1)

出力される2つのPointmapの3次元座標系は、入力画像1枚目の撮影カメラ位置を原点とした同一の座標系。
Pointmapとして入力画像2枚の全ピクセルの3次元位置座標が推定され3Dの対応関係が求まるので、その情報を利用してPnP問題を解けば撮影カメラの姿勢(位置・向き)も算出できる。

また、入力画像2枚に同一の画像を使用すると、画像1枚から全ピクセルの3次元位置座標を推定でき、単眼Depth推定と同等の出力を得ることができる。

DUSt3Rの応用範囲

このようにシンプルに定式化されたDUSt3Rの推論機能を応用すれば、3Dコンピュータービジョンの様々なタスクを下流タスクとして解くことができる。2枚の画像の3次元的な対応関係が推定できるので、2枚以上の複数枚の画像についても推論処理を複数回行えば3次元的な対応関係を推定できる。

DUSt3Rの推論によって2視点の2D画像上の位置と3D空間上の位置の対応関係が既知となるので、既存の幾何計算手法を使って3Dコンピュータービジョンの様々なパラメータを算出できるわけですね。



DUSt3R発表後、すでに多くの派生研究が発表されている↓

DUSt3R公式のソースコードをWindows環境で動かす方法は以前別記事にまとめた↓



DUSt3RのソースコードのライセンスはCreative Commons Attribution-NonCommercial-ShareAlike 4.0で商用利用不可。
配布されている学習済みモデルも商用利用不可のデータで学習されたものらしい。(学習済みモデルは最大512×512解像度の画像入力に対応)

DUSt3Rの仕組みを学びやすいよう有志が作成したミニマムなコードもある。
この実装はONNXエクスポートに対応しているので、Netronでネットワーク構造を可視化して見ることもできる。(ネットワークが巨大過ぎてあまりピンと来ないけど)
Netron:機械学習モデルを可視化するツール
何年も前にMOONGIFTさんで紹介されていたオープンソースの機械学習モデルビューア。NetronNetronは、ニューラルネットワーク、ディープラーニング、機械学習モデルのビューアです。Netronは、ONNX, TensorFlow L...


ネットワーク構造の定義のコードを読むのが1番理解が捗るかも。

DUSt3Rの仕組み

DUSt3Rの概要が分かったところで、DUSt3Rの仕組みについて詳しく見て行こう。

従来の3Dビジョン

過去数十年、シーンを複数視点で撮影した2D画像からシーンの3D情報を復元する手法が研究されてきた。近年Photogrammetryによる3Dスキャンツールが普及しているのはその恩恵だ。
「複数視点の2D画像からシーンの3D情報を復元する」とはつまり、シーンの3Dジオメトリと撮影カメラパラメーターを推定すること。

一般的にPhotogrammetryと呼ばれている処理は、複数のコンピュータービジョンタスクを段階的に解くことでボトムアップに実現されている。
Photogrammetryの根幹となっている「疎な3D情報を求める」(Sparse 3D Reconstruction)タスクのStructure from Motionを例に挙げると、以下のようなサブタスクを順に連結したパイプラインで実現されている。

Structure from Motionのパイプライン
  1. Feature Detection(特徴点検出):画像から局所特徴点を検出する
  2. Feature Matching(特徴点マッチング):複数画像間の特徴点の対応関係を求める
  3. Initial Reconstruction(初期再構成):得られた対応関係から幾何学的関係の初期値を推定する
    • Camera Pose Estimation(カメラ姿勢推定):カメラの相対姿勢を推定する
    • Triangulation(三角測量):特徴点の3D位置を推定する
  4. Bundle Adjustment(バンドル調整):全画像について最も矛盾の無い幾何学的関係を求める(誤差最小化)

PhotogrammetryではStructure from Motionによって得られた疎な3D情報を利用して、後続のサブタスク(Multi-View Stereoなど)でより詳細な3D情報の算出(Dense 3D Reconstruction)を行っていく。


従来の3Dビジョンの問題

しかし、3Dビジョンのパイプラインの各サブタスクは精度100%で解けるわけではない。サブタスクで発生する誤差やエラーは次のサブタスクへのノイズとなり、次以降のサブタスクでそのノイズを補正する手がかりを知る術はない。その結果、パイプラインが進むほど各サブタスクで発生したノイズが蓄積され、最終的な3D復元精度の低下につながる。

この問題に対して、従来は個々のサブタスクの精度を高める研究が盛んに行われてきた。
特に、パイプラインの最初のステップであるFeature Detection, Feature Matchingで発生するノイズは以降の全てのサブタスクを狂わせてしまうため、古典的問題でありながらDeep Learning時代になっても盛んに研究されてきた。
https://github.com/cvg/LightGlue

DUSt3Rのアプローチ

従来の3Dビジョンがサブタスクを積み重ねてボトムアップ的に3D情報を算出・詳細化していたのに対し、DUSt3Rはその構造を大きく変えるトップダウン的アプローチを取っている。
冒頭で説明した通り、DUSt3Rは2枚の画像から詳細な3D情報(全ピクセルの3D位置)を直接推定するニューラルネットワークを構築。従来の3Dビジョンでは中間処理を担っていた様々なサブタスクを、このニューラルネットワークの推定結果から算出できる下流タスクと位置づけた。

サブタスクに分解されたパイプラインによって多くの誤差や情報欠落が発生していた従来手法に対して、DUSt3Rは2D画像と3D構造の関係を1つのニューラルネットワークで学習することで、ViTの特徴抽出能力を活かしたEnd-to-Endの3D復元を実現した。
DUSt3RFeature Detection, Feature Matchingを経ないことで、従来のStructure from Motionの欠点であった局所特徴点の少ないシーン、視差や画像枚数が不足した条件でも高い3D復元性能を示した。

DUSt3Rの学習

DUSt3Rのネットワークの学習はDepth付き多視点画像データセット(約850万ペア)を用いた教師あり学習だが、学習の初期化にCroCo(Cross-View Completion)による事前学習を活用している。

CroCo (Cross-View Completion)

CroCo(Cross-View Completion)は、多視点画像から3D空間を推論する能力をニューラルネットワークに獲得させる自己教師あり学習手法。
シーンを撮影した複数視点画像1枚について画像の一部をマスクし、Cross-View Completion(異なる視点の画像の情報を使ってそのマスク箇所を補間)できるよう学習する。

DUSt3Rは、CroCoの多視点画像からシーンの3次元的構造を推論する能力をベースに学習される。

Global Alignment

DUSt3Rのネットワークは2視点(画像ペア)の入力にしか対応していないが、2枚以上の複数視点に対応するための後処理としてGlobal Alignmentが提案されている。
Global Alignmentは従来の3DビジョンでBundle Adjustmentに相当するような誤差最小化処理だが、Bundle Adjustmentが3D空間の点を2D画像に再投影した際の誤差を最小化するのに対し、Global Alignmentは3D空間で直接点群同士の位置合わせを行い、3D空間上での誤差を最小化する。
複数の画像ペアからDUSt3Rのネットワークがそれぞれ独立して推論したPointmapについて、Global Alignmentで1つの3D座標系に統合・矛盾のない3D点群を構築する。
Global Alignmentによって得られた矛盾の無い3D点群を利用して様々な下流タスクを解くことができる。

DUSt3Rの下流タスク性能

論文中では、以下の3Dビジョンタスクを下流タスクとして解いた場合にDUSt3Rが既存のSOTA手法に匹敵する性能を示したことが紹介されている↓

  • Visual Localization
  • Multi-view Pose Estimation
  • Monocular Depth Estimation
  • Multi-view Depth Estimation
  • 3D Reconstruction

一方、従来の3Dビジョンの初期ステップであったFeature Matchingタスクについては、DUSt3Rの下流タスクとして解いても精度があまり良くなく、後に同研究チームからMASt3Rという改善手法が発表された。
逆に言うと、DUSt3Rは従来とアプローチが逆だからFeature Matchingの性能と関係なくトータルの3D復元性能が高いことを示している。

参考

今のところDUSt3Rの解説を日本語で読めるのはSpatial AI Networkの発表資料とコンピュータビジョン最前線の最終号「コンピュータビジョン最前線 Summer 2025


派生研究

DUSt3Rの派生研究であるVGGT(Visual Geometry Grounded Transformer)CVPR 2025でベストペーパーに選ばれた。


余談

ここ数年流行りだったNeRF3D Gaussian Splattingも最初のステップはStructure from Motionに依存していたことを考えると、DUSt3Rの登場によってまた大きな変化が起こりそうだ。


3D Gaussian Splatting:リアルタイム描画できるRadiance Fields
2020年にNeRF (Neural Radiance Fields)が登場して以降、多数視点画像からRadiance Fieldsを復元して自由視点映像を作成するNovel View Synthesisタスクの研究が盛ん。NeRFの欠点N...


Radiance Field系は視線依存の光の変化を捉えられるリアリティが大きな価値ではあるので、視点が減ってしまうと質感表現が追いつかなくなりそうだ。そこを補うのはマテリアル推定技術とかかな。

最近はAIツールの充実で研究論文を読むのが格段に楽になり、以前は時間的に難しかったザッピングも割とできるようになった。
ツールの補助で効率的に研究論文を読む
久しぶりに1つの研究論文を精読してみた。ブログにディープラーニング関連の手法まとめ記事を投稿するのは3年ぶりか。自分の疑問に答えるように、自分の理解の穴を埋めるように改めて関連分野も調べて図に起こしていたらだいぶ手間がかかってしまった。3D...


公式に公開されるソースコードも、最近はGitHub Copilotの補助を借りて読むことができる。機械学習分野ではPythonがデファクトスタンダードになっているものの、Pythonコードは規模が大きくなると読みにくかったのでとても助かる。

関連記事

ZBrushでアヴァン・ガメラを作ってみる 甲羅のバランス調整

PSPNet (Pyramid Scene Parsing Network):ディープラーニングによ...

映画から想像するVR・AR時代のGUIデザイン

ポリ男をリファイン

iOSで使えるJetpac社の物体認識SDK『DeepBelief』

機械学習手法『Random Forest』

PyTorch3D:3Dコンピュータービジョンライブラリ

C#で使える遺伝的アルゴリズムライブラリ『GeneticSharp』

プロシージャル手法に特化した本が出てるみたい(まだ買わないけど)

オープンソースの物理ベースGIレンダラ『appleseed』

2012のメイキングまとめ(途中)

トランスフォーマーの変形パターンを覚えるのは楽しいと思うんだ

単純に遊びに行くのはだめなのか?

YOLO (You Only Look Once):ディープラーニングによる一般物体検出手法

Live CV:インタラクティブにComputer Visionコーディングができるツール

OpenCVのfindEssentialMat関数を使ったサンプルを読んでみる

オープンソースの物理ベースレンダラ『Mitsuba』をMayaで使う

Adobe Photoshop CS4 Extendedの3Dモデル編集機能

Siggraph Asia 2009 カンファレンスの詳細

ZBrushCoreのTransposeとGizmo 3D

Active Appearance Models(AAM)

Qlone:スマホのカメラで3Dスキャンできるアプリ

ZBrush4新機能ハイライト 3DCG CAMP 2010

デザインのリファイン再び

Mitsuba 3:オープンソースの研究向けレンダラ

ZBrushでアヴァン・ガメラを作ってみる おでこ(?)のバランス調整

OpenCVのバージョン3が正式リリースされたぞ

トランスフォーマー :リベンジのメイキング (デジタルドメイン)

Autodesk CompositeとAutodesk MatchMoverが無料

スクラッチで既存のキャラクターを立体化したい

ラクガキの立体化 3Dプリント注文

FreeMoCap Project:オープンソースのマーカーレスモーションキャプチャ

ZBrush 2021.6のMesh from Mask機能を使ってみる

Accord.NET Framework:C#で使える機械学習ライブラリ

データサイエンティストって何だ?

色んな三面図があるサイト

Polyscope:3Dデータ操作用GUIライブラリ

フィーリングに基づくタマムシの質感表現

ドラマ『ファーストクラス』のモーショングラフィックス

ZBrushでゴジラ2001を作ってみる 身体のアタリを作る

ZBrushでアヴァン・ガメラを作ってみる 壊れたデータの救出

OpenCV 3.3.0-RCでsfmモジュールをビルド

コメント