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-пакетов. Всё, что он импортирует, входит в базовую установку.
pip install libreyoloПредсказание
MiDaS — единственное семейство для глубины, которое LibreYOLO не перепубликует в
своей организации на Hugging Face. Запрос чекпойнта по его имени файла в
LibreYOLO скачивает соответствующий официальный файл напрямую из релизов
isl-org/MiDaS на GitHub, сверяет его с зафиксированным SHA-256 и перед первым
использованием оборачивает метаданными чекпойнта LibreYOLO; при последующих
запусках берётся закэшированный локальный файл. Почему так — см. раздел
«Лицензирование».
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)libreyolo predict model=LibreMiDaSl-depth.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=Truefrom 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.
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"])libreyolo val model=LibreMiDaSl-depth.pt data=my-dataset.yamlЭкспорт
| Задача | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| depth | depth 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 вместо рамок.
from libreyolo import LibreYOLO model = LibreYOLO("LibreMiDaSl-depth.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)libreyolo export model=LibreMiDaSl-depth.pt format=onnxlibreyolo export model=LibreMiDaSl-depth.pt format=tensorrt half=Truefrom 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.