Link to this section単眼深度推定#
単眼深度推定は、単一のRGB画像からピクセルごとの深度マップを予測します。各出力ピクセルは、カメラからその表面点までの推定距離を表すメートル単位の深度値を保持します。
深度モデルの出力は、入力画像と整列された形状 (H, W) の密な浮動小数点マップです。このピクセルごとの表現により、単眼深度推定は、3Dシーンの再構成、ロボットのナビゲーション、AR/VRコンテンツ作成、および単一カメラからの空間レイアウトを必要とするあらゆるアプリケーションに適しています。
Use task=depth or the yolo depth CLI task for monocular depth estimation. YOLO26 depth model files use the -depth suffix, such as yolo26n-depth.pt.
Link to this sectionモデル#
広範なマルチデータセットの組み合わせ(屋内 + 屋外、約2.19M画像)で事前学習されたYOLO26深度モデルを以下に示します。メトリクスの列は、NYU Depth V2 のEigenテスト分割で報告されています。
モデル は、初回使用時に最新の Ultralytics リリース から自動的にダウンロードされます。
| モデル | サイズ (ピクセル) | delta1NYU | abs_relNYU | rmseNYU | パラメータ (M) | FLOPs (B) |
|---|---|---|---|---|---|---|
| YOLO26n-depth | 768 | 0.882 | 0.109 | 0.414 | 6.4 | 46.9 |
| YOLO26s-depth | 768 | 0.896 | 0.104 | 0.399 | 13.2 | 67.9 |
| YOLO26m-depth | 768 | 0.921 | 0.089 | 0.364 | 23.3 | 130.7 |
| YOLO26l-depth | 768 | 0.930 | 0.083 | 0.351 | 27.7 | 157.2 |
| YOLO26x-depth | 768 | 0.933 | 0.080 | 0.344 | 57.0 | 302.0 |
- delta1NYU は、マルチスケール + 水平フリップTTAおよびlog-least-squaresアライメントを使用したNYU Depth V2 Eigenテスト分割(654画像)において、予測された深度が正解値の1.25倍以内であるピクセルの割合です。
- TTAなしのシングルスケール精度は、
yolo depth val model=yolo26n-depth.pt data=nyu-depth.yaml imgsz=768 device=0(各サイズに対してmodel=を置き換えてください)で再現可能です。これにはメディアン(スケールのみ)アライメントが使用され、スコアは低くなります:delta1 0.785 (n), 0.786 (s), 0.827 (m), 0.839 (l), 0.843 (x)。 - abs_rel は、予測深度と正解深度値間の平均絶対相対誤差です。
- rmse は、メートル単位の二乗平均平方根誤差です。
- params および FLOPs は、公開された重みの学習解像度である768×768で測定されています。
Link to this section深度範囲と対数深度ヘッド#
深度ヘッドは exp(logit)(約0.02〜150mの 非境界)を予測し、シーンの形状を絶対スケールから分離します。ネットワークは相対的な対数深度フィールドを予測し、絶対的なメートル値は、評価時に復元される個別の2パラメータ変換 (exp(a·log d + b))、軽量なキャリブレーション、またはファインチューニングによって設定されます。一般的な代替手段である有界な sigmoid × max_depth ヘッドは、アーキテクチャ内に固定の上限を組み込んでしまうため、max_depth を超える深度はクリップされます。これにより、より長距離のシーンでの学習や予測が妨げられます。
Link to this sectionヘッドが非境界である理由:深度範囲全体にわたるエビデンス#
制御されたA/Bテスト — 同じデータ、同じスケジュール、ヘッドのみが異なる。 屋内(≤10 m)と屋外(≤80 m)のデータからなる同一の組み合わせで、両方のヘッドをゼロから学習させた場合:
| ヘッド | 出力範囲 | 混合範囲の検証 δ1 | 学習の挙動 |
|---|---|---|---|
sigmoid × max_depth (10 m) | 有界 0–10 m | 0.221 | エポック1で停滞 |
log (非境界) | 0–約150 m | 0.367 (+66%) | 全体を通じて改善 |
有界ヘッドは屋外ピクセルの大部分(>10 m)を表現できないため、すぐに改善が停止します。一方、log ヘッドは全範囲から学習します。
修正された失敗モード — 単一データセットのファインチューニング、範囲による層別化。 有界(10 m)ヘッドを個々のデータセットでファインチューニングする場合、データが上限に収まる場合は機能しますが、それを超えると崩壊します:
| データセット | 深度範囲 | 有界ヘッド δ1 |
|---|---|---|
| SUN RGB-D | ≤10 m | 0.78 ✅ |
| Hypersim | 大部分 ≤10 m | 0.74 ✅ |
| KITTI | 約80 m | 0.08 ❌ (abs_rel ≈ 7.0 — 80/10のスケール不一致) |
| vKITTI2 | 80 m | 0.04 ❌ |
崩壊は上限境界で正確に発生します。log ヘッドにはこのような境界はありません。
リリースされたモデル — 範囲をまたぐ性能。 出荷された log ヘッドファミリーは、10 m (NYU, iBims-1) から 80 m (KITTI) にわたるベンチマーク全体で、スケール合わせされた δ1 で評価されています:
| ベンチマーク | 範囲 | YOLO26x-depth (log) | 以前の有界リリース |
|---|---|---|---|
| NYU Eigen | 10 m | 0.933 | 0.934 |
| iBims-1 | 10 m | 0.961 | 0.945 |
| ETH3D | 約60 m | 0.959 | 0.931 |
| Make3D | 約70 m | 0.302 | 0.296 |
| KITTI Eigen | 80 m | 0.942 | 0.891 |
| 平均 | — | 0.819 | 0.799 |
最大のゲインは、固定された10 mの上限が最も悪影響を与える長距離の屋外ベンチマーク(KITTI, ETH3D)で見られ、同時に屋内性能も維持されています。
Link to this sectionトレーニング#
YOLO26n-depthを Depth8 データセットで、画像サイズ640にて100 エポック 学習します。利用可能な引数の完全なリストについては、設定 ページを参照してください。
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-depth.yaml") # build a new model from YAML
model = YOLO("yolo26n-depth.pt") # load a pretrained model (recommended for training)
model = YOLO("yolo26n-depth.yaml").load("yolo26n-depth.pt") # build from YAML and transfer weights
# Train the model
results = model.train(data="depth8.yaml", epochs=100, imgsz=640)trainモードの詳細については、トレーニングページを参照してください。
Link to this section独自のデータでのファインチューニング#
事前学習済みの深度モデルをカスタムデータセットに適応させる際は、学習率を下げ、AdamWオプティマイザを使用してください。デフォルトのオプティマイザ設定はゼロからの学習(lr0=0.01 のSGD)向けに調整されています。既に収束した深度モデルに適用すると、事前学習済みの知識が上書きされ、特に単一ドメインでファインチューニングを行う際に結果が悪化する可能性があります。
from ultralytics import YOLO
model = YOLO("yolo26s-depth.pt") # start from pretrained weights
model.train(
data="path/to/your_dataset.yaml",
epochs=20,
imgsz=640,
optimizer="AdamW",
lr0=1e-4, # ~100x below the from-scratch default
warmup_bias_lr=1e-4, # keep warmup gentle too
)追加のヒント:
- オーギュメンテーションは標準の引数 (
degrees,translate,scale,shear,perspective,flipud,fliplr,hsv_h,hsv_s,hsv_v) によって制御されます。幾何学的な歪みや反転は、ペアとなる深度マップにも同様に適用されます。リリースされたYOLO26-Depth重みに使用された正確なレシピを確認するには、チェックポイントに保存されているtrain_argsを調べてください。— YOLO26チェックポイントの学習引数の確認 を参照してください。 mosaic,mixup,cutmix,copy_pasteは深度に対して実装されていません。 深度データセットローダーはこれらの確率を自動的に0に設定するため、渡しても効果はありません。これらのオーギュメンテーションは、複数の画像を組み合わせるものであり、正当なペアの深度マップを作成できないため、サポートされていません。- 任意の深度範囲がそのまま機能します。
logヘッドモデルは非境界の深度を予測するため、変更なしで短距離(マクロ)から長距離(屋外/運転)のデータに適応します。データセットのYAMLでmax_depth:(メートル単位)を設定すると、どのGTピクセルが検証メトリクスとしてカウントされるかを制限できます。 - 一般的な性能を維持します。 モデルが学習セットを超えたシーンでも正確さを維持する必要がある場合は、多様な汎用画像を少量(約5〜10%)学習データに混ぜてください。これにより、ファインチューニング中の知識の忘却を大幅に減らすことができます。
- ゼロからの学習 (
model=yolo26s-depth.yaml) は、ドメインが非常に異なる場合や大規模なデータセットがある場合のみ行ってください。その場合は保持すべき事前学習済みの重みがないため、デフォルトのSGDlr0=0.01が適切です。
Link to this section深度スケールのキャリブレーション#
深度ヘッドは 形状(相対的なシーン構造)と スケール(絶対的なメートル値)を分離します。モデルがシーンに対して良好な相対深度を既に生成しているものの、カメラに対して絶対値がずれている場合は、model.calibrate() で数秒でスケールを修正できます。これは、少量のラベル付きセットに対する2パラメータ対数アフィンフィッティングを行うクローズドフォームの計算であり、勾配学習やネットワーク重みの変更は行わないため、相対構造を劣化させることはありません。
from ultralytics import YOLO
model = YOLO("yolo26s-depth.pt")
# Fit scale on a labeled split (~100+ images is enough), then persist it
model.calibrate(data="path/to/your_dataset.yaml")
model.save("yolo26s-depth-calibrated.pt")キャリブレーションにはフィッティングのための正解深度が必要なため、ラベル付きの分割で実行されます。ブラインド推論で行えるものではありません。相対深度が良好で、スケール/範囲のみが誤っている場合に使用してください。ドメインに合わせて相対構造自体を変更する必要がある場合は、代わりに ファインチューニング を行ってください。
学習プロセスが自動的にこれを行います。model.train(...) が完了すると、ベストおよび最新のチェックポイントが検証セットでキャリブレーションされるため、そのままメトリックベースのスケーリングされた深度が出力されます。
リリースされた yolo26*-depth.pt チェックポイントには、このキャリブレーションが既に焼き付けられており、事前学習時の検証セットの組み合わせでフィッティングされています。これは全てのドメインに共通する単一のグローバルスケールであるため、特定のカメラやシーンタイプで最も正確な絶対深度を得るには、独自のデータの少量のラベル付き分割で model.calibrate() を実行してください。これにより、焼き付けられたフィッティングが置き換えられます。
Link to this sectionデータセット形式#
深度推定データセットは、各RGB画像と対応する深度ファイルをペアにします。深度ターゲットは、メートル単位のfloat32値を含む .npy 配列として保存されます。データセットのYAMLは images/ ディレクトリを指します。ローダーは images コンポーネントを depth に置き換え、画像拡張子を .npy に置き換えることで深度ファイルのパスを導き出します。
dataset/
├── images/
│ ├── train/
│ └── val/
└── depth/
├── train/
└── val/例えば、images/train/scene_001.jpg にある画像は、depth/train/scene_001.npy の深度マップとペアになります。完全なフォーマット仕様については、深度推定データセットガイド を参照してください。
Link to this section検証#
学習済みのYOLO26n-depthモデルの 精度 を深度推定データセットで検証します。バリデーションが意図したデータセットYAMLを使用するように data を明示的に渡してください。リリースされた重みは imgsz=768 で学習されているため、最高の精度を得るにはそのサイズで検証および予測を行ってください。
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-depth.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Validate the model
metrics = model.val(data="nyu-depth.yaml")
metrics.delta1 # percentage of pixels within threshold δ=1.25
metrics.abs_rel # mean absolute relative error
metrics.rmse # root mean squared error (meters)
metrics.silog # scale-invariant logarithmic errorLink to this section予測#
学習済みのYOLO26n-depthモデルを使用して画像に対する予測を実行します。
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-depth.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Predict with the model
results = model("https://ultralytics.com/images/bus.jpg") # predict on an image
# Access the results
for result in results:
depth_map = result.depth.data.cpu().numpy() # torch.Tensor -> NumPy float32, shape (H, W), meterspredictモードの詳細については、予測(Predict)ページを参照してください。
Link to this section結果の出力#
YOLO深度推定は、画像ごとに1つの Results オブジェクトを返します。各結果には、画像全体に対する密な浮動小数点深度マップが1つ保存されます。
| 属性 | タイプ | 形状 | 説明 |
|---|---|---|---|
result.depth | DepthMap | (H,W) | 密なピクセルごとの深度マップ。 |
result.depth.data | torch.Tensor | (H,W) | メートル単位の深度値。NumPyを取得するには .cpu().numpy() を呼び出してください。 |
result.boxes | - | - | インスタンスボックスはありません。 |
result.masks | - | - | インスタンスマスクなし。 |
すべてのタスクにわたるタスク固有のResultsフィールドについては、タスク別予測結果(Predict Results by Task)セクションを参照してください。
Link to this sectionエクスポート#
YOLO26n-depthモデルをONNX、CoreMLなどの異なるフォーマットにエクスポートします。
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-depth.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Export the model
model.export(format="onnx")利用可能なYOLO26深度推定エクスポートフォーマットを以下の表に示します。format 引数(例: format='onnx' または format='engine')を使用して任意のフォーマットにエクスポートできます。エクスポートされたモデルで直接予測や検証を行うことも可能です(例: yolo predict model=yolo26n-depth.onnx)。エクスポート完了後、モデルの使用例が表示されます。
| 形式 | format引数 | モデル | メタデータ | 引数 |
|---|---|---|---|---|
| PyTorch | - | yolo26n-depth.pt | ✅ | - |
| TorchScript | torchscript | yolo26n-depth.torchscript | ✅ | imgsz, quantize, dynamic, nms, batch, device |
| ONNX | onnx | yolo26n-depth.onnx | ✅ | imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device |
| OpenVINO | openvino | yolo26n-depth_openvino_model/ | ✅ | imgsz, quantize, dynamic, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n-depth.engine | ✅ | imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n-depth.mlpackage | ✅ | imgsz, dynamic, quantize, nms, batch, device |
| TF SavedModel | saved_model | yolo26n-depth_saved_model/ | ✅ | imgsz, keras, quantize, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n-depth.pb | ❌ | imgsz, batch, device |
| TF Edge TPU | edgetpu | yolo26n-depth_edgetpu.tflite | ✅ | imgsz, quantize, data, fraction, device |
| PaddlePaddle | paddle | yolo26n-depth_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n-depth.mnn | ✅ | imgsz, batch, dynamic, quantize, nms, device |
| NCNN | ncnn | yolo26n-depth_ncnn_model/ | ✅ | imgsz, quantize, batch, device |
| IMX500 | imx | yolo26n-depth_imx_model/ | ✅ | imgsz, quantize, data, fraction, nms, device |
| RKNN | rknn | yolo26n-depth_rknn_model/ | ✅ | imgsz, batch, name, quantize, data, fraction, device |
| ExecuTorch | executorch | yolo26n-depth_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n-depth_axelera_model/ | ✅ | imgsz, batch, quantize, data, fraction, device |
| DEEPX | deepx | yolo26n-depth_deepx_model/ | ✅ | imgsz, quantize, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n-depth_qnn.onnx | ✅ | imgsz, batch, name, quantize, data, fraction, device |
| LiteRT | litert | yolo26n-depth.tflite | ✅ | imgsz、quantize、batch、data、fraction、device |
| Hailo | hailo | yolo26n-depth_hailo_model/ | ✅ | imgsz、name、quantize、data、fraction、simplify、conf、iou |
exportの詳細については、Exportページを参照してください。
Link to this sectionよくある質問 (FAQ)#
Link to this sectionYOLO26深度推定モデルをカスタムデータセットでトレーニングするにはどうすればよいですか?#
ペアとなるRGB画像と.npy深度ファイルを準備し、images/ディレクトリを指定したデータセットYAMLを作成します。ローダーはパス内のimagesをdepthに置き換え、画像拡張子を.npyに入れ替えることで、深度ファイルを自動的に検索します。
事前学習済みウェイトから開始し、AdamWを使用して低い学習率を設定することで、モデルがすでに学習した内容を保持しながらファインチューニングを行います(理由は独自データでのファインチューニングを参照してください):
from ultralytics import YOLO
# Load a pretrained YOLO26 depth model
model = YOLO("yolo26s-depth.pt")
# Fine-tune on a custom depth dataset
results = model.train(
data="path/to/your_dataset.yaml",
epochs=20,
imgsz=640,
optimizer="AdamW",
lr0=1e-4,
warmup_bias_lr=1e-4,
)利用可能なその他の引数については、Configurationページを確認してください。
Link to this sectionYOLO26の深度推定ではどのようなメトリクスがレポートされますか?#
深度推定のバリデーションでは、Depth Anythingや関連する単眼深度推定の研究で使用されるメトリクスセットがレポートされます:
- delta1 / delta2 / delta3 — 予測深度と正解深度(またはその逆数)の比率がそれぞれ1.25、1.25²、1.25³未満であるピクセルの割合です。値が高いほど良好です。
- abs_rel — 平均絶対相対誤差です。値が低いほど良好です。
- rmse — 二乗平均平方根誤差(メートル単位)です。値が低いほど良好です。
- silog — スケール不変対数誤差です。値が低いほど良好です。
各予測は画像ごとに正解データに対して中央値で位置合わせされ、統計はバリデーションセットのすべての有効なピクセルに対して集計されます(有効な深度ピクセルが多い画像ほど、統計値への重みが大きくなります)。代わりに画像ごとのメトリクスを平均化する論文では、同じ予測結果に対してもわずかに異なる値が報告される場合があります。
Link to this section深度マップの出力形式は何ですか?#
The depth map is stored as a torch.Tensor of shape (H, W) where each value is the predicted depth in meters (use result.depth.data.cpu().numpy() for a NumPy float32 array). Access it through result.depth.data after running prediction. The map is aligned to the input image resolution.
Link to this section深度推定にはどのデータセットがサポートされていますか?#
Ultralytics YOLO26には、NYU Depth V2、KITTI、Hypersim、SUN RGB-D、ARKitScenesなど、いくつかの深度推定データセット用の組み込みデータセットYAML設定が用意されています。全リストと形式の詳細については、深度推定データセットガイドを参照してください。
Link to this section事前学習済みのYOLO26深度推定モデルをバリデーションするにはどうすればよいですか?#
評価に使用するデータセットYAMLを指定して、事前学習済みのYOLO26深度モデルをバリデーションします:
from ultralytics import YOLO
# Load a pretrained model
model = YOLO("yolo26n-depth.pt")
# Validate the model
metrics = model.val(data="nyu-depth.yaml")
print("delta1:", metrics.delta1)
print("abs_rel:", metrics.abs_rel)
print("rmse:", metrics.rmse)Link to this sectionYOLO26深度推定モデルをONNX形式にエクスポートするにはどうすればよいですか?#
PythonまたはCLIを使用して、YOLO26深度モデルをONNXにエクスポートします:
from ultralytics import YOLO
# Load a pretrained model
model = YOLO("yolo26n-depth.pt")
# Export the model to ONNX format
model.export(format="onnx")さまざまなフォーマットへのエクスポートに関する詳細については、Exportページを参照してください。