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-пакетов. Всё, что он импортирует, входит в базовую установку.

bash
pip install libreyolo

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

Веса скачиваются автоматически при первом запуске: LibreYOLO берёт нужный размер напрямую из официальных чекпойнтов и кэширует его локально.

Python
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, единичные векторы
CLI
libreyolo predict model=LibreMoGe2s-normal.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True

MoGe-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 градусов.

Python
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"])          # процент пикселей
CLI
libreyolo val model=LibreMoGe2s-normal.pt data=my-dataset.yaml imgsz=518

Экспорт

ЗадачаONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
normalnormal 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.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreMoGe2s-normal.pt")model.export(format="onnx", imgsz=518)model.export(format="tensorrt", imgsz=518, half=True)
CLI
libreyolo export model=LibreMoGe2s-normal.pt format=onnx imgsz=518libreyolo export model=LibreMoGe2s-normal.pt format=tensorrt imgsz=518 half=True
Использование экспортированного файла
from 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.

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