Deteksi objek dengan R-CNN

Deep Learning untuk Gambar dengan PyTorch

Michal Oleszak

Machine Learning Engineer

Keluarga CNN berbasis region: R-CNN

Keluarga R-CNN: R-CNN, Fast-CNN, Faster CNN

R-CNN

  • Modul 1: pembuatan proposal region
1 Sitasi: Jason Brownlee. 2019. Deep Learning for Computer Vision.
Deep Learning untuk Gambar dengan PyTorch

Keluarga CNN berbasis region: R-CNN

Keluarga R-CNN: R-CNN, Fast-CNN, Faster CNN

R-CNN

  • Modul 1: pembuatan proposal region
  • Modul 2: ekstraksi fitur (lapisan konvolusi)
1 Sitasi: Jason Brownlee. 2019. Deep Learning for Computer Vision.
Deep Learning untuk Gambar dengan PyTorch

Keluarga CNN berbasis region: R-CNN

Keluarga R-CNN: R-CNN, Fast-CNN, Faster CNN

R-CNN

  • Modul 1: pembuatan proposal region
  • Modul 2: ekstraksi fitur (lapisan konvolusi)
  • Modul 3: prediksi kelas dan bounding box
1 Sitasi: Jason Brownlee. 2019. Deep Learning for Computer Vision.
Deep Learning untuk Gambar dengan PyTorch

R-CNN: backbone

  • Lapisan konvolusi: model pra-latih
    • Backbone: arsitektur CNN inti untuk ekstraksi fitur

  backbone

  • Lapisan konvolusi & pooling
  • Ekstrak fitur untuk proposal region dan deteksi objek
Deep Learning untuk Gambar dengan PyTorch

R-CNN: backbone dengan PyTorch

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


vgg = vgg16(weights=VGG16_Weights.DEFAULT)

model vgg

Deep Learning untuk Gambar dengan PyTorch

R-CNN: backbone dengan PyTorch

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


vgg = vgg16(weights=VGG16_Weights.DEFAULT)

fitur model vgg

  • .features: hanya lapisan konvolusi
Deep Learning untuk Gambar dengan PyTorch

R-CNN: backbone dengan PyTorch

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


vgg = vgg16(weights=VGG16_Weights.DEFAULT)

model vgg

  • .features: hanya lapisan konvolusi
  • .children(): semua lapisan dalam blok
Deep Learning untuk Gambar dengan PyTorch

R-CNN: backbone dengan 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()): semua sub-layer dimasukkan ke blok sequential sebagai list
    • *: membuka elemen dari list

model vgg

  • .features: hanya lapisan konvolusi
  • .children(): semua lapisan dalam blok
Deep Learning untuk Gambar dengan PyTorch

R-CNN: lapisan classifier

  • Ambil ukuran keluaran backbone
input_dimension = nn.Sequential(*list(
    vgg_backbone.classifier.children())
)[0].in_features
  • Buat classifier baru
classifier = nn.Sequential(
    nn.Linear(input_dimension, 512),
    nn.ReLU(),
    nn.Linear(512, num_classes),
)
Deep Learning untuk Gambar dengan PyTorch

R-CNN: lapisan box regressor

  • Di atas backbone
  • 4 keluaran untuk 4 koordinat kotak
box_regressor = nn.Sequential(
    nn.Linear(input_dimension, 32),
    nn.ReLU(),
    nn.Linear(32, 4),
)
Deep Learning untuk Gambar dengan PyTorch

Menggabungkan semuanya: model deteksi objek

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 untuk Gambar dengan PyTorch

Menggabungkan semuanya: model deteksi objek

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 untuk Gambar dengan PyTorch

Menjalankan pengenalan objek

  1. Muat dan transformasi gambar
  2. unsqueeze() untuk menambah dimensi batch
  3. Kirim tensor gambar ke model
  4. Jalankan Non-Max Suppression (nms()) pada keluaran model
  5. draw_bounding_boxes() di atas gambar
Deep Learning untuk Gambar dengan PyTorch

Ayo berlatih!

Deep Learning untuk Gambar dengan PyTorch

Preparing Video For Download...