이진 및 다중 클래스 이미지 분류

PyTorch로 배우는 이미지 딥러닝

Michal Oleszak

Machine Learning Engineer

PyTorch로 무엇을 학습하나요?

tasks

PyTorch로 배우는 이미지 딥러닝

PyTorch로 무엇을 학습하나요?

tasks

PyTorch로 배우는 이미지 딥러닝

PyTorch로 무엇을 학습하나요?

tasks

PyTorch로 배우는 이미지 딥러닝

PyTorch로 무엇을 학습하나요?

tasks

PyTorch로 배우는 이미지 딥러닝

선수 지식

PyTorch로 배우는 이미지 딥러닝

PyTorch 라이브러리

torchvision

PyTorch로 배우는 이미지 딥러닝

PyTorch 라이브러리

torchvision

PyTorch로 배우는 이미지 딥러닝

PyTorch 라이브러리

torchvision

PyTorch로 배우는 이미지 딥러닝

PyTorch 라이브러리

torchvision

PyTorch로 배우는 이미지 딥러닝

이미지 분류

             이진 분류

binary

  • 두 개의 서로 다른 클래스(고양이, 개)
  • 활성화 함수: Sigmoid

             다중 클래스 분류

multi-class

  • 여러 클래스(보트, 기차, 자동차)
  • 활성화 함수: Softmax
  • 가장 높은 확률이 예측값
PyTorch로 배우는 이미지 딥러닝

합성곱 신경망(CNN) 모델

  cnn

PyTorch로 배우는 이미지 딥러닝

합성곱 신경망(CNN) 모델

  binary

PyTorch로 배우는 이미지 딥러닝

합성곱 신경망(CNN) 모델

  binary

PyTorch로 배우는 이미지 딥러닝

합성곱 신경망(CNN) 모델

  binary

PyTorch로 배우는 이미지 딥러닝

합성곱 신경망(CNN) 모델

  binary

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}
PyTorch로 배우는 이미지 딥러닝

이진 이미지 분류: 합성곱 층

  • Conv2d():
    • 입력: 3개 RGB 채널(빨강, 초록, 파랑)
    • 출력: 16채널
    • 커널: 3 x 3 행렬
    • 스트라이드 = 1: 커널이 1칸 이동
    • 패딩 = 1: 경계에 1픽셀
  • ReLU():
    • 비선형 활성화 함수
  • MaxPool2d():
    • 커널: 2x2
    • 스트라이드: 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
PyTorch로 배우는 이미지 딥러닝

이진 이미지 분류: 완전연결 층

  • Flatten():
    • 텐서를 1차원 벡터로 평탄화
  • Linear():
    • 입력: 특성맵 x 높이 x 너비
    • 출력: 단일 클래스
  • 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
PyTorch로 배우는 이미지 딥러닝

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
PyTorch로 배우는 이미지 딥러닝

연습해 봅시다!

PyTorch로 배우는 이미지 딥러닝

Preparing Video For Download...