Mask R-CNN
Mask R-CNN ajoute à Faster R-CNN une branche de masques par région, qui prédit un masque de segmentation à côté de chaque boîte qu'il détecte. LibreYOLO porte l'implémentation torchvision pour la détection et la segmentation d'instances.
- Tâches
- detection, instance segmentation
- Tailles
- r50 at 800 px
- Installer
pip install libreyolo- Niveau de support
- Inférence uniquement, depuis v. Prédiction, validation et export uniquement. Les fonctionnalités d'entraînement ne s'appliquent pas.
- Licences
- Code BSD-3-Clause, poids BSD-3-Clause. Usage commercial
Installation
Mask R-CNN ne demande aucun extra optionnel. Tout ce qu'il importe fait partie de l'installation de base.
pip install libreyoloPrédire
Les poids sont téléchargés depuis Hugging Face au premier usage, puis mis en cache localement.
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" ignore la tête de masques et renvoie les boîtes du# même checkpoint, sans masques dans le résultat.model = LibreYOLO("LibreMaskRCNNr50.pt", task="detect")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)L'objet Results renvoyé est celui que renvoie chaque famille, si bien que
passer à un autre détecteur ne demande qu'une ligne. Charger le checkpoint sans
argument task renvoie des masques d'instances, puisque la segmentation est la
tâche par défaut de cette famille ; result.masks les porte alors à côté des
boîtes. Passer task="detect" charge les mêmes poids sans la tête de masques
et ne renvoie que des boîtes. conf et iou fixent les seuils de confiance et
de NMS ; Mask R-CNN conserve son étape de NMS d'origine, contrairement à un
détecteur à base de requêtes. Voir la prédiction pour les
sources, le streaming et le traitement des résultats.
Variantes
Un seul backbone : ResNet-50 avec une pyramide de caractéristiques, en utilisant le builder Mask R-CNN v2 de torchvision. Le checkpoint publié est sous licence BSD-3-Clause et sert les deux tâches de cette famille, il n'y a donc aucune taille entre laquelle choisir.
Valider
val() renvoie un dictionnaire de clés metrics/. Avec la tâche de
segmentation par défaut de ce checkpoint, la clé metrics/mAP50-95 seule
contient le score des masques, et la même exécution reporte les boîtes sous le
suffixe (B), si bien que les deux sont disponibles en une seule passe.
from libreyolo import LibreYOLO model = LibreYOLO("LibreMaskRCNNr50.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"]) # masquesprint(metrics["metrics/mAP50-95(B)"]) # boîteslibreyolo val model=LibreMaskRCNNr50.pt data=my-dataset.yamlExporter
| Tâche | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Detection | Detection to ONNX : pris en charge | Detection to TorchScript : non pris en charge | Detection to ExecuTorch : non pris en charge | Detection to TensorRT : non pris en charge | Detection to OpenVINO : non pris en charge | Detection to Paddle : non pris en charge | Detection to MNN : non pris en charge | Detection to RKNN : non pris en charge | Detection to ncnn : non pris en charge | Detection to TFLite : non pris en charge | Detection to CoreML : non pris en charge | Detection to Core AI : non pris en charge |
| Instance segmentation | Instance segmentation to ONNX : pris en charge | Instance segmentation to TorchScript : non pris en charge | Instance segmentation to ExecuTorch : non pris en charge | Instance segmentation to TensorRT : non pris en charge | Instance segmentation to OpenVINO : non pris en charge | Instance segmentation to Paddle : non pris en charge | Instance segmentation to MNN : non pris en charge | Instance segmentation to RKNN : non pris en charge | Instance segmentation to ncnn : non pris en charge | Instance segmentation to TFLite : non pris en charge | Instance segmentation to CoreML : non pris en charge | Instance segmentation to Core AI : non pris en charge |
Mask R-CNN n'exporte que vers ONNX, avec une taille de batch de 1. Le graphe
exporté conserve en son sein les étapes de redimensionnement et de collage des
masques d'origine, si bien que LibreYOLO force dynamic=True quelle que soit
la valeur passée, afin de garder le graphe valide pour des sources qui ne sont
pas carrées. Un fichier .onnx exporté se recharge via LibreYOLO() selon son
extension de fichier et renvoie le même 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 # La factory s'appuie sur l'extension du fichier, donc un artefact# exporté se charge comme n'importe quel checkpoint et renvoie le# même objet Results.model = LibreYOLO("LibreMaskRCNNr50.onnx")result = model(SAMPLE_IMAGE) print(result.masks.data.shape)Checkpoints
Tous les fichiers de poids publiés de cette famille. Le seul checkpoint
ci-dessous est listé sous detect, mais le même fichier se charge aussi pour la
segmentation : ne passez pas d'argument task et il renvoie des masques par
défaut.
| Fichier | Entrée (px) | Licence des poids |
|---|---|---|
| Detection | ||
| LibreMaskRCNNr50.pt | 800 | bsd-3-clause |
Tous les fichiers ci-dessus sont actuellement disponibles dans l<link>organisation LibreYOLO</link> et sont téléchargés à la première utilisation.
Licence
Vérifiez la licence dans le dépôt Hugging Face des poids précis que vous téléchargez. Chaque checkpoint de l<link>organisation LibreYOLO</link> en possède une, et elles ne sont pas toujours identiques au sein dune même famille. Ce dépôt fait autorité ; le résumé ci-dessous décrit les conditions applicables lors de la dernière vérification de cette page.
Ceci décrit les licences concernées et ne constitue pas un conseil juridique. Si la réponse a une importance commerciale, lisez vous-même les licences et consultez votre propre avocat.
- Travail d'origine
- Mask R-CNN, PyTorch
- Licence du projet d'origine
- BSD-3-Clause
- Source du projet d'origine
- github.com/pytorch/vision
- Code de LibreYOLO
- MIT
- Poids
- BSD-3-Clause, republiés sur huggingface.co/LibreYOLO
- Interprétation
- 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 est construit comme une sous-classe du wrapper Faster R-CNN de LibreYOLO : il partage la même source torchvision et la même licence BSD-3-Clause, et ajoute le prédicteur de masques et la tête RoI de masques du même commit porté.