Безопасность корпоративного уровня: Соответствует ISO 27001 + SOC 2 Type I.

Link to this sectionОценка глубины по монокулярному изображению#

Monocular depth estimation examples

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

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

Совет

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

Link to this sectionМодели#

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

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

Модельразмер
(пиксели)
delta1NYUabs_relNYUrmseNYUпараметры
(М)
FLOPs
(Б)
YOLO26n-depth7680.8820.1090.4146.446.9
YOLO26s-depth7680.8960.1040.39913.267.9
YOLO26m-depth7680.9210.0890.36423.3130.7
YOLO26l-depth7680.9300.0830.35127.7157.2
YOLO26x-depth7680.9330.0800.34457.0302.0
  • delta1NYU — это процент пикселей, где предсказанная глубина отличается от истинной (ground truth) не более чем в 1,25 раза, на тестовой выборке NYU Depth V2 Eigen (654 изображения) с использованием многомасштабного TTA (Test Time Augmentation), горизонтального отражения и логарифмического метода наименьших квадратов для выравнивания.
  • Точность для одного масштаба без 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Диапазон глубины и логарифмическая голова (head) глубины#

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

Link to this sectionПочему голова неограничена: доказательства для разных диапазонов глубины#

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

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

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

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

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

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

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

БенчмаркДиапазонYOLO26x-depth (log)предыдущий ограниченный выпуск
NYU Eigen10 м0.9330,934
iBims-110 м0,9610,945
ETH3D~60 м0,9590,931
Make3D~70 м0,3020,296
KITTI Eigen80 м0,9420,891
Среднее0,8190,799

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

Link to this sectionОбучение#

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

Link to this sectionДообучение (fine-tuning) на твоих данных#

When adapting a pretrained depth model to a custom dataset, lower the learning rate and use the AdamW optimizer. The default optimizer settings are tuned for training from scratch (SGD with lr0=0.01); applied to an already-converged depth model they can overwrite the pretrained knowledge and degrade results — especially when fine-tuning on a single domain.

Рекомендуемый рецепт дообучения
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%) разнообразных универсальных изображений в свои обучающие данные; это существенно снижает «забывание» во время дообучения.
  • Train from scratch (model=yolo26s-depth.yaml) only if your domain is very different and you have a large dataset — there the default SGD lr0=0.01 is appropriate, since there are no pretrained weights to preserve.

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

Голова глубины отделяет форму (относительную структуру сцены) от масштаба (абсолютные метры). Если модель уже выдает хорошую относительную глубину для твоих сцен, но абсолютные значения неверны для твоей камеры, ты можешь исправить масштаб за секунды с помощью 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")

Для калибровки нужна истинная глубина, поэтому она выполняется на размеченной выборке — это невозможно сделать при слепом инференсе. Используй ее, когда относительная глубина уже хороша, а масштаб или диапазон неверны; если же для твоего домена нужно изменить саму относительную структуру, используй дообучение.

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

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

Link to this sectionФормат набора данных#

Наборы данных оценки глубины объединяют каждое RGB-изображение с соответствующим файлом глубины. Цели глубины хранятся как массивы .npy, содержащие значения float32 в метрах. 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 на наборе данных оценки глубины. Явно передай 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

Link 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), meters

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

Link to this sectionВывод результатов#

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

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

Для получения информации о специфичных для задачи полях Results см. раздел Предсказания по задачам.

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-
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, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-depth.pbimgsz, batch, device
TF Edge TPUedgetpuyolo26n-depth_edgetpu.tfliteimgsz, quantize, data, fraction, device
PaddlePaddlepaddleyolo26n-depth_paddle_model/imgsz, batch, device
MNNmnnyolo26n-depth.mnnimgsz, batch, dynamic, quantize, 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, 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, data, optimize, device
Qualcomm QNNqnnyolo26n-depth_qnn.onnximgsz, batch, name, quantize, data, fraction, device
LiteRTlitertyolo26n-depth.tfliteimgsz, quantize, batch, data, fraction, device
Hailohailoyolo26n-depth_hailo_model/imgsz, name, quantize, data, fraction, simplify, conf, iou

Смотри подробную информацию об export на странице Export.

Link to this sectionFAQ#

Link to this sectionКак обучить модель YOLO26 для оценки глубины на собственном наборе данных?#

Подготовь пары RGB-изображений и файлов глубины .npy, затем создай YAML-файл набора данных, указывающий на твою директорию images/. Загрузчик автоматически находит файлы глубины, заменяя images на depth в пути и подставляя расширение .npy вместо расширения изображения.

Начни с предварительно обученных весов и используй низкую скорость обучения с AdamW, чтобы дообучение сохранило уже имеющиеся знания модели (смотри Fine-tuning on your own data, чтобы узнать почему):

Пример
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,
)

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

Link to this sectionКакие метрики отслеживает оценка глубины YOLO26?#

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

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

Каждое предсказание центрируется по медиане относительно истинного значения для каждого изображения, а затем статистика агрегируется по всем валидным пикселям валидационного набора (изображения с большим количеством валидных пикселей глубины имеют пропорционально больший вес). Статьи, которые вместо этого усредняют метрики по изображениям, могут показывать слегка отличающиеся значения на тех же предсказаниях.

Link to this sectionКакой формат вывода карты глубины?#

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

Link to this sectionКакие наборы данных поддерживаются для оценки глубины?#

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

Link to this sectionКак проверить предварительно обученную модель оценки глубины YOLO26?#

Проверь предварительно обученную модель глубины 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)

Link to this sectionКак можно экспортировать модель оценки глубины YOLO26 в формат ONNX?#

Экспортируй модель глубины 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")

Для получения подробной информации об экспорте в различные форматы обратись к странице Экспорт.

Участники

Комментарии