Détection d'objets avec R-CNN

Deep Learning pour les images avec PyTorch

Michal Oleszak

Machine Learning Engineer

Famille de CNN régionaux : R-CNN

Famille R-CNN : R-CNN, Fast R-CNN, Faster R-CNN

R-CNN

  • Module 1 : génération de propositions de régions
1 Citation : Jason Brownlee. 2019. Deep Learning for Computer Vision.
Deep Learning pour les images avec PyTorch

Famille de CNN régionaux : R-CNN

Famille R-CNN : R-CNN, Fast R-CNN, Faster R-CNN

R-CNN

  • Module 1 : génération de propositions de régions
  • Module 2 : extraction de caractéristiques (couches convolutionnelles)
1 Citation : Jason Brownlee. 2019. Deep Learning for Computer Vision.
Deep Learning pour les images avec PyTorch

Famille de CNN régionaux : R-CNN

Famille R-CNN : R-CNN, Fast R-CNN, Faster R-CNN

R-CNN

  • Module 1 : génération de propositions de régions
  • Module 2 : extraction de caractéristiques (couches convolutionnelles)
  • Module 3 : prédiction des classes et des boîtes englobantes
1 Citation : Jason Brownlee. 2019. Deep Learning for Computer Vision.
Deep Learning pour les images avec PyTorch

R-CNN : backbone

  • Couches convolutionnelles : modèles préentraînés
    • Backbone : l'architecture CNN de base chargée d'extraire les caractéristiques

  backbone

  • Couches de convolution et de sous-échantillonnage
  • Extraire des caractéristiques pour les propositions de régions et la détection d'objets
Deep Learning pour les images avec PyTorch

R-CNN : backbone avec PyTorch

import torch.nn as nn
from torchvision.models import vgg16,
    VGG16_Weights


vgg = vgg16(weights=VGG16_Weights.DEFAULT)

modèle vgg

Deep Learning pour les images avec PyTorch

R-CNN : backbone avec PyTorch

import torch.nn as nn
from torchvision.models import vgg16,
    VGG16_Weights


vgg = vgg16(weights=VGG16_Weights.DEFAULT)

caractéristiques du modèle vgg

  • .features : seulement les couches convolutionnelles
Deep Learning pour les images avec PyTorch

R-CNN : backbone avec PyTorch

import torch.nn as nn
from torchvision.models import vgg16,
    VGG16_Weights


vgg = vgg16(weights=VGG16_Weights.DEFAULT)

modèle vgg

  • .features : seulement les couches convolutionnelles
  • .children() : toutes les couches du bloc
Deep Learning pour les images avec PyTorch

R-CNN : backbone avec PyTorch

import torch.nn as nn
from torchvision.models import vgg16,
    VGG16_Weights


vgg = vgg16(weights=VGG16_Weights.DEFAULT)
backbone = nn.Sequential( *list(vgg.features.children()) )
  • nn.Sequential(*list()) : place toutes les sous-couches dans un bloc séquentiel sous forme de liste
    • * : décompresse les éléments de la liste

modèle vgg

  • .features : seulement les couches convolutionnelles
  • .children() : toutes les couches du bloc
Deep Learning pour les images avec PyTorch

R-CNN : couche de classification

  • Extraire la taille de sortie du backbone
input_dimension = nn.Sequential(*list(
    vgg_backbone.classifier.children())
)[0].in_features
  • Créer un nouveau classificateur
classifier = nn.Sequential(
    nn.Linear(input_dimension, 512),
    nn.ReLU(),
    nn.Linear(512, num_classes),
)
Deep Learning pour les images avec PyTorch

R-CNN : couche de régression de boîte

  • Au-dessus du backbone
  • 4 sorties pour les 4 coordonnées de la boîte
box_regressor = nn.Sequential(
    nn.Linear(input_dimension, 32),
    nn.ReLU(),
    nn.Linear(32, 4),
)
Deep Learning pour les images avec PyTorch

Assembler le tout : modèle de détection d'objets

class ObjectDetectorCNN(nn.Module):
    def __init__(self):
        super(ObjectDetectorCNN, self).__init__()

vgg = vgg16(weights=VGG16_Weights.DEFAULT) self.backbone = nn.Sequential(*list(vgg.features.children()))
input_features = nn.Sequential(*list(vgg.classifier.children()))[0].in_features
self.classifier = nn.Sequential( nn.Linear(input_features, 512), nn.ReLU(), nn.Linear(512, 2), )
self.box_regressor = nn.Sequential( nn.Linear(input_features, 32), nn.ReLU(), nn.Linear(32, 4), )
Deep Learning pour les images avec PyTorch

Assembler le tout : modèle de détection d'objets

class ObjectDetector(nn.Module):
    (...)

    def forward(self, x):

features = self.backbone(x)
bboxes = self.regressor(features) classes = self.classifier(features) return bboxes, classes
Deep Learning pour les images avec PyTorch

Exécuter la reconnaissance d'objets

  1. Charger et transformer l'image
  2. Appliquer unsqueeze() pour ajouter la dimension lot
  3. Passer le tenseur d'image au modèle
  4. Exécuter la suppression non maximale (nms()) sur la sortie du modèle
  5. Appeler draw_bounding_boxes() sur l'image
Deep Learning pour les images avec PyTorch

Passons à la pratique !

Deep Learning pour les images avec PyTorch

Preparing Video For Download...