Objectdetectie met R-CNN

Deep Learning voor afbeeldingen met PyTorch

Michal Oleszak

Machine Learning Engineer

Region-based CNN-familie: R-CNN

R-CNN-familie: R-CNN, Fast-CNN, Faster CNN

R-CNN

  • Module 1: generatie van regiovoorstellen
1 Citation: Jason Brownlee. 2019. Deep Learning for Computer Vision.
Deep Learning voor afbeeldingen met PyTorch

Region-based CNN-familie: R-CNN

R-CNN-familie: R-CNN, Fast-CNN, Faster CNN

R-CNN

  • Module 1: generatie van regiovoorstellen
  • Module 2: feature-extractie (convolutielagen)
1 Citation: Jason Brownlee. 2019. Deep Learning for Computer Vision.
Deep Learning voor afbeeldingen met PyTorch

Region-based CNN-familie: R-CNN

R-CNN-familie: R-CNN, Fast-CNN, Faster CNN

R-CNN

  • Module 1: generatie van regiovoorstellen
  • Module 2: feature-extractie (convolutielagen)
  • Module 3: klasse- en bbox-voorspelling
1 Citation: Jason Brownlee. 2019. Deep Learning for Computer Vision.
Deep Learning voor afbeeldingen met PyTorch

R-CNN: backbone

  • Convolutielagen: voorgetrainde modellen
    • Backbone: de kern-CNN voor feature-extractie

  backbone

  • Convolutie- & poolinglagen
  • Extraheert features voor regio-voorstellen en objectdetectie
Deep Learning voor afbeeldingen met PyTorch

R-CNN: backbone met PyTorch

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


vgg = vgg16(weights=VGG16_Weights.DEFAULT)

vgg model

Deep Learning voor afbeeldingen met PyTorch

R-CNN: backbone met PyTorch

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


vgg = vgg16(weights=VGG16_Weights.DEFAULT)

vgg model features

  • .features: alleen convolutielagen
Deep Learning voor afbeeldingen met PyTorch

R-CNN: backbone met PyTorch

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


vgg = vgg16(weights=VGG16_Weights.DEFAULT)

vgg model

  • .features: alleen convolutielagen
  • .children(): alle lagen uit blok
Deep Learning voor afbeeldingen met PyTorch

R-CNN: backbone met 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()): alle sublagen in een Sequential-blok als lijst
    • *: pakt de elementen uit de lijst uit

vgg model

  • .features: alleen convolutielagen
  • .children(): alle lagen uit blok
Deep Learning voor afbeeldingen met PyTorch

R-CNN: classifier-laag

  • Haal de outputgrootte van de backbone op
input_dimension = nn.Sequential(*list(
    vgg_backbone.classifier.children())
)[0].in_features
  • Maak een nieuwe classifier
classifier = nn.Sequential(
    nn.Linear(input_dimension, 512),
    nn.ReLU(),
    nn.Linear(512, num_classes),
)
Deep Learning voor afbeeldingen met PyTorch

R-CNN: box-regressorlaag

  • Staat boven op de backbone
  • 4 outputs voor de 4 boxcoördinaten
box_regressor = nn.Sequential(
    nn.Linear(input_dimension, 32),
    nn.ReLU(),
    nn.Linear(32, 4),
)
Deep Learning voor afbeeldingen met PyTorch

Alles samenvoegen: objectdetectiemodel

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 voor afbeeldingen met PyTorch

Alles samenvoegen: objectdetectiemodel

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 voor afbeeldingen met PyTorch

Objectherkenning uitvoeren

  1. Laad en transformeer de afbeelding
  2. unsqueeze() om de batch-dimensie toe te voegen
  3. Geef de tensor door aan het model
  4. Voer Non-Max Suppression (nms()) uit op de output
  5. draw_bounding_boxes() boven op de afbeelding
Deep Learning voor afbeeldingen met PyTorch

Laten we oefenen!

Deep Learning voor afbeeldingen met PyTorch

Preparing Video For Download...