Detectarea obiectelor cu R-CNN

Deep Learning pentru imagini cu PyTorch

Michal Oleszak

Machine Learning Engineer

Familia CNN bazată pe regiuni: R-CNN

Familia R-CNN: R-CNN, Fast-CNN, Faster CNN

R-CNN

  • Modulul 1: generarea propunerilor de regiuni
1 Citation: Jason Brownlee. 2019. Deep Learning for Computer Vision.
Deep Learning pentru imagini cu PyTorch

Familia CNN bazată pe regiuni: R-CNN

Familia R-CNN: R-CNN, Fast-CNN, Faster CNN

R-CNN

  • Modulul 1: generarea propunerilor de regiuni
  • Modulul 2: extragerea caracteristicilor (straturi convoluționale)
1 Citation: Jason Brownlee. 2019. Deep Learning for Computer Vision.
Deep Learning pentru imagini cu PyTorch

Familia CNN bazată pe regiuni: R-CNN

Familia R-CNN: R-CNN, Fast-CNN, Faster CNN

R-CNN

  • Modulul 1: generarea propunerilor de regiuni
  • Modulul 2: extragerea caracteristicilor (straturi convoluționale)
  • Modulul 3: predicția clasei și a cadrului de delimitare
1 Citation: Jason Brownlee. 2019. Deep Learning for Computer Vision.
Deep Learning pentru imagini cu PyTorch

R-CNN: backbone

  • Straturi convoluționale: modele pre-antrenate
    • Backbone: arhitectura CNN principală pentru extragerea caracteristicilor

  backbone

  • Straturi convoluționale și de pooling
  • Extrag caracteristici pentru propuneri de regiuni și detectare obiecte
Deep Learning pentru imagini cu PyTorch

R-CNN: backbone cu PyTorch

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


vgg = vgg16(weights=VGG16_Weights.DEFAULT)

model vgg

Deep Learning pentru imagini cu PyTorch

R-CNN: backbone cu PyTorch

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


vgg = vgg16(weights=VGG16_Weights.DEFAULT)

caracteristici model vgg

  • .features: doar straturi convoluționale
Deep Learning pentru imagini cu PyTorch

R-CNN: backbone cu PyTorch

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


vgg = vgg16(weights=VGG16_Weights.DEFAULT)

model vgg

  • .features: doar straturi convoluționale
  • .children(): toate straturile din bloc
Deep Learning pentru imagini cu PyTorch

R-CNN: backbone cu 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()): toate sub-straturile sunt plasate într-un bloc secvențial ca listă
    • *: despachează elementele din listă

model vgg

  • .features: doar straturi convoluționale
  • .children(): toate straturile din bloc
Deep Learning pentru imagini cu PyTorch

R-CNN: stratul clasificator

  • Extragerea dimensiunii de ieșire a backbone-ului
input_dimension = nn.Sequential(*list(
    vgg_backbone.classifier.children())
)[0].in_features
  • Crearea unui clasificator nou
classifier = nn.Sequential(
    nn.Linear(input_dimension, 512),
    nn.ReLU(),
    nn.Linear(512, num_classes),
)
Deep Learning pentru imagini cu PyTorch

R-CNN: stratul de regresie a cadrelor

  • Plasat deasupra backbone-ului
  • 4 ieșiri pentru cele 4 coordonate ale cadrului
box_regressor = nn.Sequential(
    nn.Linear(input_dimension, 32),
    nn.ReLU(),
    nn.Linear(32, 4),
)
Deep Learning pentru imagini cu PyTorch

Asamblare completă: modelul de detectare a obiectelor

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 pentru imagini cu PyTorch

Asamblare completă: modelul de detectare a obiectelor

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 pentru imagini cu PyTorch

Rularea recunoașterii obiectelor

  1. Încărcarea și transformarea imaginii
  2. unsqueeze() pentru a adăuga dimensiunea batch
  3. Transmiterea tensorului imaginii modelului
  4. Aplicarea Non-Max Suppression (nms()) asupra ieșirii modelului
  5. draw_bounding_boxes() peste imagine
Deep Learning pentru imagini cu PyTorch

Să exersăm!

Deep Learning pentru imagini cu PyTorch

Preparing Video For Download...