Ultralytics YOLO27:

Оценка монокулярной глубины с помощью Ultralytics YOLO#

Monocular depth estimation examples

Монокулярная оценка глубины предсказывает карту глубины для каждого пикселя по одному RGB-изображению. Каждый выходной пиксель содержит значение глубины в метрах, представляющее оценочное расстояние от камеры до соответствующей точки поверхности.

Результатом работы модели глубины является плотная карта чисел с плавающей точкой формы (H, W), выровненная относительно входного изображения. Такое попиксельное представление делает монокулярную оценку глубины подходящей для реконструкции 3D-сцен, навигации роботов, создания контента AR/VR и любых приложений, которым требуется получить пространственную структуру по данным одной камеры.

Совет

Используй task=depth или задачу CLI yolo depth для монокулярной оценки глубины. Файлы моделей глубины YOLO26 используют суффикс -depth, например yolo26n-depth.pt.



Watch: Monocular Depth Estimation with Ultralytics YOLO26 | Python Tutorial | Vision AI 🚀

Модели#

Ниже представлены модели глубины YOLO26, предварительно обученные на широком наборе из нескольких датасетов (в помещении + на улице, ~2,19 млн изображений). Столбцы с метриками рассчитаны на тестовой выборке Eigen датасета NYU Depth V2.

Модели автоматически скачиваются из последнего релиза Ultralytics при первом использовании.

Модельразмер
(пиксели)
delta1NYUabs_relNYUrmseNYUСкорость
CPU ONNX
(мс)
Скорость
T4 TensorRT10
(мс)
параметры
(M)
FLOPs
(B)
YOLO26n-depth7680.8820.1090.414272.0 ± 27.22.7 ± 0.16.346.9
YOLO26s-depth7680.8960.1040.399393.7 ± 13.13.8 ± 0.013.268.0
YOLO26m-depth7680.9210.0890.364621.5 ± 49.76.0 ± 0.123.3130.4
YOLO26l-depth7680.9300.0830.351821.9 ± 50.77.7 ± 0.127.7157.0
YOLO26x-depth7680.9330.0800.3441240.9 ± 73.313.6 ± 0.257.0301.7
  • delta1NYU — это процент пикселей, для которых предсказанная глубина отличается от истинной не более чем в 1,25 раза, на тестовой выборке Eigen датасета NYU Depth V2 (654 изображения) с TTA в виде многомасштабного преобразования и горизонтального отражения, а также выравниванием методом наименьших квадратов в логарифмическом пространстве.
  • Точность в одном масштабе без TTA можно воспроизвести с помощью yolo depth val model=yolo26n-depth.pt data=nyu-depth.yaml imgsz=768 device=0 (замени model= для каждого размера); здесь используется выравнивание по медиане (только масштаб), поэтому показатели ниже: delta1 0,783 (n), 0,793 (s), 0,840 (m), 0,853 (l), 0,860 (x).
  • abs_rel — это средняя абсолютная относительная ошибка между предсказанными и истинными значениями глубины.
  • rmse — это среднеквадратичная ошибка в метрах.
  • Скорость — это задержка только инференса (предварительная и последующая обработка не учитываются) при imgsz=768, batch=1, указанная как среднее ± стандартное отклонение по результатам замеров после прогрева. CPU ONNX — ONNX Runtime fp32 на 32-ядерном Intel Xeon (Skylake); T4 TensorRT10 — TensorRT fp16 на Tesla T4.
  • params и FLOPs измерены при разрешении 768×768 — разрешении обучения выпущенных весов.

Смотри предварительный просмотр unreleased YOLO27 для предварительных результатов NYU Depth V2.

Сравнение скорости с Depth Anything V2#

Depth Anything V2 — широко используемый открытый базовый вариант для монокулярной оценки глубины. Его backbone DINOv2 и визуальный Transformer с декодером DPT требуют значительных вычислительных ресурсов, поэтому на той же Tesla T4 с TensorRT fp16 самая маленькая выпущенная модель Depth Anything V2 работает медленнее каждой модели глубины YOLO26 — включая YOLO26x-depth, в которой более чем вдвое больше параметров.

При ~768 пикселях — imgsz=768 для YOLO26, поскольку это разрешение, на котором обучались его выпущенные веса, и 770 пикселях для Depth Anything V2, backbone DINOv2 которой требует, чтобы размер был кратен размеру патча 14:

