深度推定データセットの概要#
単眼深度推定では、画像内のすべてのピクセルにメートル単位の深度値を割り当てます。深度ターゲットには、スケーリングされた16ビットグレースケールPNGまたはメートル単位の浮動小数点NPY配列を使用します。
このガイドでは、Ultralytics YOLO深度推定モデルで使用されるデータセット形式を説明し、トレーニングと検証に利用できる組み込みデータセット設定を一覧表示します。
サポートされているデータセット形式#
深度マップ形式#
各トレーニングサンプルは、1つのRGB画像と、それに対応する1つの深度ファイルで構成されます。PNGの値は、オプションのデータセットレベルの depth_scale で割ってメートル単位に変換します。デフォルトは 1000 です。そのため、値 1500 は 1.5 メートルを表します。コード 0 は無効値を意味します。PNGに埋め込みメタデータは必要ありません。
- 深度ファイルには
.png(推奨)または.npyを使用します。PNGマップは2Dのuint16グレースケール画像である必要があります。NPY配列は2Dの浮動小数点形式で、値はメートル単位である必要があります。 - PNGがデフォルトのミリメートル規約を使用しない場合にのみ
depth_scaleを設定します。たとえば、KITTIでは256、Virtual KITTI 2では100を使用します。 - 各深度ファイルは、対応する画像ファイルと同じstemにする必要があります(例:
scene_001.pngはscene_001.jpgと対応します)。 - アスペクト比が一致していれば、深度マップはRGB画像より小さくてもかまいません。トレーニング時にメモリ内でリサイズされます。
- データセットローダーは、
imagesディレクトリコンポーネントをdepthに置き換えて深度ファイルを検索し、.pngを優先して、見つからない場合は.npyにフォールバックします。 - 深度が
≤ 0のピクセルは無効として扱われ、損失計算とメトリクス計算から除外されます。
コード 0 は無効ピクセル用に予約されているため、uint16 PNGでは65,535個の正の深度値を使用できます。スケールによって精度と範囲の両方が決まります。
| 規約 | depth_scale | 解像度 | 最大深度 |
|---|---|---|---|
| デフォルト / ARKitScenes | 1000 | 1 mm | 65.535 m |
| KITTI | 256 | 3.90625 mm | 255.99609375 m |
| Virtual KITTI 2 | 100 | 1 cm | 655.35 m |
これらは保存上の制限であり、推奨トレーニング上限ではありません。データセットでは、損失のキャリブレーションや評価のために、より小さい max_depth を個別に設定できます。
標準レイアウトでは、画像と深度マップを並列のフォルダーに配置します。
dataset/
├── images/
│ ├── train/
│ └── val/
└── depth/
├── train/
└── val/たとえば、images/train/scene_001.jpg にある画像は、depth/train/scene_001.png にある深度マップと対応します。
データセット YAML 形式#
深度推定データセットはYAMLファイルで設定します。主なフィールドは次のとおりです。
| キー | 説明 |
|---|---|
path | データセットのルートディレクトリです。 |
train | path を基準とした学習画像の相対パス、または絶対パスです。 |
val | path を基準とした検証画像の相対パス、または絶対パスです。 |
test | オプションのテスト画像パスです。 |
nc | クラス数 — 深度推定では常に 1 です。 |
names | クラス名のマッピング — 常に {0: depth} です。 |
depth_scale | オプションの1メートルあたりのPNG単位。デフォルトは 1000 です。 |
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# NYU Depth V2 dataset for monocular depth estimation
# Documentation: https://cs.nyu.edu/~fergus/datasets/nyu_depth_v2.html
# 795 train + 654 val (Eigen test split) images, 480x640, indoor scenes, depth in meters
# Example usage: yolo depth train data=nyu-depth.yaml model=yolo26n-depth.pt
# parent
# ├── ultralytics
# └── datasets
# └── nyu-depth-png ← downloads here (≈1.5 GB)
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: nyu-depth-png # dataset root dir (relative to Ultralytics settings 'datasets_dir')
train: images/train # train images (relative to 'path') 795 images
val: images/val # val images (relative to 'path') 654 images
# Depth maps are paired uint16 millimeter PNGs under depth/<split>/, resolved by
# swapping '/images/' -> '/depth/' on each image path.
# Classes
nc: 1
names:
0: depth
channels: 3
depth_scale: 1000
# Download script/URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/nyu-depth-png.zip使用方法#
PythonまたはCLIを使用してYOLO26深度推定モデルをトレーニングします。
from ultralytics import YOLO
# Load a pretrained depth model
model = YOLO("yolo26n-depth.pt")
# Train on the NYU Depth V2 dataset
results = model.train(data="nyu-depth.yaml", epochs=100, imgsz=640)サポートされているデータセット#
YOLO26の深度モデルは、屋内(10m以下)から屋外(約80m)までの範囲にわたる幅広いマルチデータセットミックス(約219万枚の画像)で事前学習された後、KITTI Eigenを除くすべてのデータセットでゼロショット評価を含む5つのベンチマークで評価されます。各データセットには専用のページがあり、そのうちのいくつかはブラウジングやクラウドトレーニングのためにUltralytics Platformでホストされています。
デバッグ
- Depth8 — 1.3 MBの自動ダウンロードアーカイブに収録された8枚のSUN RGB-D画像。パイプラインの迅速なテスト用です。
事前トレーニングソース
- ARKitScenes — 実際の屋内環境、Apple ARKit LiDAR(最大の実データソース)
- SUN RGB-D — 実際の屋内環境、マルチセンサーRGB-D
- DIODE — 実際の屋内および屋外環境、高密度レーザースキャナーによるグラウンドトゥルース
- Hypersim — 写実的な合成屋内環境
- TartanAir — 多様な環境を含む合成データ
- Virtual KITTI 2 — 合成屋外運転環境
- KITTI — 実際の屋外運転環境、Velodyne LiDAR(評価ベンチマークとしても使用)
- ImageNet (pseudo-labeled) — 擬似ラベル付き蒸留セット。単一ソースとして最大規模です。
評価ベンチマーク
- NYU Depth V2 — 主要な屋内ベンチマーク
- KITTI Eigen — 屋外運転ベンチマーク
- ETH3D — 高精度な屋内および屋外環境
- Make3D — 屋外環境、分布外データ
- iBims-1 — 高品質な屋内環境(エッジと平面サーフェス)
これらのベンチマークにおけるモデルごとの精度と、ダウンロード可能な事前トレーニング済み重みは、深度推定タスクページに掲載されています。train フィールドに複数の画像ディレクトリを指定したデータセットYAMLは、これらのソースを組み合わせて大規模な混合トレーニングを行います。
独自データセットの追加#
images/trainやimages/valなどの分割フォルダーの下にRGB画像を保存します。- 画像と同じファイルstemを使用し、対応する
depth/trainおよびdepth/valフォルダーの下に、画像ごとに1つの深度PNGまたはNPYを保存します。save_depth_png()を使用して、メートル単位の配列をコンパクトなミリメートルPNGに変換します。 - デコードされた深度値がメートル単位であり、無効または欠損しているピクセルに
0または負の値が使用されていることを確認してください。 path、train、val、nc: 1、names: {0: depth}を含むデータセットYAMLを作成します。
path: path/to/my-depth-dataset
train: images/train
val: images/val
nc: 1
names:
0: depth
# Optional: PNG integer units per meter (default 1000)
depth_scale: 1000FAQ#
コンパクトなデータセットには、スケーリングされた16ビットグレースケールPNGを使用します。デフォルトでは、各整数ステップが1ミリメートルに相当します。別のスケールを使用する場合は、データセットYAMLで
depth_scaleを設定します。ultralytics.data.utils.save_depth_png()は、メートル単位の配列をデフォルト形式に変換します。メートル単位の浮動小数点NPYマップも直接使用できます。深度値が
≤ 0のピクセルは無効として扱われ、損失計算とメトリクス評価の両方からマスクされます。これには、センサーノイズ、空の領域、深度を確実に測定できない反射面が含まれます。深度推定の検証では、標準のDepth Anythingメトリクスセットを報告します。
- delta1 / delta2 / delta3 — 1.25×、1.25²×、1.25³×のしきい値以内にあるピクセルの割合です。高いほど良い結果です。
- abs_rel — 平均絶対相対誤差です。低いほど良好です。
- rmse — メートル単位の二乗平均平方根誤差です。低いほど良好です。
- silog — スケール不変対数誤差です。低いほど良好です。
はい。各深度
.pngまたは.npyファイルは、対応する画像と同じstemを共有する必要があります。ローダーは、imagesディレクトリコンポーネントをdepthに置き換えて深度パスを生成し、PNGを優先して、見つからない場合はNPYにフォールバックします。深度ファイルが欠損している、または読み取り不能な画像は、警告とともにキャッシュ済みデータセットのスキャン中に除外されます。