Оценка глубины по монокулярному изображению#
Оценка глубины по монокулярному изображению позволяет предсказать карту глубины для каждого пикселя на основе одного 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 млн изображений), показаны ниже. Столбцы метрик приводятся для тестового разделения NYU Depth V2 Eigen.
Модели загружаются автоматически из последнего релиза Ultralytics при первом использовании.
| Модель | размер (пиксели) | delta1NYU | abs_relNYU | rmseNYU | Скорость CPU ONNX (мс) | Скорость T4 TensorRT10 (мс) | параметры (М) | FLOPs (Б) |
|---|---|---|---|---|---|---|---|---|
| YOLO26n-depth | 768 | 0.882 | 0.109 | 0.414 | 272.0 ± 27.2 | 2.7 ± 0.1 | 6.4 | 46.9 |
| YOLO26s-depth | 768 | 0.896 | 0.104 | 0.399 | 393.7 ± 13.1 | 3.8 ± 0.0 | 13.2 | 67.9 |
| YOLO26m-depth | 768 | 0.921 | 0.089 | 0.364 | 621.5 ± 49.7 | 6.0 ± 0.1 | 23.3 | 130.7 |
| YOLO26l-depth | 768 | 0.930 | 0.083 | 0.351 | 821.9 ± 50.7 | 7.7 ± 0.1 | 27.7 | 157.2 |
| YOLO26x-depth | 768 | 0.933 | 0.080 | 0.344 | 1240.9 ± 73.3 | 13.6 ± 0.2 | 57.0 | 302.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.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, которое использовалось при обучении выпущенных весов.
Скорость по сравнению с Depth Anything V2#
Depth Anything V2 — это широко используемая открытая базовая модель для монокулярной глубины. Ее бэкэнд трансформера зрения DINOv2 и декодер DPT требуют больших вычислительных ресурсов, поэтому на том же Tesla T4 под управлением TensorRT fp16 самая маленькая из выпущенных моделей Depth Anything V2 работает медленнее, чем любая модель глубины YOLO26, включая YOLO26x-depth, у которой более чем в два раза больше параметров.
При ~768 пикс. — imgsz=768 для YOLO26, разрешении, на котором обучены ее выпущенные веса, и 770 пикс. для Depth Anything V2, бэкэнд DINOv2 которой требует значения, кратного размеру патча 14:
| Модель | параметры (M) | FLOPs (B) | T4 TensorRT10 (мс) | FPS | Ускорение по сравнению с V2 Small | Ускорение по сравнению с V2 Base |
|---|---|---|---|---|---|---|
| Depth Anything V2 Base | 97.5 | 1025.5 | 55.40 | 18.1 | — | — |
| Depth Anything V2 Small | 24.8 | 346.9 | 20.99 | 47.6 | — | — |
| YOLO26x-depth | 57.0 | 302.0 | 13.57 | 73.7 | 1.5× | 4.1× |
| YOLO26l-depth | 27.7 | 157.2 | 7.68 | 130.2 | 2.7× | 7.2× |
| YOLO26m-depth | 23.3 | 130.7 | 6.00 | 166.7 | 3.5× | 9.2× |
| YOLO26s-depth | 13.2 | 67.9 | 3.82 | 261.6 | 5.5× | 14.5× |
| YOLO26n-depth | 6.4 | 46.9 | 2.73 | 365.8 | 7.7× | 20.3× |
При ~640 пикс. — imgsz=640 и 644 пикс. соответственно — порядок не меняется, а YOLO26n-depth работает в 5,9 раза быстрее, чем Depth Anything V2 Small:
| Модель | T4 TensorRT10 (мс) | FPS |
|---|---|---|
| Depth Anything V2 Base | 35.10 | 28.5 |
| Depth Anything V2 Small | 13.62 | 73.4 |
| YOLO26x-depth | 10.26 | 97.5 |
| YOLO26l-depth | 6.14 | 162.8 |
| YOLO26m-depth | 4.71 | 212.1 |
| YOLO26s-depth | 3.08 | 324.4 |
| YOLO26n-depth | 2.29 | 436.9 |
- Задержка указана только для инференса,
batch=1, TensorRT fp16 на Tesla T4 — та же схема, что и в таблице моделей выше, здесь она приведена с точностью до двух знаков после запятой; FPS — это величина, обратная незакругленной задержке. Столбцы Speedup делят задержку Depth Anything V2 Small (20,99 мс) и Base (55,40 мс) на задержку YOLO26. - Depth Anything V2 Small и Base — это выпущенные контрольные точки ViT-S и ViT-B.
- Сравнение охватывает только задержку — оба семейства моделей здесь не оцениваются по общему протоколу точности.
Диапазон глубины и логарифмическая голова (head) глубины#
Голова предсказания глубины выдает exp(logit) — неограниченную (~0,02–150 м) — и разделяет форму сцены и абсолютный масштаб: сеть предсказывает поле относительной лог-глубины, а абсолютные метры задаются отдельным двухпараметрическим преобразованием (exp(a·log d + b)), получаемым при оценке, с помощью легкой калибровки или дообучения. Распространеная альтернатива, ограниченная голова sigmoid × max_depth, вместо этого жестко встраивает предел в архитектуру, поэтому любая глубина за пределами max_depth обрезается — что препятствует обучению на сценках большего радиуса действия и их предсказанию.
Почему голова неограничена: доказательства для разных диапазонов глубины#
Контрольный тест A/B — одни и те же данные, тот же график, разница только в голове. Обучение обеих голов с нуля на идентичном сочетании данных помещений (≤10 м) и улицы (≤80 м):
| Голова | Диапазон вывода | δ1 на смешанном диапазоне (val) | Поведение при обучении |
|---|---|---|---|
sigmoid × max_depth (10 м) | ограничено 0–10 м | 0.221 | плато на 1-й эпохе |
log (неограниченная) | 0–~150 m | 0.367 (+66%) | улучшается на протяжении всего процесса |
Ограниченная голова не может представить большую часть уличных пикселей (>10 м), поэтому ее улучшение практически сразу прекращается; голова log учится на всем диапазоне.
Проблема, которую это решает — дообучение на одном наборе данных, стратифицированное по диапазону. Дообучение ограниченной (10 м) головы на отдельных наборах данных работает, когда данные соответствуют ограничению, и ломается, когда они превышают его:
| Датасет | Диапазон глубины | δ1 ограниченной головы |
|---|---|---|
| SUN RGB-D | ≤10 m | 0.78 ✅ |
| Hypersim | в основном ≤10 м | 0.74 ✅ |
| KITTI | ~80 m | 0,08 ❌ (abs_rel ≈ 7,0 — несоответствие масштаба 80/10) |
| vKITTI2 | 80 m | 0.04 ❌ |
Коллапс происходит точно на границе ограничения. У головы log нет такого ограничения.
Выпущенные модели — производительность в разных диапазонах. Поставляемое семейство с головой log, оцененное на бенчмарках в диапазоне от 10 м (NYU, iBims-1) до 80 м (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 |
Обе колонки приведены в опубликованном виде. Остальные строки оценены с использованием TTA и протокола log-least-squares, описанных на страницах их датасетов, которые валидатор в этом репозитории не реализует, поэтому строка 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 на странице Обучение.
Дообучение (fine-tuning) на твоих данных#
При адаптации предварительно обученной модели глубины под свой набор данных снизь скорость обучения и используй оптимизатор 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) только в том случае, если твой домен сильно отличается и у тебя есть большой набор данных — в этом случае уместен стандартный SGDlr0=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")Для калибровки требуются данные истинной глубины, под которые производится подгонка, поэтому она запускается на размеченном подмножестве — ее нельзя выполнить при слепом инференсе. Подгонка и оценка выполняются на тех же пикселях, по которым оцениваются метрики валидации: GT на уровне или за пределами max_depth из YAML набора данных (по умолчанию 100 м) исключается. Используй это, когда относительная глубина уже хорошая и неверны только масштаб/диапазон; если для твоего домена требуется изменить саму относительную структуру, вместо этого выполни дообучение.
Обучение делает это за тебя автоматически: после завершения model.train(...) лучший и последний чекпоинты калибруются на валидационном наборе, чтобы они выдавали глубину в метрическом масштабе из коробки.
Выпущенные чекпоинты yolo26*-depth.pt поставляются с уже встроенной калибровкой, подогнанной на тренировочном валидационном миксе. Это единый глобальный масштаб для всех доменов, поэтому для получения наиболее точной абсолютной глубины на конкретной камере или типе сцены запусти model.calibrate() на небольшом размеченном подмножестве из твоих собственных данных — это заменит встроенную подгонку.
Формат набора данных#
Наборы данных для оценки глубины связывают каждое 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. Полную спецификацию формата см. в Руководстве по наборам данных для оценки глубины.
Валидация#
Проверь точность обученной модели 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Предсказание#
Используй обученную модель 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 на странице Предсказание.
Вывод результатов#
Оценка глубины YOLO возвращает один объект Results на изображение. Каждый результат хранит одну плотную карту глубины с плавающей точкой для всего изображения.
| Атрибут | Тип | Форма | Описание |
|---|---|---|---|
result.depth | DepthMap | (H,W) | Плотная карта глубины для каждого пикселя. |
result.depth.data | torch.Tensor | (H,W) | Значения глубины в метрах; вызови .cpu().numpy() для NumPy. |
result.boxes | - | - | Нет рамок (boxes) объектов. |
result.masks | - | - | Нет масок экземпляров. |
Информацию о специфичных для задач полях Results для каждой задачи см. в разделе Результаты предсказания по задачам.
Краскизация карты глубины#
Необработанная карта глубины представляет собой одноканальный массив с плавающей точкой в метрах — он полезен для вычислений, но его трудно читать напрямую. Чтобы превратить его в цветное изображение, используй хелпер colorize_depth в ultralytics.utils.plotting, который сопоставляет массив глубины (H, W) с BGR-изображением uint8 (H, W, 3) (недействительные пиксели <= 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 фиксируют диапазон между кадрами, чтобы цвет всегда соответствовал одному и тому же расстоянию.
| Аргумент | Значение | Описание |
|---|---|---|
cmap | jet (по умолчанию) | Высококонтрастный синий → зеленый → красный, палитра, используемая result.plot(). |
cmap | inferno | Черный → фиолетовый → оранжевый → желтый. Перцептивно равномерная, дружелюбная к людям с дальтонизмом, читаемая в градациях серого. |
cmap | spectral | Красный → желтый → зеленый → синий (matplotlib Spectral_r). |
mode | disparity (по умолчанию) | Нормализует обратную глубину (1/d) между 2-м и 98-м процентилями; теплые маркеры близких и далеких выбросов поглощаются. |
mode | metric | Линейно нормализует глубину в метрах между 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")Доступные форматы экспорта для оценки глубины YOLO приведены в таблице ниже. Ты можешь выполнить экспорт в любой формат, используя аргумент 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, opset, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n-depth.pb | ❌ | imgsz, opset, batch, device |
| TF Edge TPU | edgetpu | yolo26n-depth_edgetpu.tflite | ✅ | imgsz, quantize, opset, data, fraction, device |
| PaddlePaddle | paddle | yolo26n-depth_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n-depth.mnn | ✅ | imgsz, batch, dynamic, quantize, simplify, opset, 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, simplify, opset, 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, simplify, opset, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n-depth_qnn.onnx | ✅ | imgsz, batch, name, quantize, simplify, opset, 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 |
| Huawei Ascend | ascend | yolo26n-depth_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms |
Смотри полную информацию об export на странице Экспорт.
FAQ#
Подготовь парные RGB-изображения и файлы глубины
.npy, а затем создай YAML набора данных, указывающий на твой каталогimages/. Загрузчик находит файлы глубины автоматически, заменяя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, )Ознакомься со страницей Конфигурация, чтобы узнать о других доступных аргументах.
Валидация оценки глубины предоставляет набор метрик, используемых в 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()для массива NumPyfloat32). Получи к ней доступ через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")Для получения дополнительной информации об экспорте в различные форматы обратись к странице Экспорт.