Модельпараметры (M)FLOPs (B)T4 TensorRT10 (мс)FPSУскорение относительно V2 SmallУскорение относительно V2 Base
Depth Anything V2 Base97.51025.555.4018.1
Depth Anything V2 Small24.8346.920.9947.6
YOLO26x-depth57.0301.713.5773.71.5×4.1×
YOLO26l-depth27.7157.07.68130.22.7×7.2×
YOLO26m-depth23.3130.46.00166.73.5×9.2×
YOLO26s-depth13.268.03.82261.65.5×14.5×
YOLO26n-depth6.346.92.73365.87.7×20.3×

При ~640 пикселях — imgsz=640 и 644 пикселях соответственно — порядок не меняется, а YOLO26n-depth работает в 5,9 раза быстрее Depth Anything V2 Small:

МодельT4 TensorRT10 (мс)FPS
Depth Anything V2 Base35.1028.5
Depth Anything V2 Small13.6273.4
YOLO26x-depth10.2697.5
YOLO26l-depth6.14162.8
YOLO26m-depth4.71212.1
YOLO26s-depth3.08324.4
YOLO26n-depth2.29436.9
  • Задержка учитывает только инференс, batch=1, TensorRT fp16 на Tesla T4 — использовался тот же тестовый стенд, что и для таблицы моделей выше; здесь значения приведены с точностью до двух знаков после запятой. FPS — это обратная величина нескругленной задержки. В столбцах Ускорение задержка Depth Anything V2 Small (20,99 мс) и Base (55,40 мс) делится на задержку YOLO26.
  • Depth Anything V2 Small и Base — это выпущенные чекпойнты ViT-S и ViT-B.
  • Сравнение охватывает только задержку — две группы моделей здесь не оцениваются по единому протоколу точности.

Диапазон глубины и голова логарифмической глубины#

Голова глубины предсказывает exp(logit)неограниченную (~0,02–150 м) — и отделяет форму сцены от абсолютного масштаба: сеть предсказывает поле относительной логарифмической глубины, а абсолютные значения в метрах задаются отдельным преобразованием с двумя параметрами (exp(a·log d + b)), восстановленным при оценке, с помощью лёгкой калибровки или дообучения. Распространённая альтернатива — ограниченная голова sigmoid × max_depth, в архитектуру которой зашит фиксированный верхний предел, поэтому любая глубина за пределами max_depth обрезается, что не позволяет обучаться на сценах и предсказывать сцены с большей дальностью.

Почему голова не ограничена: данные для разных диапазонов глубины#

Контролируемое A/B-сравнение — одни и те же данные, расписание обучения и различается только голова. Обучение обеих голов с нуля на одинаковой смеси данных из помещений (≤10 м) и с улицы (≤80 м):

ГоловаДиапазон выводаδ1 на валидации смешанного диапазонаПоведение при обучении
sigmoid × max_depth (10 м)ограниченный диапазон 0–10 м0.221выходит на плато уже на 1-й эпохе
log (неограниченная)0–~150 m0.367 (+66%)улучшается на всём протяжении обучения

Ограниченная голова не может представить большинство пикселей с улицы, расположенных дальше 10 м, поэтому почти сразу прекращает улучшаться; голова log обучается на всём диапазоне.

Устраняемая проблема — дообучение на одном датасете с разбиением по диапазону. Дообучение ограниченной (10 м) головы на отдельных датасетах работает, когда данные укладываются в заданный предел, и деградирует, когда его превышают:

ДатасетДиапазон глубиныδ1 для ограниченной головы
SUN RGB-D≤10 m0.78 ✅
Hypersimв основном ≤10 м0.74 ✅
KITTI~80 m0,08 ❌ (abs_rel ≈ 7,0 — несоответствие масштабов 80/10)
vKITTI280 m0.04 ❌

Деградация происходит ровно на границе заданного предела. У головы log такой границы нет.

Выпущенные модели — результаты на разных диапазонах. Выпущенная группа моделей с головой log, оценённая на бенчмарках с диапазоном от 10 м (NYU, iBims-1) до 80 м (KITTI), с масштабно выровненной δ1:

БенчмаркДиапазонYOLO26x-depth (log)предыдущий ограниченный релиз
NYU Eigen10 m0.9330.934
iBims-110 m0.9610.945
ETH3D~60 m0.9590.931
Make3D~70 m0.3020.296
KITTI Eigen80 m0.9420.891
Среднее0.8190.799

