Ultralytics YOLO27:
Get Started

深度推定データセットの概要#

単眼深度推定では、画像内のすべてのピクセルにメートル単位の深度値を割り当てます。深度ターゲットには、スケーリングされた16ビットグレースケールPNG、またはメートル単位の浮動小数点NPY配列を使用します。

このガイドでは、Ultralytics YOLO深度推定モデルで使用するデータセット形式を説明し、トレーニングと検証に利用できる組み込みのデータセット設定を紹介します。

サポートされるデータセット形式#

深度マップ形式#

各トレーニングサンプルは、1枚のRGB画像と対応する深度ファイルで構成されます。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を使用します。
  • 各深度ファイルは、対応する画像ファイルと同じファイル名(拡張子を除く)にしてください(例: scene_001.pngはscene_001.jpgとペアになります)。
  • 縦横比が一致していれば、深度マップはRGB画像より小さくてもかまいません。トレーニング時にメモリ上でリサイズされます。
  • データセットローダーは、imagesディレクトリ要素をdepthに置き換えて深度ファイルを検索し、.pngを優先し、見つからない場合は.npyを使用します。
  • 深度値が≤ 0のピクセルは無効として扱われ、損失とメトリクスの計算から除外されます。

コード0は無効なピクセル用に予約されているため、uint16 PNGでは65,535個の正の深度値を使用できます。スケールによって精度と範囲の両方が決まります:

規約depth_scale解像度最大深度
デフォルト / ARKitScenes10001 mm65.535 m
KITTI2563.90625 mm255.99609375 m
Virtual KITTI 21001 cm655.35 m

これらは保存形式上の上限であり、推奨されるトレーニング上限ではありません。データセットでは、損失のキャリブレーションや評価のために、個別により小さなmax_depthを設定できます。

標準的なレイアウトでは、画像と深度マップを並行するフォルダーに保存します:

dataset/
├── images/
│   ├── train/
│   └── val/
└── depth/
    ├── train/
    └── val/

たとえば、images/train/scene_001.jpgにある画像は、depth/train/scene_001.pngにある深度マップとペアになります。

データセットのYAML形式#

深度推定データセットはYAMLファイルで設定します。主なフィールドは次のとおりです:

キー説明
pathデータセットのルートディレクトリ。
trainpathを基準としたトレーニング画像のパス、または絶対パス。
valpathを基準とした検証画像のパス、または絶対パス。
test省略可能なテスト画像のパス。
ncクラス数 — 深度推定では常に1です。
namesクラス名のマッピング — 常に{0: depth}です。
depth_scalePNGのメートルあたりの単位数(オプション)。デフォルトは1000です。
ultralytics/cfg/datasets/nyu-depth.yaml
# 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

# 事前学習済みの深度モデルを読み込む
model = YOLO("yolo26n-depth.pt")

# NYU Depth V2データセットでトレーニングする
results = model.train(data="nyu-depth.yaml", epochs=100, imgsz=640)

サポート対象のデータセット#

YOLO26深度モデルは、屋内(≤10 m)から屋外(~80 m)までの範囲にわたる幅広い複数データセットの混合データ(~219万枚の画像)で事前学習され、その後、KITTI Eigen以外のすべてのベンチマークでゼロショット評価を含む5つのベンチマークで評価されます。各データセットには専用ページがあり、いくつかのデータセットは閲覧やクラウドトレーニングに利用できるUltralytics Platformでホストされています。

デバッグ

  • Depth8 — SUN RGB-D画像8枚を収録した1.3 MBの自動ダウンロードアーカイブ。パイプラインの迅速なテストに使用できます

事前学習用データソース

  • ARKitScenes — 実世界の屋内シーン、Apple ARKit LiDAR(最大の実データソース)
  • SUN RGB-D — 実世界の屋内シーン、マルチセンサーRGB-D
  • DIODE — 実世界の屋内および屋外シーン、高密度レーザースキャナーによる正解データ
  • Hypersim — 写実的な合成屋内シーン
  • TartanAir — 多様な環境の合成データ
  • Virtual KITTI 2 — 合成の屋外走行データ
  • KITTI — Velodyne LiDARによる実世界の屋外走行データ(評価ベンチマークとしても使用)
  • ImageNet(疑似ラベル付き) — 疑似ラベル付き蒸留用データセット。単一のデータソースとしては最大規模

評価ベンチマーク

  • NYU Depth V2 — 主要な屋内ベンチマーク
  • KITTI Eigen — 屋外走行ベンチマーク
  • ETH3D — 高精度な屋内および屋外データ
  • Make3D — 屋外、分布外データ
  • iBims-1 — 高品質な屋内データ(エッジと平面)

これらのベンチマークにおけるモデルごとの精度とダウンロード可能な事前学習済み重みは、深度推定タスクのページに記載されています。trainフィールドに複数の画像ディレクトリを指定したデータセットYAMLを使用すると、これらのデータソースを組み合わせて大規模な混合トレーニングを実施できます。

独自のデータセットを追加する#

  1. images/trainやimages/valなどの分割フォルダーにRGB画像を保存します。
  2. 画像と同じファイル名(拡張子を除く)を使い、対応するdepth/trainおよびdepth/valフォルダーに、画像ごとに1つの深度PNGまたはNPYを保存します。save_depth_png()を使用すると、メートル単位の配列をコンパクトなミリメートル単位のPNGに変換できます。
  3. デコードされた深度値がメートル単位であり、無効または欠損したピクセルに0または負の値が使用されていることを確認してください。
  4. 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: 1000

よくある質問#

  • コンパクトなデータセットには、スケーリングされた16ビットグレースケールPNGを使用してください。デフォルトでは、整数値1ステップが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ファイルは、対応する画像と同じファイル名(拡張子を除く)にする必要があります。ローダーはimagesディレクトリ要素をdepthに置き換えて深度パスを導出し、PNGを優先して、見つからない場合はNPYを使用します。深度ファイルが見つからない、または読み取れない画像は、キャッシュされたデータセットのスキャン時に警告とともに除外されます。

コントリビューター

コメント