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 не потребує додаткових залежностей. Усе, що вона імпортує, входить до базового встановлення.

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. Таблиці підтримки, контрольні точки й результати бенчмарків на цій сторінці згенеровано з випущеної бібліотеки та опублікованих ваг, а не написано вручну.