Detekce objektů pomocí R-CNN

Deep Learning pro obrázky s PyTorchem

Michal Oleszak

Machine Learning Engineer

Rodina CNN na bázi oblastí: R-CNN

Rodina R-CNN: R-CNN, Fast-CNN, Faster CNN

R-CNN

  • Modul 1: generování návrhů oblastí
1 Citation: Jason Brownlee. 2019. Deep Learning for Computer Vision.
Deep Learning pro obrázky s PyTorchem

Rodina CNN na bázi oblastí: R-CNN

Rodina R-CNN: R-CNN, Fast-CNN, Faster CNN

R-CNN

  • Modul 1: generování návrhů oblastí
  • Modul 2: extrakce příznaků (konvoluční vrstvy)
1 Citation: Jason Brownlee. 2019. Deep Learning for Computer Vision.
Deep Learning pro obrázky s PyTorchem

Rodina CNN na bázi oblastí: R-CNN

Rodina R-CNN: R-CNN, Fast-CNN, Faster CNN

R-CNN

  • Modul 1: generování návrhů oblastí
  • Modul 2: extrakce příznaků (konvoluční vrstvy)
  • Modul 3: predikce třídy a ohraničujícího rámečku
1 Citation: Jason Brownlee. 2019. Deep Learning for Computer Vision.
Deep Learning pro obrázky s PyTorchem

R-CNN: backbone

  • Konvoluční vrstvy: předtrénované modely
    • Backbone: základní architektura CNN pro extrakci příznaků

  backbone

  • Konvoluční a poolingové vrstvy
  • Extrakce příznaků pro návrhy oblastí a detekci objektů
Deep Learning pro obrázky s PyTorchem

R-CNN: backbone v PyTorch

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


vgg = vgg16(weights=VGG16_Weights.DEFAULT)

model vgg

Deep Learning pro obrázky s PyTorchem

R-CNN: backbone v PyTorch

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


vgg = vgg16(weights=VGG16_Weights.DEFAULT)

příznaky modelu vgg

  • .features: pouze konvoluční vrstvy
Deep Learning pro obrázky s PyTorchem

R-CNN: backbone v PyTorch

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


vgg = vgg16(weights=VGG16_Weights.DEFAULT)

model vgg

  • .features: pouze konvoluční vrstvy
  • .children(): všechny vrstvy bloku
Deep Learning pro obrázky s PyTorchem

R-CNN: backbone v 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()): všechny podvrstvy jsou zařazeny do sekvenčního bloku jako seznam
    • *: rozbalí prvky ze seznamu

model vgg

  • .features: pouze konvoluční vrstvy
  • .children(): všechny vrstvy bloku
Deep Learning pro obrázky s PyTorchem

R-CNN: klasifikační vrstva

  • Extrakce výstupní velikosti backbonu
input_dimension = nn.Sequential(*list(
    vgg_backbone.classifier.children())
)[0].in_features
  • Vytvoření nového klasifikátoru
classifier = nn.Sequential(
    nn.Linear(input_dimension, 512),
    nn.ReLU(),
    nn.Linear(512, num_classes),
)
Deep Learning pro obrázky s PyTorchem

R-CNN: vrstva regresoru rámečků

  • Umístěna na vrcholu backbonu
  • 4 výstupy pro 4 souřadnice ohraničujícího rámečku
box_regressor = nn.Sequential(
    nn.Linear(input_dimension, 32),
    nn.ReLU(),
    nn.Linear(32, 4),
)
Deep Learning pro obrázky s PyTorchem

Vše dohromady: model detekce objektů

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 pro obrázky s PyTorchem

Vše dohromady: model detekce objektů

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 pro obrázky s PyTorchem

Spuštění rozpoznávání objektů

  1. Načtení a transformace obrázku
  2. unsqueeze() obrázku pro přidání dávkové dimenze
  3. Předání tenzoru obrázku modelu
  4. Spuštění Non-Max Suppression (nms()) nad výstupem modelu
  5. draw_bounding_boxes() na obrázek
Deep Learning pro obrázky s PyTorchem

Lass uns üben!

Deep Learning pro obrázky s PyTorchem

Preparing Video For Download...