LibreMODUS

LibreMODUS — интеграция чекпойнта MODUS 14B-A7B, работающая только на инференс. Это модель any-to-any, которая превращает один производный от изображения вход в другой: RGB на входе — глубина на выходе; глубина на входе — нормали на выходе; любой из них плюс фраза — рамки на выходе. LibreYOLO поддерживает четыре задачи через стандартный API предсказания и более широкий набор через any2any().

Задачи
detection, depth, normal, edge
Размеры
Установка
pip install libreyolo
Уровень поддержки
Смежный уровень, начиная с v. Отдельная часть продукта со своей фабрикой и контрактом.
Исходный проект
MODUS от EPFL Visual Intelligence and Learning Lab (VILAB), Apache-2.0 (code); research-only per the upstream model card (weights). Статья, исходный код
Лицензии
Код: Apache-2.0, веса: Apache-2.0 (code); research-only per the upstream model card (weights). Коммерческое использование

Установка

LibreMODUS требует собственного extra, который подтягивает accelerate ради диспетчеризации большой модели, нужной этому чекпойнту.

bash
pip install "libreyolo[modus]"

LibreYOLO не распространяет и не зеркалирует веса MODUS. По умолчанию загрузка модели LibreMODUS скачивает нужные файлы напрямую из EPFL-VILAB/MODUS на закреплённой ревизии Hugging Face, и для скачивания с нуля всегда нужен собственный аутентифицированный аккаунт Hugging Face, даже если гейт на стороне оригинального хостинга временно открыт. Ознакомьтесь с условиями оригинального проекта, примите их, а затем аутентифицируйтесь:

bash
hf auth login
python
from libreyolo import LibreMODUS

model = LibreMODUS(token="hf_...")

Чтобы вообще не ходить в сеть, укажите снапшот, который у вас уже есть:

python
model = LibreMODUS(checkpoint_path="/models/MODUS")

В этом каталоге должны лежать model.safetensors, ae.safetensors, llm_config.json, vit_config.json, tokenizer_config.json, vocab.json и merges.txt. Что именно разрешают условия чекпойнта — в разделе «Лицензирование» ниже.

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

Python
from libreyolo import LibreMODUS model = LibreMODUS(size="14b-a7b", task="normal")result = model.predict("room.jpg")normals = result.normal_map.data model.set_task("edge")result = model.predict("room.jpg")edges = result.edges.data # Без своего словаря detect декодирует COCO-токены меток из# чекпойнта в непрерывные идентификаторы классов COCO-80.model.set_task("detect")result = model.predict("street.jpg")print(result.boxes.xyxy)
Grounding по фразе
from libreyolo import LibreMODUS model = LibreMODUS(task="detect")# set_classes() переключает детекцию на grounding по фразе: каждая фраза# обрабатывается независимо и возвращается через тот же контракт Boxes.model.set_classes(["red bus", "cyclist"])result = model.predict("street.jpg", conf=0.2)print(result.boxes.xyxy, result.boxes.cls)
any2any()
from libreyolo import LibreMODUS model = LibreMODUS() # От одного до трёх производных от изображения входов (rgb, depth, normal,# canny/edge) плюс необязательный вспомогательный текст, сведённые к одной цели.result = model.any2any(    inputs={"rgb": "room.jpg"},    target="normal",    steps=10,    cfg=2.0,    seed=0,)normals = result.normal_map.data # Для grounding через any2any() нужен текстовый вход с самой фразой.result = model.any2any(    {"rgb": "street.jpg", "text": "red bus"},    target="grounding",)print(result.boxes.xyxy)

Стандартный API задач покрывает четыре задачи, каждая из которых отображается в одну цель MODUS: depth — в относительную глубину (result.depth_map), normal — в нормали к поверхности (result.normal_map), edge — в границы в стиле Canny (result.edges), а detect — в рамки COCO-80 (result.boxes), если только set_classes() не переключит её на grounding по фразе. set_task() переключает их на одной и той же уже загруженной модели. Опубликованный рецепт использует десять шагов flow-сэмплирования с guidance по тексту 4.0 и guidance по изображению 2.0; переопределить их можно параметрами inference_steps=, inference_cfg= и inference_image_cfg= при создании модели.

