การจำแนกภาพแบบ Binary และ Multi-class

Deep Learning สำหรับภาพด้วย PyTorch

Michal Oleszak

Machine Learning Engineer

จะได้เรียนอะไรบ้างกับ PyTorch?

tasks

Deep Learning สำหรับภาพด้วย PyTorch

จะได้เรียนอะไรบ้างกับ PyTorch?

tasks

Deep Learning สำหรับภาพด้วย PyTorch

จะได้เรียนอะไรบ้างกับ PyTorch?

tasks

Deep Learning สำหรับภาพด้วย PyTorch

จะได้เรียนอะไรบ้างกับ PyTorch?

tasks

Deep Learning สำหรับภาพด้วย PyTorch

ความรู้พื้นฐานที่ต้องมี

Deep Learning สำหรับภาพด้วย PyTorch

ไลบรารี PyTorch

torchvision

Deep Learning สำหรับภาพด้วย PyTorch

ไลบรารี PyTorch

torchvision

Deep Learning สำหรับภาพด้วย PyTorch

ไลบรารี PyTorch

torchvision

Deep Learning สำหรับภาพด้วย PyTorch

ไลบรารี PyTorch

torchvision

Deep Learning สำหรับภาพด้วย PyTorch

การจำแนกภาพ

             Binary classification

binary

  • สองคลาสที่แตกต่างกัน (แมว, สุนัข)
  • ฟังก์ชัน Activation: Sigmoid

             Multi-class classification

multi-class

  • หลายคลาส (เรือ, รถไฟ, รถยนต์)
  • ฟังก์ชัน Activation: Softmax
  • ค่าความน่าจะเป็นสูงสุดคือผลการทำนาย
Deep Learning สำหรับภาพด้วย PyTorch

โมเดล Convolutional Neural Network

  cnn

Deep Learning สำหรับภาพด้วย PyTorch

โมเดล Convolutional Neural Network

  binary

Deep Learning สำหรับภาพด้วย PyTorch

โมเดล Convolutional Neural Network

  binary

Deep Learning สำหรับภาพด้วย PyTorch

โมเดล Convolutional Neural Network

  binary

Deep Learning สำหรับภาพด้วย PyTorch

โมเดล Convolutional Neural Network

  binary

Deep Learning สำหรับภาพด้วย PyTorch

ชุดข้อมูล: ป้ายกำกับคลาส

image folders

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 สำหรับภาพด้วย PyTorch

การจำแนกภาพแบบ Binary: Convolutional Layer

  • Conv2d():
    • Input: 3 ช่อง RGB (แดง, เขียว, น้ำเงิน)
    • Output: 16 ช่อง
    • Kernel: เมทริกซ์ 3 x 3
    • Stride = 1: kernel เลื่อน 1 ก้าว
    • Padding = 1: 1 พิกเซลรอบขอบภาพ
  • ReLU():
    • ฟังก์ชัน Activation แบบไม่เชิงเส้น
  • MaxPool2d():
    • Kernel: 2x2
    • Stride: 2 ก้าว
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 สำหรับภาพด้วย PyTorch

การจำแนกภาพแบบ Binary: Fully Connected Layer

  • Flatten():
    • แปลง Tensor ให้เป็นเวกเตอร์ 1 มิติ
  • Linear():
    • Input: feature maps x ความสูง x ความกว้าง
    • Output: คลาสเดียว
  • 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 สำหรับภาพด้วย PyTorch

การจำแนกภาพแบบ Multi-class ด้วย 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 สำหรับภาพด้วย PyTorch

มาฝึกกันเถอะ!

Deep Learning สำหรับภาพด้วย PyTorch

Preparing Video For Download...