MiDaS

MiDaS — монокулярная оценка относительной глубины, обученная на смеси датасетов с функцией потерь, инвариантной к масштабу и сдвигу; именно эта линия работ задала протокол zero-shot переноса глубины, который переиспользуют более поздние семейства. В LibreYOLO он поддержан для задачи depth: предсказание и zero-shot валидация, без пути обучения.

Задачи
depth
Размеры
s, l at 256 to 384 px
Установка
pip install libreyolo
Уровень поддержки
Только инференс, начиная с v. Только предсказание, валидация и экспорт. Функции обучения неприменимы.
Исходный проект
MiDaS от Intel Intelligent Systems Lab (Intel ISL), MIT. Статья, исходный код
Лицензии
Код: MIT, веса: MIT. Коммерческое использование

Установка

MiDaS не требует установки дополнительных extra-пакетов. Всё, что он импортирует, входит в базовую установку.

bash
pip install libreyolo

Предсказание

MiDaS — единственное семейство для глубины, которое LibreYOLO не перепубликует в своей организации на Hugging Face. Запрос чекпойнта по его имени файла в LibreYOLO скачивает соответствующий официальный файл напрямую из релизов isl-org/MiDaS на GitHub, сверяет его с зафиксированным SHA-256 и перед первым использованием оборачивает метаданными чекпойнта LibreYOLO; при последующих запусках берётся закэшированный локальный файл. Почему так — см. раздел «Лицензирование».

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Файла ещё нет на диске: LibreYOLO скачивает его из официального релиза# isl-org/MiDaS на GitHub и перед использованием сверяет с зафиксированным SHA-256.model = LibreYOLO("LibreMiDaSl-depth.pt")result = model(SAMPLE_IMAGE, save=True) depth = result.depth_mapprint(depth.min, depth.max, depth.mean)
CLI
libreyolo predict model=LibreMiDaSl-depth.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True
Вариант Small
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Энкодер EfficientNet-Lite3, меньше и быстрее, чем размер l на DPT-Large.model = LibreYOLO("LibreMiDaSs-depth.pt")result = model(SAMPLE_IMAGE, save=True)

result.depth_map содержит плотную карту относительной обратной глубины: большие значения означают, что точка ближе к камере, а у самих значений нет ни метрических единиц, ни общего масштаба между изображениями. save=True записывает на диск раскрашенную визуализацию этой карты; Results.plot() это семейство не покрывает, поскольку определён только для карт нормалей и краёв. Об источниках, стриминге и обработке результатов — в разделе предсказание.

Варианты

Два варианта с разными энкодерами, а не просто разные масштабы одного и того же. s — это MiDaS v2.1 Small, энкодер EfficientNet-Lite3. l — это DPT-Large, энкодер ViT-L/16 с декодером DPT, который MiDaS предложил для плотного предсказания. Различается и предобработка: s масштабирует изображение с сохранением пропорций по верхней границе (upper bound) и нормализует по среднему и стандартному отклонению ImageNet, а l использует минимальное масштабирование с сохранением пропорций (minimal), со средним и стандартным отклонением 0.5. Берите s, если нужна более лёгкая CNN, и l — ради точности трансформерного декодера.

Обучение для этого семейства не предусмотрено. LibreMiDaS.train() безусловно вызывает NotImplementedError.

Валидация

val() запускает общий валидатор глубины: он выравнивает каждое предсказание с эталонной разметкой (ground truth), подбирая по методу наименьших квадратов масштаб и сдвиг для каждого изображения, а затем выдаёт стандартные метрики относительной глубины в режиме zero-shot — AbsRel, RMSE и три пороговых значения delta.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreMiDaSl-depth.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/abs_rel"])print(metrics["metrics/rmse"])print(metrics["metrics/delta1"])
CLI
libreyolo val model=LibreMiDaSl-depth.pt data=my-dataset.yaml

Экспорт

ЗадачаONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
depthdepth to ONNX: поддерживаетсяdepth to TorchScript: поддерживаетсяdepth to ExecuTorch: поддерживаетсяdepth to TensorRT: поддерживаетсяdepth to OpenVINO: поддерживаетсяdepth to Paddle: не поддерживаетсяdepth to MNN: не поддерживаетсяdepth to RKNN: не поддерживаетсяdepth to ncnn: поддерживаетсяdepth to TFLite: не поддерживаетсяdepth to CoreML: не поддерживаетсяdepth to Core AI: не поддерживается

Экспортированный артефакт загружается обратно через LibreYOLO() по суффиксу файла, поэтому файл .onnx или .engine ведёт себя как чекпойнт и возвращает тот же Results, только с depth_map вместо рамок.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreMiDaSl-depth.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)
CLI
libreyolo export model=LibreMiDaSl-depth.pt format=onnxlibreyolo export model=LibreMiDaSl-depth.pt format=tensorrt half=True
Использование экспортированного файла
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Фабрика выбирает загрузчик по суффиксу файла, поэтому экспортированный# артефакт загружается как любой чекпойнт и возвращает тот же объект Results.model = LibreYOLO("LibreMiDaSl-depth.onnx")result = model(SAMPLE_IMAGE) print(result.depth_map.data.shape)

Лицензирование

Проверяйте лицензию в репозитории конкретных весов на Hugging Face. Она указана для каждого чекпойнта в организации LibreYOLO и может различаться даже внутри одного семейства. Этот репозиторий считается авторитетным источником, а сводка ниже описывает условия на момент последней проверки страницы.

Это описание соответствующих лицензий, а не юридическая консультация. Если ответ важен для коммерческого использования, прочитайте лицензии самостоятельно и проконсультируйтесь с юристом.

Оригинальная работа
MiDaS, Intel Intelligent Systems Lab (Intel ISL)
Лицензия исходного проекта
MIT
Исходный код проекта
github.com/isl-org/MiDaS
Код LibreYOLO
MIT
Веса
MIT, распространяются авторами. LibreYOLO не размещает и не зеркалирует их.
Толкование
The isl-org/MiDaS repository, code and released checkpoints included, is MIT. LibreYOLO's own port code is MIT as well. LibreYOLO does not republish the checkpoints on its own Hugging Face organization, though: the family downloads the two official release assets directly from GitHub and checks them against a pinned SHA-256 before wrapping them, because an internal LibreYOLO policy (ADR 0006) requires the training-dataset mixture's commercial-redistribution terms to be cleared before LibreYOLO hosts a depth checkpoint itself, and that clearance has not happened for MiDaS. The bytes you get are upstream's own MIT-licensed release either way.

Цитирование

@ARTICLE {Ranftl2022,
    author  = "Ren\'{e} Ranftl and Katrin Lasinger and David Hafner and Konrad Schindler and Vladlen Koltun",
    title   = "Towards Robust Monocular Depth Estimation: Mixing Datasets for Zero-Shot Cross-Dataset Transfer",
    journal = "IEEE Transactions on Pattern Analysis and Machine Intelligence",
    year    = "2022",
    volume  = "44",
    number  = "3"
}

@article{Ranftl2021,
	author    = {Ren\'{e} Ranftl and Alexey Bochkovskiy and Vladlen Koltun},
	title     = {Vision Transformers for Dense Prediction},
	journal   = {ICCV},
	year      = {2021},
}

Скопировано из блока цитирования авторов на странице github.com/isl-org/MiDaS#citation.

Проверено с LibreYOLO v1.5.0. Таблицы поддержки, чекпойнты и результаты бенчмарков на этой странице сгенерированы из выпущенной библиотеки и опубликованных весов, а не написаны вручную.