Mask R-CNN

Mask R-CNN добавляет к Faster R-CNN ветку масок по регионам: для каждой найденной рамки она предсказывает маску сегментации. LibreYOLO портирует реализацию из torchvision для детекции и сегментации экземпляров.

Задачи
detection, instance segmentation
Размеры
r50 at 800 px
Установка
pip install libreyolo
Уровень поддержки
Только инференс, начиная с v. Только предсказание, валидация и экспорт. Функции обучения неприменимы.
Исходный проект
Mask R-CNN от PyTorch, BSD-3-Clause. Статья, исходный код
Лицензии
Код: BSD-3-Clause, веса: BSD-3-Clause. Коммерческое использование

Установка

Mask R-CNN не требует опциональных extra. Всё, что он импортирует, входит в базовую установку.

bash
pip install libreyolo

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

Веса скачиваются с Hugging Face при первом запуске и кэшируются локально.

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreMaskRCNNr50.pt")result = model(SAMPLE_IMAGE, save=True) print(result.masks.data.shape)for box in result.boxes:    print(box.cls, box.conf, box.xyxy)
CLI
libreyolo predict model=LibreMaskRCNNr50.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True
Только рамки
from libreyolo import LibreYOLO, SAMPLE_IMAGE # task="detect" пропускает голову масок и возвращает рамки из того же# чекпойнта, без масок в результате.model = LibreYOLO("LibreMaskRCNNr50.pt", task="detect")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

Возвращаемый объект Results — тот же, что возвращает любое семейство, поэтому замена одного детектора на другой сводится к одной строке. Если загрузить чекпойнт без аргумента task, возвращаются маски экземпляров, потому что сегментация — задача этого семейства по умолчанию; тогда result.masks несёт их вместе с рамками. С task="detect" загружаются те же веса, но без головы масок, и возвращаются только рамки. conf и iou задают пороги уверенности и NMS; в отличие от детектора на запросах, Mask R-CNN сохраняет шаг NMS из оригинальной реализации. Про источники, стриминг и обработку результатов см. предсказание.

Варианты

Один бэкбон: ResNet-50 с пирамидой признаков, через сборщик Mask R-CNN версии v2 из torchvision. Опубликованный чекпойнт распространяется под лицензией BSD-3-Clause и обслуживает обе задачи этого семейства, так что выбирать между размерами не приходится.

Валидация

val() возвращает словарь с ключами metrics/. Для задачи сегментации, которая у этого чекпойнта стоит по умолчанию, обычный ключ metrics/mAP50-95 содержит оценку по маскам, а рамки тот же запуск отдаёт под суффиксом (B), так что оба значения доступны за один проход.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreMaskRCNNr50.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])      # маскиprint(metrics["metrics/mAP50-95(B)"])   # рамки
CLI
libreyolo val model=LibreMaskRCNNr50.pt data=my-dataset.yaml

Экспорт

ЗадачаONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
DetectionDetection to ONNX: поддерживаетсяDetection to TorchScript: не поддерживаетсяDetection to ExecuTorch: не поддерживаетсяDetection to TensorRT: не поддерживаетсяDetection to OpenVINO: не поддерживаетсяDetection to Paddle: не поддерживаетсяDetection to MNN: не поддерживаетсяDetection to RKNN: не поддерживаетсяDetection to ncnn: не поддерживаетсяDetection to TFLite: не поддерживаетсяDetection to CoreML: не поддерживаетсяDetection to Core AI: не поддерживается
Instance segmentationInstance segmentation to ONNX: поддерживаетсяInstance segmentation to TorchScript: не поддерживаетсяInstance segmentation to ExecuTorch: не поддерживаетсяInstance segmentation to TensorRT: не поддерживаетсяInstance segmentation to OpenVINO: не поддерживаетсяInstance segmentation to Paddle: не поддерживаетсяInstance segmentation to MNN: не поддерживаетсяInstance segmentation to RKNN: не поддерживаетсяInstance segmentation to ncnn: не поддерживаетсяInstance segmentation to TFLite: не поддерживаетсяInstance segmentation to CoreML: не поддерживаетсяInstance segmentation to Core AI: не поддерживается

Mask R-CNN экспортируется только в ONNX и только с размером батча 1. Экспортированный граф содержит внутри шаги изменения размера и наложения масок из оригинальной реализации, поэтому LibreYOLO принудительно ставит dynamic=True независимо от того, что передано, чтобы граф оставался корректным для неквадратных источников. Экспортированный файл .onnx загружается обратно через LibreYOLO() по расширению файла и возвращает тот же Results.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreMaskRCNNr50.pt")model.export(format="onnx", imgsz=800)
CLI
libreyolo export model=LibreMaskRCNNr50.pt format=onnx imgsz=800
Использование экспортированного файла
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Фабрика выбирает загрузчик по расширению файла, поэтому экспортированный# артефакт загружается как любой чекпойнт и возвращает тот же объект Results.model = LibreYOLO("LibreMaskRCNNr50.onnx")result = model(SAMPLE_IMAGE) print(result.masks.data.shape)

Чекпойнты

Все опубликованные файлы весов этого семейства. Единственный чекпойнт ниже указан в разделе detect, но тот же файл загружается и для сегментации: не передавайте аргумент task — и он по умолчанию вернёт маски.

ФайлВход (пикс.)Лицензия весов
Detection
LibreMaskRCNNr50.pt800bsd-3-clause

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

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

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

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

Оригинальная работа
Mask R-CNN, PyTorch
Лицензия исходного проекта
BSD-3-Clause
Исходный код проекта
github.com/pytorch/vision
Код LibreYOLO
MIT
Веса
BSD-3-Clause, повторно опубликованы на huggingface.co/LibreYOLO
Толкование
BSD-3-Clause is a permissive license, so this code can be used in commercial and closed-source products with no obligation on your own application code. It asks only that you keep the copyright notice and disclaimer with any copy you redistribute, and it carries no patent grant. The published checkpoint used for parity testing is not distributed in the LibreYOLO source tree: torchvision's own documentation notes that a pretrained model's terms may depend on its training data, so the Hugging Face mirror ships the BSD text on that implied basis and repeats the caveat rather than issuing an explicit checkpoint-specific grant.

Mask R-CNN сделан как подкласс обёртки Faster R-CNN в LibreYOLO: у него тот же исходник из torchvision и та же лицензия BSD-3-Clause, а сверху добавлены предсказатель масок и голова масок RoI из того же портированного коммита.

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