Оба столбца приведены в опубликованном виде. Для остальных строк используются протоколы TTA и наименьших квадратов в логарифмическом пространстве, описанные на страницах соответствующих датасетов; валидатор в этом репозитории их не реализует, поэтому строку KITTI нельзя повторно измерить на тех же условиях. На странице KITTI приведены значения, измеренные на канонической выборке Eigen из 652 кадров.

Наибольший прирост наблюдается на уличных бенчмарках с большей дальностью (KITTI, ETH3D) — именно там фиксированный предел 10 м наносит наибольший ущерб, — при этом качество в помещениях сохраняется.

Обучение#

Обучи YOLO26n-depth на датасете Depth8 в течение 100 эпох с размером изображения 640. Полный список доступных аргументов смотри на странице Конфигурация.

Пример
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 смотри на странице Обучение.

Дообучение на собственных данных#

При адаптации предварительно обученной модели глубины к пользовательскому датасету уменьши скорость обучения и используй оптимизатор AdamW. Настройки оптимизатора по умолчанию рассчитаны на обучение с нуля (SGD с lr0=0.01); при применении к уже сошедшейся модели глубины они могут стереть предварительно обученные знания и ухудшить результаты, особенно при дообучении на одном домене.

Рекомендуемый рецепт дообучения
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 предсказывают неограниченную глубину, поэтому без изменений адаптируются к данным ближнего (макросъёмка) или дальнего диапазона (улица/вождение). Установка max_depth: в YAML-файле датасета (в метрах) ограничивает набор пикселей GT, учитываемых при расчёте метрик валидации.
  • Сохраняй общую производительность. Если тебе нужно, чтобы модель оставалась точной на сценах, отсутствующих в обучающей выборке, добавь в обучающие данные небольшую долю (~5–10%) разнообразных изображений общего назначения; это существенно снижает забывание во время дообучения.
  • Обучай с нуля (model=yolo26s-depth.yaml), только если твой домен сильно отличается и у тебя большой датасет — в таком случае подходит SGD lr0=0.01 по умолчанию, поскольку сохранять предварительно обученные веса не требуется.

Калибровка масштаба глубины#

Голова оценки глубины отделяет форму (относительную структуру сцены) от масштаба (абсолютных значений в метрах). Если модель уже выдаёт хорошую относительную глубину на твоих сценах, но абсолютные значения не подходят для твоей камеры, ты можешь за считаные секунды скорректировать масштаб с помощью model.calibrate() — замкнутой формулы подгонки двухпараметрической лог-аффинной функции по небольшому размеченному набору, без обучения градиентами и изменения весов сети, поэтому относительная структура не может ухудшиться.

Калибровка масштаба
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")

Для калибровки нужна эталонная глубина, по которой выполняется подгонка, поэтому она запускается на размеченной выборке — во время слепого инференса это невозможно. Подгонка и оценка выполняются на тех же пикселях, которые используются для расчёта метрик val: GT на расстоянии, равном или превышающем max_depth в YAML-файле датасета (по умолчанию 100 м), исключается. Используй калибровку, если относительная глубина уже хорошая, а проблема только в масштабе или диапазоне; если для твоего домена нужно изменить саму относительную структуру, вместо этого выполни дообучение.

Обучение делает это автоматически: после завершения model.train(...) лучшие и последние чекпойнты калибруются на валидационном наборе, чтобы сразу выдавать глубину в метрическом масштабе.

Выпущенные чекпойнты yolo26*-depth.pt уже содержат эту калибровку, выполненную по валидационной смеси предобучения. Это единый глобальный масштаб для всех доменов, поэтому для максимально точной абсолютной глубины на конкретной камере или в сценах определённого типа запусти model.calibrate() на небольшой размеченной выборке собственных данных — это заменит встроенную подгонку.

Формат датасета#

Датасеты для оценки глубины сопоставляют каждое RGB-изображение с масштабированной 16-битной PNG-картой глубины uint16 или картой глубины NPY с плавающей точкой в метрах. По умолчанию значения PNG задаются в миллиметрах; для датасетов с другим соглашением в их YAML задаётся depth_scale. Загрузчик выводит путь к карте глубины, заменяя компонент images на depth, отдавая предпочтение .png и используя .npy в качестве запасного варианта.

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

