MiDaS
MiDaS — монокулярная оценка относительной глубины, обученная на смеси датасетов с функцией потерь, инвариантной к масштабу и сдвигу; именно эта линия работ задала протокол zero-shot переноса глубины, который переиспользуют более поздние семейства. В LibreYOLO он поддержан для задачи depth: предсказание и zero-shot валидация, без пути обучения.
- Задачи
- depth
- Размеры
- s, l at 256 to 384 px
- Установка
pip install "libreyolo[midas]"- Уровень поддержки
- Только инференс, начиная с v1.5.0. Только предсказание, валидация и экспорт. Функции обучения неприменимы.
- Исходный проект
- MiDaS от Intel Intelligent Systems Lab (Intel ISL), MIT. Статья, исходный код
- Лицензии
- Код: MIT, веса: MIT. Коммерческое использование
Установка
Для энкодеров timm в MiDaS требуется дополнение midas.
pip install "libreyolo[midas]"Предсказание
Чекпойнты s и l скачиваются с зеркал LibreYOLO по лицензии MIT издателя и кэшируются локально.
from libreyolo import LibreYOLO, SAMPLE_IMAGE # При первом использовании скачивает чекпойнт с зеркала.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, повторно опубликованы на huggingface.co/LibreYOLO
- Толкование
- The upstream repository and released weights declare MIT. LibreYOLO mirrors the s and l checkpoints under that publisher grant.
Цитирование
@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.