Introduction à la segmentation d'images

Deep Learning pour les images avec PyTorch

Michal Oleszak

Machine Learning Engineer

Segmentation d'images

  • La segmentation d'image découpe l'image en segments au niveau des pixels
  • Chaque pixel de l'image est affecté à un segment
  • Trois types de segmentation :
    • Segmentation sémantique
    • Segmentation d'instances
    • Segmentation panoptique
Deep Learning pour les images avec PyTorch

Segmentation sémantique

segmentation sémantique

  • Chaque pixel est classé dans une catégorie
  • Tous les pixels d'une même catégorie sont traités de la même façon
Deep Learning pour les images avec PyTorch

Segmentation d'instances

segmentation d'instances

  • Distingue les différentes occurrences d'une même catégorie
  • L'arrière-plan est souvent non segmenté
Deep Learning pour les images avec PyTorch

Segmentation panoptique

segmentation panoptique

  • Combine les segmentations sémantique et d'instances
  • Assigne une étiquette unique à chaque occurrence d'objet
  • Classe l'arrière-plan au niveau des pixels
Deep Learning pour les images avec PyTorch

Annotations des données

image = Image.open("images/British_Shorthair_36.jpg")
mask = Image.open("annots/British_Shorthair_36.png")


transform = transforms.Compose([ transforms.ToTensor() ]) image_tensor = transform(image) mask_tensor = transform(mask)
print(f"""Image shape: {image_tensor.shape} Mask shape: {mask_tensor.shape}""")
    Image shape: torch.Size([3, 333, 500])
    Mask shape: torch.Size([1, 333, 500])

photographie d'un British Shorthair

Deep Learning pour les images avec PyTorch

Comprendre le masque

  • Documentation de l'ensemble de données :

    Annotations de pixels : 1 : premier plan 2 : arrière-plan 3 : non classé

  • Valeurs uniques du masque :

    mask_tensor.unique()
    
    tensor([0.0039, 0.0078, 0.0118])
    
  • Les valeurs de pixels sont divisées par 255 :

    • 1 / 255 = 0.0039 - objet
    • 2 / 255 = 0.0078 - arrière-plan
    • 3 / 255 = 0.0118 - non classé
Deep Learning pour les images avec PyTorch

Créer un masque binaire

binary_mask = torch.where(
    mask_tensor == 1/255, 
    torch.tensor(1.0),
    torch.tensor(0.0),
)


to_pil_image = transforms.ToPILImage() mask = to_pil_image(binary_mask)
plt.imshow(mask)

masque de segmentation

  • torch.where() :
    • Condition
    • Valeur si la condition est vraie
    • Valeur sinon
  • Transformer le masque en image PIL
  • Afficher l'image du masque
Deep Learning pour les images avec PyTorch

Segmenter l'objet

object_tensor = image_tensor * binary_mask


to_pil_image = transforms.ToPILImage() object_image = to_pil_image(object_tensor)
plt.imshow(object_image)

image segmentée

  • Multiplier l'image par le masque binaire
  • Convertir l'objet en image PIL
  • Afficher l'image de l'objet
Deep Learning pour les images avec PyTorch

Passons à la pratique !

Deep Learning pour les images avec PyTorch

Preparing Video For Download...