Phân loại ảnh nhị phân và đa lớp

Deep Learning cho Ảnh với PyTorch

Michal Oleszak

Machine Learning Engineer

Ta sẽ học gì với PyTorch?

nhiệm vụ

Deep Learning cho Ảnh với PyTorch

Ta sẽ học gì với PyTorch?

nhiệm vụ

Deep Learning cho Ảnh với PyTorch

Ta sẽ học gì với PyTorch?

nhiệm vụ

Deep Learning cho Ảnh với PyTorch

Ta sẽ học gì với PyTorch?

nhiệm vụ

Deep Learning cho Ảnh với PyTorch

Yêu cầu tiên quyết

Deep Learning cho Ảnh với PyTorch

Thư viện PyTorch

torchvision

Deep Learning cho Ảnh với PyTorch

Thư viện PyTorch

torchvision

Deep Learning cho Ảnh với PyTorch

Thư viện PyTorch

torchvision

Deep Learning cho Ảnh với PyTorch

Thư viện PyTorch

torchvision

Deep Learning cho Ảnh với PyTorch

Phân loại ảnh

             Nhị phân

binary

  • Hai lớp riêng (mèo, chó)
  • Hàm kích hoạt: Sigmoid

             Đa lớp

multi-class

  • Nhiều lớp (thuyền, tàu, ô tô)
  • Hàm kích hoạt: Softmax
  • Xác suất cao nhất là dự đoán
Deep Learning cho Ảnh với PyTorch

Mô hình Mạng Nơ-ron Tích chập (CNN)

  cnn

Deep Learning cho Ảnh với PyTorch

Mô hình Mạng Nơ-ron Tích chập (CNN)

  binary

Deep Learning cho Ảnh với PyTorch

Mô hình Mạng Nơ-ron Tích chập (CNN)

  binary

Deep Learning cho Ảnh với PyTorch

Mô hình Mạng Nơ-ron Tích chập (CNN)

  binary

Deep Learning cho Ảnh với PyTorch

Mô hình Mạng Nơ-ron Tích chập (CNN)

  binary

Deep Learning cho Ảnh với PyTorch

Tập dữ liệu: nhãn lớp

thư mục ảnh

from torchvision import datasets
import torchvision.transforms as transforms


train_dir = '/data/train' train_dataset = ImageFolder(root=train_dir, transform=transforms.ToTensor())
classes = train_dataset.classes
print(classes)
['cat', 'dog']
print(train_dataset.class_to_idx)
{'cat': 0, 'dog': 1}
Deep Learning cho Ảnh với PyTorch

Phân loại ảnh nhị phân: tầng tích chập

  • Conv2d():
    • Đầu vào: 3 kênh RGB (đỏ, lục, lam)
    • Đầu ra: 16 kênh
    • Kernel: ma trận 3 x 3
    • Bước nhảy = 1: kernel di chuyển 1 bước
    • Đệm = 1: 1 pixel viền ngoài
  • ReLU():
    • Hàm kích hoạt phi tuyến
  • MaxPool2d():
    • Kernel: 2x2
    • Bước nhảy: 2 bước
class BinaryCNN(nn.Module):
    def __init__(self):
        super(BinaryCNN, self).__init__()

self.conv1 = nn.Conv2d(3, 16, kernel_size=3, stride=1, padding=1)
self.relu = nn.ReLU()
self.pool = nn.MaxPool2d(kernel_size=2, stride=2)
def forward(self, x): return x
Deep Learning cho Ảnh với PyTorch

Phân loại ảnh nhị phân: tầng fully connected

  • Flatten():
    • Làm phẳng tensor thành vector 1D
  • Linear():
    • Đầu vào: bản đồ đặc trưng x cao x rộng
    • Đầu ra: một lớp duy nhất
  • Sigmoid():
    • [0,1]
class BinaryCNN(nn.Module):
    def __init__(self):
        super(BinaryCNN, self).__init__()
        self.conv1 = nn.Conv2d(3, 16,
                kernel_size=3, stride=1, padding=1)
        self.relu = nn.ReLU()
        self.pool = nn.MaxPool2d(kernel_size=2, 
                     stride=2)

self.flatten = nn.Flatten()
self.fc1 = nn.Linear(16 * 112 * 112, 1)
self.sigmoid = nn.Sigmoid()
def forward(self, x):
x = self.pool(self.relu(self.conv1(x))) x = self.fc1(self.flatten(x)) x = self.sigmoid(x)]
return x
Deep Learning cho Ảnh với PyTorch

Phân loại ảnh đa lớp với CNN

class MultiClassCNN(nn.Module):
    def __init__(self, num_classes):
        super(MultiClassCNN, self).__init__()
        ...

self.fc = nn.Linear(16 * 112 * 112, num_classes)
self.softmax = nn.Softmax(dim=1)
def forward(self, x): ...
x = self.softmax(x)
return x
Deep Learning cho Ảnh với PyTorch

Ayo berlatih!

Deep Learning cho Ảnh với PyTorch

Preparing Video For Download...