MoGe-2
MoGe-2 — монокулярная геометрическая модель, которая за один прямой проход предсказывает плотное поле нормалей поверхности по одному RGB-изображению. В LibreYOLO она доступна только для оценки нормалей — через официальные чекпойнты ViT-S, ViT-B и ViT-L.
- Задачи
- normal
- Размеры
- s, b, l at 518 px
- Установка
pip install libreyolo- Уровень поддержки
- Только инференс, начиная с v. Только предсказание, валидация и экспорт. Функции обучения неприменимы.
- Исходный проект
- MoGe-2 от Microsoft, MIT. Статья, исходный код
- Лицензии
- Код: MIT, веса: MIT. Коммерческое использование
Установка
MoGe-2 не требует установки дополнительных extra-пакетов. Всё, что он импортирует, входит в базовую установку.
pip install libreyoloПредсказание
Веса скачиваются автоматически при первом запуске: LibreYOLO берёт нужный размер напрямую из официальных чекпойнтов и кэширует его локально.
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreMoGe2s-normal.pt")result = model(SAMPLE_IMAGE, save=True) normal = result.normal_mapprint(normal.array.shape) # (H, W, 3) float32, единичные векторыlibreyolo predict model=LibreMoGe2s-normal.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=TrueMoGe-2 возвращает плотное поле, а не набор детекций, поэтому result.boxes
пуст, а conf, iou и max_det ни на что не влияют. Результат лежит в
result.normal_map: массив (H, W, 3) из единичных векторов в системе
координат камеры OpenCV, где +x — вправо, +y — вниз, +z — вглубь сцены, а
обращённая к камере поверхность даёт (0, 0, -1). Предсказание по списку
изображений выполняет по одному прямому проходу на изображение; быстрого пути со
сборкой батча у этого семейства нет. Об источниках, стриминге и обработке
результатов — в разделе предсказание.
Варианты
Три размера энкодера поставляются отдельными чекпойнтами: ViT-S, ViT-B и ViT-L, все с одним и тем же входным разрешением. Бенчмарк-стенд LibreYOLO это семейство не измерял, поэтому опубликованных чисел по точности, по которым их можно было бы сравнить, нет; выбирайте размер под свой бюджет вычислений.
Валидация
val() измеряет угловую ошибку на парном датасете карт нормалей: изображения
рядом с 16-битными PNG нормалей с тем же именем файла и необязательная маска
валидности, чтобы пиксели заполнения и некорректные пиксели никогда не
учитывались. Возвращаются средняя и медианная угловая ошибка в градусах, а также
процент пикселей, попавших в 11.25, 22.5 и 30 градусов.
from libreyolo import LibreYOLO model = LibreYOLO("LibreMoGe2s-normal.pt")metrics = model.val(data="my-dataset.yaml", imgsz=518) print(metrics["metrics/mean_angular_error"]) # градусыprint(metrics["metrics/median_angular_error"])print(metrics["metrics/within_11_25"]) # процент пикселейlibreyolo val model=LibreMoGe2s-normal.pt data=my-dataset.yaml imgsz=518Экспорт
| Задача | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| normal | normal to ONNX: поддерживается | normal to TorchScript: поддерживается | normal to ExecuTorch: поддерживается | normal to TensorRT: поддерживается | normal to OpenVINO: поддерживается | normal to Paddle: не поддерживается | normal to MNN: не поддерживается | normal to RKNN: не поддерживается | normal to ncnn: поддерживается | normal to TFLite: не поддерживается | normal to CoreML: не поддерживается | normal to Core AI: не поддерживается |
Экспорт нормалей работает по контракту среды выполнения с фиксированным
разрешением и батчем 1: dynamic и batch, отличный от 1, отклоняются, а
imgsz должен нацело делиться на размер патча ViT-энкодера — LibreYOLO
проверяет это до старта запуска. Экспортированный артефакт загружается обратно
через LibreYOLO() по суффиксу файла, поэтому файл .onnx ведёт себя как
чекпойнт и возвращает тот же Results.
from libreyolo import LibreYOLO model = LibreYOLO("LibreMoGe2s-normal.pt")model.export(format="onnx", imgsz=518)model.export(format="tensorrt", imgsz=518, half=True)libreyolo export model=LibreMoGe2s-normal.pt format=onnx imgsz=518libreyolo export model=LibreMoGe2s-normal.pt format=tensorrt imgsz=518 half=Truefrom libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreMoGe2s-normal.onnx")result = model(SAMPLE_IMAGE) print(result.normal_map.array.shape)Лицензирование
Проверяйте лицензию в репозитории конкретных весов на Hugging Face. Она указана для каждого чекпойнта в организации LibreYOLO и может различаться даже внутри одного семейства. Этот репозиторий считается авторитетным источником, а сводка ниже описывает условия на момент последней проверки страницы.
Это описание соответствующих лицензий, а не юридическая консультация. Если ответ важен для коммерческого использования, прочитайте лицензии самостоятельно и проконсультируйтесь с юристом.
- Оригинальная работа
- MoGe-2, Microsoft
- Лицензия исходного проекта
- MIT
- Исходный код проекта
- github.com/microsoft/MoGe
- Код LibreYOLO
- MIT
- Веса
- MIT, распространяются авторами. LibreYOLO не размещает и не зеркалирует их.
- Толкование
- MIT is a permissive license: the code and the official ViT-S, ViT-B and ViT-L checkpoints can be used in commercial and closed-source products. It asks that you keep the license text and copyright notice with any copy you redistribute, and it places no obligation on your own application code. LibreYOLO downloads these checkpoints directly from the official Hugging Face repositories at a pinned revision rather than copying them into its own organization, and verifies each file against a recorded SHA-256 checksum before use. The DINOv2 encoder MoGe-2 builds on is separately licensed Apache-2.0 by Meta AI; LibreYOLO reuses the DINOv2 implementation already bundled for its Depth Anything V2 family rather than copying it again here.
LibreYOLO не копирует эти чекпойнты в свою организацию.
LibreYOLO("LibreMoGe2s-normal.pt") скачивает нужный размер напрямую из
официальных репозиториев на Hugging Face на зафиксированной ревизии и перед
использованием сверяет файл с записанной контрольной суммой SHA-256.
Цитирование
@inproceedings{wang2025moge,
title={Moge: Unlocking accurate monocular geometry estimation for open-domain images with optimal training supervision},
author={Wang, Ruicheng and Xu, Sicheng and Dai, Cassie and Xiang, Jianfeng and Deng, Yu and Tong, Xin and Yang, Jiaolong},
booktitle={Proceedings of the Computer Vision and Pattern Recognition Conference},
pages={5261--5271},
year={2025}
}
@misc{wang2025moge2,
title={MoGe-2: Accurate Monocular Geometry with Metric Scale and Sharp Details},
author={Ruicheng Wang and Sicheng Xu and Yue Dong and Yu Deng and Jianfeng Xiang and Zelong Lv and Guangzhong Sun and Xin Tong and Jiaolong Yang},
year={2025},
eprint={2507.02546},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2507.02546},
}Скопировано из блока цитирования авторов на странице github.com/microsoft/MoGe#-citation.