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. Всё, что он импортирует, входит в базовую установку.
pip install libreyoloПредсказание
Веса скачиваются с Hugging Face при первом запуске и кэшируются локально.
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)libreyolo predict model=LibreMaskRCNNr50.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=Truefrom 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), так что оба значения доступны за один проход.
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)"]) # рамкиlibreyolo val model=LibreMaskRCNNr50.pt data=my-dataset.yamlЭкспорт
| Задача | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Detection | Detection 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 segmentation | Instance 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.
from libreyolo import LibreYOLO model = LibreYOLO("LibreMaskRCNNr50.pt")model.export(format="onnx", imgsz=800)libreyolo export model=LibreMaskRCNNr50.pt format=onnx imgsz=800from libreyolo import LibreYOLO, SAMPLE_IMAGE # Фабрика выбирает загрузчик по расширению файла, поэтому экспортированный# артефакт загружается как любой чекпойнт и возвращает тот же объект Results.model = LibreYOLO("LibreMaskRCNNr50.onnx")result = model(SAMPLE_IMAGE) print(result.masks.data.shape)Чекпойнты
Все опубликованные файлы весов этого семейства. Единственный чекпойнт ниже
указан в разделе detect, но тот же файл загружается и для сегментации: не
передавайте аргумент task — и он по умолчанию вернёт маски.
| Файл | Вход (пикс.) | Лицензия весов |
|---|---|---|
| Detection | ||
| LibreMaskRCNNr50.pt | 800 | bsd-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 из того же портированного коммита.