Например, изображению по пути images/train/scene_001.jpg соответствует карта глубины по пути depth/train/scene_001.png. Полную спецификацию формата см. в руководстве по датасетам для оценки глубины.

Val#

Проверь точность обученной модели YOLO26n-depth на датасете для оценки глубины. Явно передай data, чтобы валидация использовала нужный YAML-файл датасета. Выпущенные веса обучены с размером 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 error

Predict#

Используй обученную модель 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), meters

Полное описание режима predict см. на странице Predict.

Выходные данные результатов#

Оценка глубины YOLO возвращает один объект Results для каждого изображения. Каждый результат содержит одну плотную карту глубины с плавающей точкой для всего изображения.

АтрибутТипФормаОписание
result.depthDepthMap(H,W)Плотная карта глубины для каждого пикселя.
result.depth.datatorch.Tensor(H,W)Значения глубины в метрах; вызови .cpu().numpy() для получения NumPy.
result.boxes--Ограничивающие рамки экземпляров отсутствуют.
result.masks--Маски экземпляров отсутствуют.

Описание специфичных для задач полей Results для всех задач см. в разделе Результаты предсказаний по задачам.

Визуализация карты глубины#

Исходная карта глубины представляет собой одноканальный массив float в метрах — он удобен для вычислений, но его сложно воспринимать напрямую. Чтобы преобразовать его в цветное изображение, используй вспомогательную функцию colorize_depth из ultralytics.utils.plotting, которая сопоставляет массив глубины (H, W) с изображением BGR (H, W, 3) uint8 (недействительные пиксели <= 0 отображаются чёрным цветом).

result.plot() уже накладывает эту цветовую визуализацию на входное изображение с параметрами по умолчанию (cmap="jet", mode="disparity"); вызывай colorize_depth напрямую, если тебе нужно отдельное цветное изображение глубины либо другая цветовая карта или нормализация.

Визуализация предсказанной карты глубины
import cv2

from ultralytics import YOLO
from ultralytics.utils.plotting import colorize_depth

model = YOLO("yolo26n-depth.pt")
result = model("https://ultralytics.com/images/bus.jpg")[0]

depth = result.depth.data.cpu().numpy()  # (H, W) float32, meters

# Colorize with near = warm and save
cv2.imwrite("depth_colored.png", colorize_depth(depth, cmap="spectral"))  # (H, W, 3) BGR uint8

# Fix the range to 0-20 m so the same color means the same distance across frames
cv2.imwrite("depth_metric.png", colorize_depth(depth, vmin=0.0, vmax=20.0, cmap="inferno", mode="metric"))

# Blended overlay straight from the Results object (uses cmap="jet", mode="disparity")
result.save("depth_overlay.png")

Каждая цветовая карта проходит от холодных/тёмных к тёплым/ярким цветам. mode определяет, какой конец шкалы соответствует ближним объектам, а vmin/vmax фиксируют диапазон между кадрами, чтобы один и тот же цвет всегда означал одинаковое расстояние.

АргументЗначениеОписание
cmapjet (по умолчанию)Контрастная шкала от синего к зелёному и красному — палитра, которую использует result.plot().
cmapinfernoОт чёрного к фиолетовому, оранжевому и жёлтому. Перцептивно равномерная, удобная для людей с нарушениями цветового зрения и хорошо читаемая в градациях серого.
cmapspectralОт красного к жёлтому, зелёному и синему (matplotlib Spectral_r).
modedisparity (по умолчанию)Нормализует обратную глубину (1/d) между 2-м и 98-м процентилями; тёплые цвета обозначают близкие объекты, а дальние выбросы поглощаются.
modemetricЛинейно нормализует глубину в метрах между vmin и vmax; тёплые цвета обозначают дальние объекты, поэтому цвета соответствуют истинному расстоянию.

Экспорт#

