AI · AI画像
深度マップ(デプスマップ)とは?AIは写真からどう作るのか
結論
深度マップは、色ではなく各ピクセルの明るさでカメラからの距離を表すグレースケール画像です。Depth Anything などのAIモデルは、形、遠近感、遮蔽関係を手がかりに、1枚の写真から深度を推定します。多くは本当のメートル値ではなく、どこが近いかという相対深度を出力しますが、3D視差効果、背景ぼかし、ControlNetには十分です。
深度マップ生成を開く深度マップを1枚の絵で理解する
建物の前に立つ人物の写真を撮ったとします。その写真の深度マップは、同じ幅と高さを持ちますが、各ピクセルに入っているのは1つの数値、つまりその点がカメラからどれだけ離れているかです。画像として表示すると、人物は1つの濃さ、建物は別の濃さ、空はいちばん極端な濃さになります。
どの濃さが近いかを決める唯一のルールはありません。使うツールごとに規約を確認しましょう。
| 規約 | 近い物体 | 遠い物体 | 出会う場面 |
|---|---|---|---|
| 逆深度(視差に近い) | 明るい | 暗い | 多くのAI深度推定モデル、ControlNetの深度マップ |
| 距離(Z深度) | 暗い | 明るい | 3Dレンダーパス、フォグ効果、一部のゲームエンジン |
| メトリック深度 | 小さい数値(メートル) | 大きい数値 | ロボット工学、AR、LiDAR、16ビットや浮動小数点のファイル |
| カラーマップ(Turbo、Magma) | パレットの一方の端 | もう一方の端 | 見るためのプレビューのみ。後続の処理には使えない |
3D効果が裏返しに見え、背景が手前に飛び出してくるなら、深度マップの規約が逆です。画像を反転(白を黒に)すれば、たいてい直ります。
AIは1枚の写真からどう深度を推定するのか
2眼カメラのスマホやLiDARセンサーなら、深度を測定できます。普通の1枚の写真ではできません。同じ画像が、近くの小さなミニカーなのか、遠くの本物の車なのかを区別できないからです。単眼深度推定は、人間と同じように、学習した手がかりを使ってこの問題を解きます。
- 遠近感:道路やレールなどの平行線は、遠くで一点に集まります。
- 既知のサイズ:顔、ドア、車には典型的な大きさがあるため、画像中の大きさが距離の手がかりになります。
- 遮蔽:別の物体を隠している物体は、その手前にあります。
- テクスチャの密度と霞:遠くの草やタイルは細かく、色は淡く見えます。
- 陰影とピントのぼけ:表面の形についての手がかりになります。
深度ネットワークは、答えがわかっている、または推定された数百万枚の画像で学習します。現時点で多くのツールが使っている Depth Anything V2 は、まず正確な合成(レンダリング)画像で学習し、その後、より大きな教師モデルがラベル付けした非常に大規模な実写写真で学習しました。作者が合成データを選んだ理由の1つは、実際の深度センサーでは透明な面や反射する面を正しく測れないことです。実写のラベルは、写真として難しい部分ほどノイズが多くなります。
モデルは、リサイズした画像(Depth Anything V2 は短辺518ピクセルで学習)に対して動作し、ピクセルごとに1つの値を出力します。ツールはそれを写真のサイズに戻し、8ビット画像用に0〜255にマッピングします。
相対深度とメトリック深度
汎用の深度モデルの多くは、相対深度を予測します。たとえば Depth Anything V2 のベースモデルは、アフィン不変の逆深度を予測します。簡単に言えば、順序と比率には意味がありますが、スケールとオフセットは不明です。深度マップから人物が建物より手前にいることはわかっても、人物が3.2メートル離れているとまではわかりません。
この設計は、カメラも単位も異なる多数のデータセットで学習するために生まれました。MiDaS の研究は、スケールを無視する損失関数を使えば、それらすべてから同時に学習でき、ネット上の雑多な写真に対してずっと頑健になることを示しました。
メトリック深度モデルは、メートル単位を学習するようにファインチューニングしたもので、通常は屋内の部屋や市街地の走行など、1種類のシーン向けです。計測やロボット工学に使います。創作の用途では、汎化性能が高く、効果に必要なのは正しい順序だけなので、相対深度で十分です。
深度マップの使い道
| 用途 | 深度の使われ方 | コツ |
|---|---|---|
| 2.5D視差ビデオ | 仮想カメラが動くと、近いピクセルは遠いピクセルより大きく動く | カメラの動きを小さくして、引き伸ばされた縁を目立たなくする |
| ポートレート風のぼかし | ピント面から離れるほどぼかしが強くなる | 境界をぼかしてなじませる。髪は背景と一緒にぼけがち |
| ControlNet(深度) | 深度マップが、新しく生成する画像のレイアウトを導く | 近いほど明るいマップを使う。自由度を上げたいときは制御の重みを下げる |
| 3DとAR | ピクセルを押し出してメッシュや点群にする | 相対深度では形はわかるが、実際の大きさはわからない |
| フォグ、リライティング、合成 | 距離に基づく効果のマスクとして使う | ツールが対応していれば16ビットで書き出す |
たとえば cv.cm の深度マップツールは、ブラウザ内で写真をグレースケールのマップ(近いほど明るい)やカラープレビューに変換します。cv.cm の写真から動画を作るツールは、同種のマップを使って、静止画の中で仮想カメラを動かします。後者ではカメラが動き、被写体は静止したままです。人物を動かすモデルではなく、視差による表現です。
ControlNet は、エッジ、ポーズ、セグメンテーション、深度といった条件で拡散モデルを制御できることを示しました。深度を条件にすると、前景と背景の位置関係などの構図を保ったまま、プロンプトでスタイル、ライティング、素材を変えられます。
AIの深度推定が失敗する場面
- ガラス、鏡、水:モデルが映り込みの深度や、ガラスの向こう側の深度を出すことがあります。
- 空や非常に遠い領域:すべて最も遠い端に集まるため、そこでは視差が平坦になります。
- 細い構造:髪、フェンス、枝、電線は、モデルの作業解像度では背景に溶け込みます。
- 絵画、ポスター、画面:絵の写真に偽の3D深度が付くことがあります。中に写っている内容が風景に見えるからです。
- 特殊な視点:真下を向いたドローン撮影、マクロ写真、魚眼画像は、学習データに少なめです。
- 近景と遠景の境目:その部分ではマップがなめらかなため、視差効果でピクセルがゴムのような帯状に引き伸ばされます。
よりよい深度マップを得るには
- 前景、中景、背景がはっきりした写真を選びます。壁を背に顔がフレームいっぱいに写っているような平面的なシーンでは、深度の情報がほとんど得られません。
- 注目したい領域に、強い反射や大きな窓が入らないようにします。
- 次に使うツールが同じ規約を読むか確認します。近いのに暗くなっている場合は、マップを反転します。
- マップは写真と同じサイズ・同じトリミングにします。トリミングやリサイズが異なる深度マップは、位置が合いません。
- 視差効果をかける前にマップを少しぼかすか膨張させて、輪郭のちぎれを抑え、カメラの動きは穏やかにします。
よくある質問
深度マップと法線マップは同じものですか?
違います。深度マップはピクセルごとの距離を保存します。法線マップは各面が向いている方向をRGBの色で保存し、ライティングに使います。深度マップから法線をおおまかに求めることはできますが、その逆は、スケールが失われるためできません。
どんな写真でもAIで深度マップを作れますか?
単眼モデルなら必ずマップは出力されますが、品質はシーンによります。近景と遠景の層がはっきりした写真はうまくいき、ガラス、鏡、平らな壁、絵を写した写真は苦手です。
深度マップと視差マップ(ディスパリティマップ)の違いは何ですか?
視差(ディスパリティ)は、2枚のステレオ画像の間での点のずれで、近い物体ほど大きくなるため、逆深度のように振る舞います。多くのAIモデルは視差に近い逆深度を出力するので、近い物体が明るく見えます。
視差ビデオで被写体の輪郭のまわりが引き伸ばされるのはなぜですか?
仮想カメラが動くと、元の写真では被写体に隠れていた背景が見えてきます。そこにはピクセルが存在しないため、レンダラーが隣のピクセルを引き伸ばします。カメラの動きを小さくし、深度の境界をやわらげると軽減できます。
iPhoneのポートレートモードも深度マップを使っていますか?
はい。デュアルカメラや深度センサーを備えたスマホは、深度または視差のマップを記録して背景のぼかしに使い、多くは機械学習で補正もしています。深度は、画像と一緒に写真ファイルに保存されることがあります。