Project Oxygen & Ideo-LabIDEO LAB Dashboard 2026

🎭 Mask R-CNN – Le Guide Ultime

Deep Dive : Segmentation d'Instance, Faster R-CNN (Base), 🚀 RoIAlign (Innovation), FPN & ImplĂ©mentation.

1.1 Facile

1. C'est quoi Mask R-CNN ?

Segmentation d'Instance (2017). Identifie objet (Classe + BBox + Masque).

Instance Segmentation Kaiming He
1.2 Moyen

2. Philosophie : Two-Stage

1: Proposer (RPN), 2: Classifier/Masquer. Précis (SOTA) mais "lent" (vs YOLO).

Two-Stage One-Stage
1.3 Moyen

3. 📜 GĂ©nĂ©alogie (R-CNN)

L'évolution : R-CNN (Lent) -> Fast R-CNN -> Faster R-CNN (Base) -> Mask R-CNN.

R-CNN Faster R-CNN
1.4 Avancé

4. 📈 Architecture (Diagramme)

Faster R-CNN + "Plugin" (TĂȘte de Masque). (Backbone -> RPN -> RoIAlign -> 3 TĂȘtes).

Architecture Diagramme
1.5 Avancé

5. Étape 1 : Backbone & RPN

Backbone (ResNet+FPN) + RPN (Region Proposal Network) qui "propose" des RoIs.

Backbone RPN
1.6 Avancé

6. 🚀 L'Innovation : RoIAlign

La "clé" du papier. Remplace RoIPool (quantization) par Interpolation Bilinéaire.

RoIAlign RoIPool
2.1 Avancé

7. Étape 2 : Les "TĂȘtes" (Head)

3 "plugins" parallĂšles : Classe (FC), BBox (FC), Masque (FCN/ConvTranspose).

Mask Head FCN
2.2 Avancé

8. Loss (Multi-TĂąches)

L_total = L_rpn + L_cls + L_box + L_mask (BCE Loss pour le masque).

Multi-Task Loss BCE Loss
2.3 Avancé

9. "Plugin": Implémentation Keras

Le repo "historique" Matterport (Keras/TF1). model.detect(), model.train().

Keras Matterport
3.1 Moyen

10. "Plugin": Implémentation PyTorch

torchvision.models.detection.
maskrcnn_resnet50_fpn()
.

PyTorch torchvision
3.2 Avancé

11. 📊 vs. U-Net (Addon)

Sémantique (U-Net) vs Instance (Mask R-CNN). "Chat-1, Chat-2" vs "tous les pixels Chat".

U-Net Instance
3.3 Moyen

12. Projets & Liens

Benchmark COCO, Imagerie Médicale, Robotique (Grasping). Liens (Papier, ...).

Projects COCO
1.1 C'est quoi Mask R-CNN ? (Segmentation d'Instance)

Mask R-CNN (Mask Region-based Convolutional Neural Network) est une architecture d'IA (publiée en 2017 par Kaiming He et al. chez Facebook AI Research - FAIR) qui a défini l'état de l'art (SOTA) en Segmentation d'Instance.