Экспортируй модель 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-
TorchScripttorchscriptyolo26n-depth.torchscriptimgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n-depth.onnximgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n-depth_openvino_model/imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n-depth.engineimgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-depth.mlpackageimgsz, dynamic, quantize, nms, batch, device
TF SavedModelsaved_modelyolo26n-depth_saved_model/imgsz, keras, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-depth.pbimgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n-depth_edgetpu.tfliteimgsz, quantize, opset, data, fraction, device
PaddlePaddlepaddleyolo26n-depth_paddle_model/imgsz, batch, device
MNNmnnyolo26n-depth.mnnimgsz, batch, dynamic, quantize, simplify, opset, nms, device
NCNNncnnyolo26n-depth_ncnn_model/imgsz, quantize, batch, device
IMX500imxyolo26n-depth_imx_model/imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n-depth_rknn_model/imgsz, batch, name, quantize, simplify, opset, data, fraction, device
ExecuTorchexecutorchyolo26n-depth_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n-depth_axelera_model/imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n-depth_deepx_model/imgsz, quantize, simplify, opset, data, optimize, device
Qualcomm QNNqnnyolo26n-depth_qnn.onnximgsz, batch, name, quantize, simplify, opset, data, fraction, device
LiteRTlitertyolo26n-depth.tfliteimgsz, quantize, batch, data, fraction, device
Hailohailoyolo26n-depth_hailo_model/imgsz, name, quantize, data, fraction, simplify, conf, iou
Huawei Ascendascendyolo26n-depth_ascend_model/imgsz, batch, name, quantize, opset, simplify, nms
Apple Core AIcoreaiyolo26n-depth.aimodelimgsz, batch, quantize

nms=None по умолчанию выдает сырые результаты для внешнего NMS. Установи nms=False, чтобы выбрать доступный головной модуль без NMS; неподдерживаемые форматы возвращаются к своему родному пути вывода. Записи nms выше определяют форматы, которые могут встраивать NMS с помощью nms=True.

Полное описание export см. на странице Экспорт.

Часто задаваемые вопросы#

  • Подготовь пары RGB-изображений и 16-битных PNG-файлов глубины или карт глубины NPY с плавающей точкой в метрах, затем создай YAML-файл датасета, указывающий на каталог images/. Загрузчик автоматически находит файлы глубины, заменяя images на depth в пути, отдавая предпочтение .png и используя .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,
    )

    Дополнительные доступные аргументы см. на странице Конфигурация.

  • Валидация оценки глубины сообщает набор метрик, используемый в Depth Anything и связанных исследованиях монокулярной глубины:

    • delta1 / delta2 / delta3 — процент пикселей, для которых отношение предсказанной глубины к эталонной (или обратное отношение) меньше 1.25, 1.25² и 1.25³ соответственно. Чем выше, тем лучше.
    • abs_rel — средняя абсолютная относительная ошибка. Чем ниже, тем лучше.
    • rmse — среднеквадратичная ошибка в метрах. Чем ниже, тем лучше.
    • silog — логарифмическая ошибка, инвариантная к масштабу. Чем ниже, тем лучше.

    Каждое предсказание выравнивается по медиане с эталонной глубиной для отдельного изображения, каждая метрика вычисляется для этого изображения, а затем результаты по изображениям усредняются по валидационному набору, поэтому каждое изображение имеет одинаковый вес независимо от количества содержащихся в нём допустимых пикселей глубины. Изображения менее чем с 10 допустимыми эталонными пикселями пропускаются и не включаются в это среднее, поскольку выравнивание по медиане горстки пикселей не имеет смысла; нечисловые предсказания вместо этого оцениваются по границам глубины. Это соответствует усреднению по образцам и минимальному порогу в 10 пикселей, используемым в Depth Anything V2.

  • Карта глубины хранится как torch.Tensor с формой (H, W), где каждое значение представляет предсказанную глубину в метрах (используй result.depth.data.cpu().numpy() для получения массива NumPy float32). Получить её можно через result.depth.data после выполнения предсказания. Карта соответствует разрешению входного изображения.

  • Ultralytics YOLO26 включает встроенные конфигурации YAML для нескольких датасетов оценки глубины, включая NYU Depth V2, KITTI, Hypersim, SUN RGB-D и ARKitScenes. Полный список и сведения о формате см. в руководстве по датасетам для оценки глубины.

  • Выполни валидацию предобученной модели YOLO26 для оценки глубины, указав YAML-файл датасета, используемый для оценки:

    Пример
    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)
  • Экспортируй модель YOLO26 для оценки глубины в ONNX с помощью Python или CLI:

    Пример
    from ultralytics import YOLO
    
    # Load a pretrained model
    model = YOLO("yolo26n-depth.pt")
    
    # Export the model to ONNX format
    model.export(format="onnx")

    Подробнее об экспорте в различные форматы см. на странице Экспорт.

Комментарии