R-CNN ile nesne tespiti

PyTorch ile Görüntüler için Deep Learning

Michal Oleszak

Machine Learning Engineer

Bölge tabanlı CNN ailesi: R-CNN

R-CNN ailesi: R-CNN, Fast-CNN, Faster CNN

R-CNN

  • Modül 1: bölge önerisi oluşturma
1 Alıntı: Jason Brownlee. 2019. Deep Learning for Computer Vision.
PyTorch ile Görüntüler için Deep Learning

Bölge tabanlı CNN ailesi: R-CNN

R-CNN ailesi: R-CNN, Fast-CNN, Faster CNN

R-CNN

  • Modül 1: bölge önerisi oluşturma
  • Modül 2: özellik çıkarımı (evrişim katmanları)
1 Alıntı: Jason Brownlee. 2019. Deep Learning for Computer Vision.
PyTorch ile Görüntüler için Deep Learning

Bölge tabanlı CNN ailesi: R-CNN

R-CNN ailesi: R-CNN, Fast-CNN, Faster CNN

R-CNN

  • Modül 1: bölge önerisi oluşturma
  • Modül 2: özellik çıkarımı (evrişim katmanları)
  • Modül 3: sınıf ve sınır kutusu tahmini
1 Alıntı: Jason Brownlee. 2019. Deep Learning for Computer Vision.
PyTorch ile Görüntüler için Deep Learning

R-CNN: backbone

  • Evrişim katmanları: önceden eğitilmiş modeller
    • Backbone: özellik çıkarımından sorumlu temel CNN mimarisi

  backbone

  • Evrişim ve havuzlama katmanları
  • Bölge önerileri ve nesne tespiti için özellik çıkarır
PyTorch ile Görüntüler için Deep Learning

R-CNN: PyTorch ile backbone

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


vgg = vgg16(weights=VGG16_Weights.DEFAULT)

vgg modeli

PyTorch ile Görüntüler için Deep Learning

R-CNN: PyTorch ile backbone

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


vgg = vgg16(weights=VGG16_Weights.DEFAULT)

vgg model özellikleri

  • .features: yalnızca evrişim katmanları
PyTorch ile Görüntüler için Deep Learning

R-CNN: PyTorch ile backbone

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


vgg = vgg16(weights=VGG16_Weights.DEFAULT)

vgg modeli

  • .features: yalnızca evrişim katmanları
  • .children(): bloktaki tüm katmanlar
PyTorch ile Görüntüler için Deep Learning

R-CNN: PyTorch ile backbone

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()): alt katmanların tümünü liste olarak sıralı bloğa ekler
    • *: listedeki öğeleri açar

vgg modeli

  • .features: yalnızca evrişim katmanları
  • .children(): bloktaki tüm katmanlar
PyTorch ile Görüntüler için Deep Learning

R-CNN: sınıflandırıcı katmanı

  • Backbone çıkış boyutunu çıkarın
input_dimension = nn.Sequential(*list(
    vgg_backbone.classifier.children())
)[0].in_features
  • Yeni bir sınıflandırıcı oluşturun
classifier = nn.Sequential(
    nn.Linear(input_dimension, 512),
    nn.ReLU(),
    nn.Linear(512, num_classes),
)
PyTorch ile Görüntüler için Deep Learning

R-CNN: kutu regresyon katmanı

  • Backbone’un üstünde yer alır
  • 4 kutu koordinatı için 4 çıktı
box_regressor = nn.Sequential(
    nn.Linear(input_dimension, 32),
    nn.ReLU(),
    nn.Linear(32, 4),
)
PyTorch ile Görüntüler için Deep Learning

Hepsini birleştirme: nesne tespit modeli

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), )
PyTorch ile Görüntüler için Deep Learning

Hepsini birleştirme: nesne tespit modeli

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

    def forward(self, x):

features = self.backbone(x)
bboxes = self.regressor(features) classes = self.classifier(features) return bboxes, classes
PyTorch ile Görüntüler için Deep Learning

Nesne tanımayı çalıştırma

  1. Görüntüyü yükleyin ve dönüştürün
  2. Batch boyutu eklemek için unsqueeze() uygulayın
  3. Görüntü tensörünü modele verin
  4. Çıktıya Non-Max Suppression (nms()) uygulayın
  5. Görüntü üzerine draw_bounding_boxes() çizin
PyTorch ile Görüntüler için Deep Learning

Hadi pratik yapalım!

PyTorch ile Görüntüler için Deep Learning

Preparing Video For Download...