any2any() открывает более широкую публичную поверхность анализа: от одного до трёх производных от изображения входов (rgb, depth, normal, canny/edge) плюс необязательный вспомогательный текст, сведённые к любой из целей — глубине, нормалям, границам, границам на основе SAM, детекции COCO или grounding по фразе. Все производные от изображения входы должны описывать один и тот же выровненный холст; при несовпадении ширины и высоты LibreMODUS отклоняет их, а не масштабирует по отдельности. chain=(...) генерирует промежуточные цели и подаёт их обратно в тот же контекст, в пределах обучающего бюджета чекпойнта в три условия. verify=N (N >= 2) генерирует N кандидатов и оставляет того, кто набирает больше всего по ограниченной проверке самосогласованности; она доступна как result.verification_score.

dtype="bf16" (по умолчанию) соответствует точности опубликованного чекпойнта; dtype="fp8" хранит подходящие линейные веса ствола декодера в E4M3 с масштабом на каждый выходной канал, один раз конвертирует их в локальный кэш в ~/.cache/libreyolo/modus/fp8 и деквантует до dtype входа на каждое матричное умножение, то есть выигрывает в памяти, а не жертвует точностью на уровне активаций.

train(), val() и export() выбрасывают исключение: LibreMODUS работает только на инференс, валидации на датасете нет, а пути экспорта в ONNX, TensorRT или TFLite не существует. Пакетный predict() и аугментация во время инференса тоже не поддерживаются; за один вызов обрабатывается одно изображение.

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

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

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

Оригинальная работа
MODUS, EPFL Visual Intelligence and Learning Lab (VILAB)
Лицензия исходного проекта
Apache-2.0 (code); research-only per the upstream model card (weights)
Исходный код проекта
github.com/EPFL-VILAB/Modus
Код LibreYOLO
MIT
Веса
Apache-2.0 (code); research-only per the upstream model card (weights), распространяются авторами. LibreYOLO не размещает и не зеркалирует их.
Толкование
Apache-2.0 covers the EPFL-VILAB/Modus source repository that LibreYOLO's adapter follows; LibreYOLO's own port is MIT, permissive and usable in commercial and closed-source products, requiring only that license text and attribution travel with any copy you redistribute. The MODUS-14B-A7B checkpoint is a separate artifact under a separate license: its Hugging Face model card currently declares license: other, describes it as bagel-derived, and requests research-only use, terms that bind you directly rather than through LibreYOLO. LibreYOLO does not bundle, mirror, or redistribute this checkpoint in any form, quantized or otherwise; loading it always downloads the required files directly from EPFL-VILAB/MODUS at a pinned revision, which needs the user's own authenticated Hugging Face account and acceptance of the current upstream terms, or a checkpoint_path to a snapshot the user already obtained. One upstream file, modeling/bagel/modeling_utils.py, carries an incompatible CC BY-NC 4.0 license inherited from Meta's DiT and is not copied, adapted, or paraphrased anywhere in this port; the small permissive routines LibreYOLO needed were re-derived independently from Hugging Face Transformers (Apache-2.0) and OpenAI's guided-diffusion (MIT) instead. Training is not offered for this family.

LibreYOLO нигде не размещает и не зеркалирует чекпойнт MODUS, в том числе в собственной Hugging Face-организации: при загрузке он всегда тянет закреплённую ревизию напрямую из EPFL-VILAB/MODUS либо читает снапшот, уже лежащий на диске по пути checkpoint_path.

Цитирование

@article{ye2026modus,
  title   = {MODUS: Decoder-only Any-to-Any Modeling of Diverse Modalities},
  author  = {Ye, Mingqiao and An, Zhaochong and Gao, Zhitong and Liu, Xian
             and Fleuret, Fran\c{c}ois and Li, Chuan and Zadeh, Amir
             and Belongie, Serge and Dehghan, Afshin and Allardice, Jesse
             and Mizrahi, David and Kar, O\u{g}uzhan Fatih and Bachmann, Roman
             and Zamir, Amir},
  journal = {arXiv preprint arXiv:2607.25948},
  year    = {2026},
}

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

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