La Hiérarchie des Tùches (Qu'est-ce que "Instance" ?)

Il faut comprendre la différence entre les 3 tùches de segmentation :

TĂącheQuestion (Ce que fait l'IA)Exemple (Sortie)Architecture (Ex)
Sémantique"Quels pixels sont 'Chat' ?"Un seul masque "Chat" (tous les chats sont fusionnés).U-Net, FCN
DĂ©tection"OĂč sont les chats ?"BBox-1 (Chat), BBox-2 (Chat).YOLO, Faster R-CNN
Instance"OĂč est Chat-1 ? OĂč est Chat-2 ?"BBox-1 + Masque-1 (Chat-1), BBox-2 + Masque-2 (Chat-2).Mask R-CNN

En résumé : Mask R-CNN ne se contente pas de trouver les objets (Détection), il *dessine* le contour de *chaque* instance d'objet (Segmentation).

1.2 Philosophie : Two-Stage (Précision > Vitesse)

En détection/segmentation, il y a deux "philosophies" (frameworks) :

ApprocheDescriptionExemplesAvantageInconvénient
One-Stage (En une Ă©tape)"Regarde" l'image une fois et prĂ©dit les BBox/Classes en mĂȘme temps (sur une grille).YOLO, SSDExtrĂȘmement Rapide (Temps-rĂ©el, > 30 FPS).Moins prĂ©cis (surtout sur petits objets).
Two-Stage (En deux Ă©tapes)Étape 1 (Proposal) : Un rĂ©seau (RPN) "propose" des RĂ©gions d'IntĂ©rĂȘt (RoI).
Étape 2 (Classify) : Un 2e rĂ©seau analyse *chaque* RoI (rĂ©gion).
R-CNN, Fast R-CNN, Faster R-CNN, Mask R-CNN.ExtrĂȘmement PrĂ©cis (SOTA mAP).Lent (ex: ~5-10 FPS).

Mask R-CNN est le "roi" de l'approche "Two-Stage". Sa philosophie est : La précision (qualité) prime sur la vitesse (latence). On l'utilise quand on a besoin des *meilleurs* masques possibles, pas forcément en temps-réel.

1.3 📜 GĂ©nĂ©alogie (La Famille R-CNN)

Pour comprendre Mask R-CNN (2017), il faut comprendre son "pÚre" : Faster R-CNN (2015). C'est une évolution de "plugins" successifs.

ModĂšleDateInnovation (Le "Plugin")ProblĂšme (Lenteur)
R-CNN2014Combine "Selective Search" + CNN (AlexNet).ExtrĂȘmement lent. Lance le CNN sur 2000 rĂ©gions (sur CPU !).
Fast R-CNN2015Lance le CNN *une seule fois* (sur l'image).
Ajout du "plugin" RoIPool pour extraire les features.
Rapide, mais le "Selective Search" (qui propose les régions) est *toujours* sur CPU (le goulot d'étranglement).
Faster R-CNN2015LA RÉVOLUTION.
Remplace "Selective Search" (CPU) par un "plugin" RPN (Region Proposal Network).
Le RPN est un *mini-réseau* (GPU) qui *apprend* à trouver les régions.
(Rapide). Le RoIPool (voir 1.6) "arrondit" (quantize) les pixels, ce qui est mauvais pour les masques.
Mask R-CNN20171. Ajoute un 3Ăšme "plugin" (TĂȘte de Masque).
2. Remplace RoIPool par RoIAlign.
(Le SOTA de 2017).

Conclusion : Mask R-CNN = Faster R-CNN + Mask Head + RoIAlign

1.4 📈 Architecture (Diagramme)

L'architecture de Mask R-CNN est "Two-Stage" (deux étapes) et "Multi-Task" (multi-tùches).

Diagramme (Conceptuel)
(Input: Image)
     |
     ▌
+--------------------------------+
| 1. Backbone (Feature Extractor)|
| (ex: ResNet-50 + FPN)          |
+--------------------------------+
     |
     | (Feature Maps Multi-échelles)
     |
     +-----------> (Étape 1) -------------------+
     |                                          |
     ▌                                          |
+-----------------+                          (Features)
| 2. RPN          |                             |
| (Propose Régions)                            |
+-----------------+                             |
     |                                          |
     | (Propositions de RoI [BBox])             |
     |                                          |
     +-----------> (Étape 2) <------------------+
                   |
                   ▌
+--------------------------------+
| 3. RoIAlign (Plugin)           | (Alignement précis des features)
| (Combine RoIs + Features)      |
+--------------------------------+
                   | (Features "croppées" et alignées)
                   |
     +-------------+-------------+
     |             |             |
     ▌             ▌             ▌
+----------+  +----------+  +-------------+
| 4a. TĂȘte |  | 4b. TĂȘte |  | 4c. TĂȘte    |
| (Classif.)  | (BBox Reg.) | (MASK (FCN))|
+----------+  +----------+  +-------------+
     |             |             |
     ▌             ▌             ▌
(Classe)       (BBox)        (Masque)
1.5 Étape 1 : Backbone (ResNet+FPN) & RPN
1. Le Backbone (Plugin) : ResNet + FPN

L'Encoder. Mask R-CNN utilise un "plugin" (backbone) standard pour extraire les features. Le papier originel utilisait ResNet-50 ou ResNet-101 (voir 1.4, ResNet).

Il utilise aussi un "plugin" FPN (Feature Pyramid Network) (le mĂȘme que YOLOv3, voir 1.4, YOLOv3) pour obtenir des features *multi-Ă©chelles* (bonnes pour les petits *et* les grands objets).

2. Le RPN (Region Proposal Network)

C'est le "plugin" hĂ©ritĂ© de Faster R-CNN. Le RPN est un *mini-rĂ©seau* qui "glisse" sur les *feature maps* (du FPN) et "propose" ~1000 "RĂ©gions d'IntĂ©rĂȘt" (RoI) qui ont une forte probabilitĂ© de contenir *un* objet (peu importe lequel).

Sortie du RPN : Une liste de "boĂźtes" (RoIs) candidates.

1.6 🚀 L'Innovation : RoIAlign (Le CƓur du Papier)

C'est la *vraie* innovation de Mask R-CNN. C'est le "plugin" qui a rendu la segmentation d'instance (précise) possible.

Le ProblĂšme : RoIPool (de Faster R-CNN)

RoIPool (l'ancien) prenait les RoIs (régions, ex: [10.5px, 20.2px, 30.8px, 40.1px]) et les "quantifiait" (arrondissait) à l'entier le plus proche (ex: [10, 20, 31, 40]) pour les "cropper" (découper) dans la feature map.
Conséquence : Un désalignement (misalignment). Pour une BBox, ce n'est pas grave. Pour un *masque* (pixel-level), c'est *désastreux*.

La Solution : RoIAlign

RoIAlign (le "nouveau" plugin) ne "quantifie" (n'arrondit) *jamais*.
Il garde les coordonnées *flottantes* (ex: 10.5, 20.2) et utilise l'Interpolation Bilinéaire (Bilinear Interpolation) pour "sampler" (échantillonner) les pixels de la feature map à ces positions exactes (sub-pixel).

Résultat : Les "features" extraites sont *parfaitement* alignées avec l'image d'entrée, permettant une prédiction de masque au pixel prÚs.

2.1 Étape 2 : Les "TĂȘtes" (Classification, BBox, Masque)

AprÚs RoIAlign, on obtient un "pool" de features (ex: 14x14x256) pour *chaque* RoI proposée.
Mask R-CNN envoie ces features Ă  3 "tĂȘtes" (heads) "plugins" en parallĂšle :

TĂȘte (Plugin)ArchitectureSortie
1. TĂȘte de ClassificationCouches Fully Connected (FC)Classe (ex: "chat", "chien") + Score
2. TĂȘte de BBox (RĂ©gression)Couches Fully Connected (FC)BBox raffinĂ©e (dx, dy, dw, dh)
3. TĂȘte de Masque (L'INNOVATION)FCN (Fully Convolutional Network)Un Masque (ex: 28x28) binaire (par classe).
La TĂȘte de Masque (Mask Head)

C'est le "plugin" M de Mask R-CNN.
C'est un "mini U-Net" (un FCN) qui prend les features (ex: 14x14x256) et utilise des ConvTranspose2d (Up-sampling) pour les "remonter" en un masque (ex: 28x28x80) (un masque de 28x28 pour chacune des 80 classes).

2.2 Loss (Multi-TĂąches)

Mask R-CNN est un modĂšle "Multi-Task" (Multi-TĂąches). Il n'apprend pas *une* chose, il apprend *plusieurs* choses en mĂȘme temps. La "Loss" (fonction de coĂ»t) est une *somme* de toutes les "losses" (erreurs) de chaque "plugin" (tĂȘte).

Loss de l'Étape 1 (RPN)
  • L_rpn_cls (Loss Classe RPN) : Cross-Entropy. Le RPN a-t-il bien classĂ© "Objet" vs "Fond" ?
  • L_rpn_box (Loss BBox RPN) : L1 Loss. Le RPN a-t-il bien prĂ©dit la BBox de l'objet ?
Loss de l'Étape 2 (TĂȘtes)
  • L_cls (Loss Classe TĂȘte) : Cross-Entropy. La tĂȘte de classification a-t-elle bien classĂ© "Chat" vs "Chien" ?
  • L_box (Loss BBox TĂȘte) : L1 Loss. La tĂȘte BBox a-t-elle bien *raffinĂ©* la BBox ?
  • L_mask (Loss Masque TĂȘte) : Binary Cross-Entropy (BCE). La tĂȘte de masque a-t-elle bien prĂ©dit le masque (pixel par pixel) ?
Loss Totale
L_total = L_rpn_cls + L_rpn_box + L_cls + L_box + L_mask

Le réseau est entraßné "de bout en bout" (End-to-End) en optimisant cette "loss" totale (via backpropagation).

2.3 "Plugin": Implémentation Keras (Matterport)

L'implémentation "historique" et la plus célÚbre de Mask R-CNN (en dehors de celle de Facebook, Caffe2) est le "plugin" (repository) de Matterport.
Il est écrit en Python 3, Keras (TensorFlow 1.x). (Attention : Il est *trÚs* difficile à faire tourner avec TF 2.x+).

Inférence (Matterport)
import mrcnn.model as modellib
from mrcnn import visualize

# 1. Charger la config (mode inférence)
class InferenceConfig(coco.CocoConfig):
    GPU_COUNT = 1
    IMAGES_PER_GPU = 1
config = InferenceConfig()

# 2. Créer le modÚle (en mode inférence)
model = modellib.MaskRCNN(mode="inference", 
                        config=config,
                        model_dir="./logs")

# 3. Charger les poids (pré-entraßnés sur COCO)
model.load_weights("mask_rcnn_coco.h5", by_name=True)

# 4. Inférence (Lancer la détection)
results = model.detect([image], verbose=1)

# 5. Parser les résultats (trÚs simple)
r = results[0]
# r['rois'] -> (N, 4) BBoxes
# r['masks'] -> (H, W, N) Masques
# r['class_ids'] -> (N,) IDs
# r['scores'] -> (N,) Confiance

# 6. Visualiser (plugin 'visualize')
visualize.display_instances(image, r['rois'], r['masks'], 
                            r['class_ids'], class_names)
3.1 "Plugin": Implémentation PyTorch (Torchvision)

Aujourd'hui, l'implémentation "plugin" la plus simple et la plus maintenue est celle de Torchvision (l'addon "vision" de PyTorch).

Exemple (Inférence PyTorch)
import torch
import torchvision
from torchvision.models.detection import maskrcnn_resnet50_fpn
from PIL import Image
from torchvision import transforms as T

# 1. Charger le modÚle pré-entraßné
model = maskrcnn_resnet50_fpn(pretrained=True)
model.eval() # Mode Inférence

# 2. Transforms (simples)
transform = T.Compose([T.ToTensor()])

# 3. Charger l'image
img = Image.open("mon_image.jpg")
img_tensor = transform(img)

# 4. Inférence
with torch.no_grad():
    # Note: [img_tensor] (batch de 1)
    prediction = model([img_tensor])

# 5. Parser les résultats (prediction[0])
# (Sont déjà des Tensors Torch)
boxes = prediction[0]['boxes']
labels = prediction[0]['labels']
scores = prediction[0]['scores']
masks = prediction[0]['masks']
3.2 📊 U-Net vs Mask R-CNN (Le Choix du Plugin)

U-Net et Mask R-CNN sont deux "plugins" (architectures) de segmentation, mais ils ne font pas la mĂȘme chose.

CritÚreU-Net (Sémantique)Mask R-CNN (Instance)
TùcheSegmentation Sémantique.Segmentation d'Instance.
Sortie (ex: 2 chats)1 masque. (Tous les pixels "Chat" sont 1, le reste 0).2 masques. (Masque-1 (Chat-1), Masque-2 (Chat-2)).
ArchitectureEncoder-Decoder (FCN) symĂ©trique.Two-Stage (RPN + TĂȘtes) asymĂ©trique.
BackboneEntraßné de zéro (généralement).Utilise un "plugin" (Backbone) pré-entraßné (ResNet).
Cas d'usageQuand les instances ne comptent pas (ex: "Route", "Ciel", "Tumeur").Quand les instances comptent (ex: "Voiture-1", "Voiture-2", "Cellule-1").
3.3 Projets & Liens
Exemples de Projets
  • Analyse MĂ©dicale : Isoler et compter *chaque* cellule ou noyau dans une image de microscopie (oĂč U-Net fusionnerait tout).
  • Robotique (Grasping) : Permet Ă  un bras robotisĂ© de voir *chaque* objet (ex: "Vis-1", "Vis-2") sur une table, de connaĂźtre sa forme (masque) et de le saisir.
  • Analyse Satellite : DĂ©nombrer et mesurer la surface de *chaque* bĂątiment (Instance) dans une ville (vs U-Net qui donnerait juste un masque "bĂątiment").