Segmentation d'instances avec Mask R-CNN

Deep Learning pour les images avec PyTorch

Michal Oleszak

Machine Learning Engineer

Faster R-CNN

Schéma de l'architecture Faster R-CNN

Deep Learning pour les images avec PyTorch

Mask R-CNN

Schéma de l'architecture Mask R-CNN

Deep Learning pour les images avec PyTorch

Mask R-CNN préentraîné dans PyTorch

from torchvision.models.detection import \
maskrcnn_resnet50_fpn


model = maskrcnn_resnet50_fpn(pretrained=True) model.eval()
image = Image.open("cat_and_laptop.jpg") transform = transforms.Compose([ transforms.ToTensor() ]) image_tensor = transform(image).unsqueeze(0)
with torch.no_grad(): prediction = model(image_tensor)
  • Importer le modèle Mask R-CNN
  • Charger le modèle préentraîné
  • Charger l'image test et la convertir en tenseur

photo d'un chat assis près d'un portable

  • Passer le tenseur d'image au modèle
Deep Learning pour les images avec PyTorch

Sorties du modèle

  • Étiquettes

    prediction[0]["labels"]
    
    tensor([
        17, 73, 76, 73, 67, 42, 63, 84,73, 65, 
        17, 73, 73, 73, 84, 72, 76, 76,17, 15
    ])
    
  • Noms de classes

    print(class_names[17], class_names[73])
    
    cat laptop
    
  • Probabilités de classe

    prediction[0]["scores"]
    
    tensor([
        0.9981, 0.9672, 0.9061, 0.6893, 0.3729, 
        ..., 
        0.0745, 0.0705, 0.0623, 0.0610, 0.0508
    ])
    
  • Masques

    prediction[0]["masks"]
    
    tensor([[[[0., 0., 0.,  ..., 0., 0., 0.],
              ...]]]])
    
Deep Learning pour les images avec PyTorch

Masques souples

  • Valeurs uniques du masque

    prediction[0]["masks"].unique()
    
    tensor([0.0000e+00, 5.9713e-08, ..., 
            9.9989e-01, 9.9990e-01])
    
  • Masques de Mask R-CNN :

    • Valeurs entre 0 et 1
    • Représentent la confiance du modèle que chaque pixel appartient à l'objet
    • Plus nuancés que des masques binaires
    • Peuvent être binarisés par seuillage au besoin
Deep Learning pour les images avec PyTorch

Affichage des masques souples

masks = prediction[0]["masks"]
labels = prediction[0]["labels"]


for i in range(2): plt.imshow(image)
plt.imshow( masks[i, 0], cmap="jet", alpha=0.5, )
plt.title( f"Object: {class_names[labels[i]]}" ) plt.show()
  • Extraire les masques et étiquettes de la prédiction
  • Parcourir les deux premiers objets et tracer l'image originale
  • Pour chaque objet, tracer le masque semi-transparent
  • Ajouter un titre et afficher
Deep Learning pour les images avec PyTorch

Affichage des masques souples

Masques de segmentation d'instances superposés aux images

Deep Learning pour les images avec PyTorch

Passons à la pratique !

Deep Learning pour les images avec PyTorch

Preparing Video For Download...