Các tầng tích chập cho ảnh

Deep Learning cho Ảnh với PyTorch

Michal Oleszak

Machine Learning Engineer

Các tầng tích chập cho ảnh

  • Áp dụng các tầng tích chập cho dữ liệu ảnh
  • Truy cập và thêm các tầng tích chập
  • Tạo các khối tích chập

 

  • Dùng để điều chỉnh mô hình cho một tác vụ cụ thể

Khung quanh một con mèo

Deep Learning cho Ảnh với PyTorch

Conv2d: kênh đầu vào

kênh RGB

  • Ảnh thang xám: in_channels=1
  • Ảnh RGB (đỏ, lục, lam): in_channels=3
  • Có kênh alpha (độ trong suốt): in_channels=4
from torchvision.transforms import functional
image = PIL.Image.open("dog.png")
num_channels = functional.get_image_num_channels(image)
print("Number of channels: ", num_channels)
Number of channels: 3
Deep Learning cho Ảnh với PyTorch

Conv2d: kernel

bộ lọc

                                        Tensor đầu vào               Kernel       Tensor đầu ra (bản đồ đặc trưng)

  • Kernel (màu xanh lá) di chuyển từ trái sang phải, từ trên xuống dưới của ảnh$^1$
1 Thevenot, Axel. 2020. A visual and mathematical explanation of the 2D convolution layer.
Deep Learning cho Ảnh với PyTorch

Kích thước kernel

tính toán ma trận

  • Kích thước kernel phổ biến: 3x3 (Conv2d) và 2x2 (MaxPool2d)
  • Tích chập là tích vô hướng giữa kernel (xanh lá) và vùng ảnh (hồng)
  • Tổng các tích vô hướng tạo nên bản đồ đặc trưng (xanh dương)
Deep Learning cho Ảnh với PyTorch

Kernel là bộ lọc

  • Bắt các mẫu trong ảnh

bộ lọc vùng

bộ lọc đường

Deep Learning cho Ảnh với PyTorch

Conv2d: kênh đầu ra

kênh đầu ra                                             Kênh đầu vào      Bộ lọc kernel     Kênh đầu ra

  • Số kênh đầu ra quyết định số bộ lọc được áp dụng
  • Mỗi kênh đầu ra tương ứng một bộ lọc riêng
  • Nhiều kênh đầu ra giúp học đặc trưng phức tạp hơn
  • Thường chọn số kênh đầu ra là lũy thừa của 2 (16, 32, 64, 128)
    • Giúp ghép/tách kênh ở các tầng sau đơn giản hơn
Deep Learning cho Ảnh với PyTorch

Thêm các tầng tích chập

import torch
import torch.nn as nn

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, padding=1)
conv2 = nn.Conv2d(in_channels=16, out_channels=32, kernel_size=3, padding=1)
model = Net()

model.add_module('conv2', conv2)
Deep Learning cho Ảnh với PyTorch

Truy cập các tầng tích chập

print(model)
Net(
  (conv1): Conv2d(3, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
  (conv2): Conv2d(16, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
)
model.conv2
Conv2d(16, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
Deep Learning cho Ảnh với PyTorch

Tạo khối tích chập

  • Xếp chồng các tầng tích chập trong một khối với nn.Sequential()
class BinaryImageClassification(nn.Module):
    def __init__(self):
        super(BinaryImageClassification, self).__init__()

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

Ayo berlatih!

Deep Learning cho Ảnh với PyTorch

Preparing Video For Download...