Objektdetektering med R-CNN

Djupinlärning för bilder med PyTorch

Michal Oleszak

Machine Learning Engineer

Regionbaserad CNN-familj: R-CNN

R-CNN-familjen: R-CNN, Fast-CNN, Faster CNN

R-CNN

  • Modul 1: generering av regionförslag
1 Källa: Jason Brownlee. 2019. Deep Learning for Computer Vision.
Djupinlärning för bilder med PyTorch

Regionbaserad CNN-familj: R-CNN

R-CNN-familjen: R-CNN, Fast-CNN, Faster CNN

R-CNN

  • Modul 1: generering av regionförslag
  • Modul 2: särdragsextraktion (konvolutionslager)
1 Källa: Jason Brownlee. 2019. Deep Learning for Computer Vision.
Djupinlärning för bilder med PyTorch

Regionbaserad CNN-familj: R-CNN

R-CNN-familjen: R-CNN, Fast-CNN, Faster CNN

R-CNN

  • Modul 1: generering av regionförslag
  • Modul 2: särdragsextraktion (konvolutionslager)
  • Modul 3: klass- och begränsningsruteprediktering
1 Källa: Jason Brownlee. 2019. Deep Learning for Computer Vision.
Djupinlärning för bilder med PyTorch

R-CNN: backbone

  • Konvolutionslager: förtränade modeller
    • Backbone: den centrala CNN-arkitekturen för särdragsextraktion

  backbone

  • Konvolutions- och poolinglager
  • Extraherar särdrag för regionförslag och objektdetektering
Djupinlärning för bilder med PyTorch

R-CNN: backbone med PyTorch

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


vgg = vgg16(weights=VGG16_Weights.DEFAULT)

vgg-modell

Djupinlärning för bilder med PyTorch

R-CNN: backbone med PyTorch

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


vgg = vgg16(weights=VGG16_Weights.DEFAULT)

vgg-modellens särdrag

  • .features: endast konvolutionslager
Djupinlärning för bilder med PyTorch

R-CNN: backbone med PyTorch

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


vgg = vgg16(weights=VGG16_Weights.DEFAULT)

vgg-modell

  • .features: endast konvolutionslager
  • .children(): alla lager från blocket
Djupinlärning för bilder med PyTorch

R-CNN: backbone med 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()): alla underlager placeras i ett sekventiellt block som en lista
    • *: packar upp elementen från listan

vgg-modell

  • .features: endast konvolutionslager
  • .children(): alla lager från blocket
Djupinlärning för bilder med PyTorch

R-CNN: klassificeringslager

  • Extrahera backbonens utdatastorlek
input_dimension = nn.Sequential(*list(
    vgg_backbone.classifier.children())
)[0].in_features
  • Skapa en ny klassificerare
classifier = nn.Sequential(
    nn.Linear(input_dimension, 512),
    nn.ReLU(),
    nn.Linear(512, num_classes),
)
Djupinlärning för bilder med PyTorch

R-CNN: lager för rutregression

  • Placeras ovanpå backbone
  • 4 utdata för de 4 rutekoordinaterna
box_regressor = nn.Sequential(
    nn.Linear(input_dimension, 32),
    nn.ReLU(),
    nn.Linear(32, 4),
)
Djupinlärning för bilder med PyTorch

Sätt ihop allt: objektdetekteringsmodell

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), )
Djupinlärning för bilder med PyTorch

Sätt ihop allt: objektdetekteringsmodell

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

    def forward(self, x):

features = self.backbone(x)
bboxes = self.regressor(features) classes = self.classifier(features) return bboxes, classes
Djupinlärning för bilder med PyTorch

Kör objektigenkänning

  1. Ladda och transformera bilden
  2. Använd unsqueeze() för att lägga till batchdimensionen
  3. Skicka bildtensorn till modellen
  4. Kör Non-Max Suppression (nms()) på modellens utdata
  5. Rita draw_bounding_boxes() ovanpå bilden
Djupinlärning för bilder med PyTorch

Nu kör vi en övning!

Djupinlärning för bilder med PyTorch

Preparing Video For Download...