Problem Solving with Algorithms

728x90
반응형

[AI 인공지능 머신러닝 딥러닝/Python | PyTorch] - 인스톨! 파이토치 강의 소개

 

인스톨! 파이토치 강의 소개

혁펜하임 PyTorch 강의 오리엔테이션 요약혁펜하임 채널의 '[PyTorch] 0강. 오리엔테이션' 영상은 채널 5주년 기념으로 '인스톨! 파이토치' 강의를 소개하는 내용입니다. 강의자는 최근 출간한 '이론

inner-game.tistory.com

 

 

 

인스톨! 파이토치

데이터 증강이란?

데이터 증강(Data Augmentation)은 기존 학습 데이터에 인위적인 변형을 가해 데이터셋의 크기와 다양성을 증가시키는 기법입니다. 새로운 이미지를 수집하는 대신, 원본 이미지를 변형하여 모델이 다양한 상황에서도 잘 작동하도록 학습시킵니다. 이는 과적합을 완화하고 모델의 일반화 성능을 크게 향상시키며, 특히 데이터가 제한적일 때 필수적입니다.[^1][^2][^3]

8-1강. 이미지 데이터 증강 30종 완벽 정리

기본 증강 기법

이미지 증강 기법은 크게 Spatial-levelPixel-level로 구분됩니다.[^4]

Spatial-level Augmentation (공간 변형)

공간적 정보를 직접 조정하는 증강 기법입니다:[^4]

  1. 회전(Rotation): 이미지를 특정 각도로 회전[^3][^5]
  2. 수평/수직 뒤집기(Flip): 이미지를 좌우 또는 상하로 반전[^6][^3]
  3. 크롭(Crop): 이미지의 일부 영역을 잘라냄[^5][^3]
    • RandomCrop: 무작위 위치에서 자르기
    • CenterCrop: 중앙 영역 자르기
    • RandomResizedCrop: 크기와 위치를 무작위로 조정하며 자르기[^6]
  4. 이동(Translation): 이미지를 특정 방향으로 이동[^4]
  5. 스케일링(Scaling): 이미지 크기 조정[^4]
  6. 전단(Shear): 이미지를 기울이기[^5][^4]
  7. 패딩(Padding): 이미지 가장자리에 픽셀 추가[^5]

Pixel-level Augmentation (픽셀 값 변경)

픽셀 값 자체를 변경하는 기법입니다:[^4]

  1. 밝기 조정(Brightness): 이미지 전체의 밝기 변경[^3]
  2. 대비 조정(Contrast): 명암 대비 조정[^3]
  3. 채도 조정(Saturation): 색상의 선명도 조정[^3]
  4. 색상 변환(Hue): 색조 변경
  5. 컬러 지터(Color Jitter): 밝기, 대비, 채도를 한꺼번에 조정[^3]
  6. 그레이스케일(Grayscale): 흑백 이미지로 변환
  7. 노이즈 추가(Noise Injection): 가우시안 노이즈 등 추가[^3]
  8. 블러(Blur): 이미지를 흐리게 처리[^5]
  • GaussianBlur: 가우시안 블러
  • MotionBlur: 모션 블러
  • MedianBlur: 중간값 블러

고급 증강 기법

  1. Cutout: 이미지의 일부를 무작위로 제거
  2. MixUp: 두 이미지를 섞어 새로운 이미지 생성
  3. CutMix: 한 이미지의 일부를 다른 이미지로 대체
  4. Elastic Transform: 탄성 변형 적용
  5. Grid Distortion: 격자 왜곡
  6. Optical Distortion: 광학 왜곡
  7. Random Erasing: 무작위 영역 지우기
  8. CoarseDropout: 큰 영역을 무작위로 제거
  9. Perspective Transform: 원근 변환
  10. Affine Transform: 어파인 변환[^4]

PyTorch Transform 예시

from torchvision import transforms

train_transform = transforms.Compose([
    transforms.Resize((256, 256)),
    transforms.RandomRotation(degrees=15),
    transforms.RandomHorizontalFlip(p=0.5),
    transforms.RandomVerticalFlip(p=0.5),
    transforms.RandomResizedCrop(224, scale=(0.8, 1.0)),
    transforms.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], 
                        std=[0.229, 0.224, 0.225])
])

이렇게 Compose를 사용하여 여러 증강 기법을 순차적으로 적용할 수 있습니다.[^5]

8-2강. Albumentations - 최강의 증강 라이브러리

Albumentations란?

Albumentations는 케글러들이 만든 빠르고 유연한 이미지 증강 라이브러리입니다. PyTorch의 torchvision.transforms를 대체할 수 있으며, OpenCV, NumPy, imgaug 등 여러 라이브러리를 기반으로 최적화되어 매우 빠른 속도를 자랑합니다.[^7][^8][^9]

Albumentations의 장점

  1. 다양한 컴퓨터 비전 태스크 지원: Classification, Segmentation, Object Detection, Pose Estimation 등[^10]
  2. 70개 이상의 증강 기법 제공: torchvision보다 훨씬 다양한 기법 사용 가능[^10]
  3. 빠른 처리 속도: 최적화된 구현으로 실시간 증강에 적합[^8][^7]
  4. 통일된 API: 간결하고 직관적인 사용법[^10]
  5. 유연한 확률 제어: 각 증강 기법마다 적용 확률 설정 가능[^11]

설치 방법

pip install albumentations

기본 사용법

import albumentations as A
import cv2

# 이미지 읽기
image = cv2.imread('image.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# 증강 파이프라인 정의
transform = A.Compose([
    A.HorizontalFlip(p=0.5),
    A.RandomRotate90(p=0.5),
    A.RandomBrightnessContrast(p=0.2),
    A.GaussNoise(p=0.2),
    A.Blur(blur_limit=3, p=0.1),
])

# 증강 적용
augmented = transform(image=image)
augmented_image = augmented['image']

각 증강 함수에 p 파라미터를 지정하여 적용 확률을 제어할 수 있습니다. 예를 들어 p=0.5는 50% 확률로 해당 증강을 적용한다는 의미입니다.[^11]

PyTorch Dataset과 통합

import albumentations as A
from albumentations.pytorch import ToTensorV2
from torch.utils.data import Dataset

class AlbumentationsDataset(Dataset):
    def __init__(self, file_paths, labels, transform=None):
        self.file_paths = file_paths
        self.labels = labels
        self.transform = transform

    def __len__(self):
        return len(self.file_paths)

    def __getitem__(self, idx):
        image = cv2.imread(self.file_paths[idx])
        image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

        if self.transform:
            augmented = self.transform(image=image)
            image = augmented['image']

        return image, self.labels[idx]

# Transform 정의
albumentations_transform = A.Compose([
    A.Resize(256, 256),
    A.RandomCrop(224, 224),
    A.HorizontalFlip(p=0.5),
    A.Normalize(mean=[0.485, 0.456, 0.406], 
                std=[0.229, 0.224, 0.225]),
    ToTensorV2()
])

dataset = AlbumentationsDataset(
    file_paths=image_paths,
    labels=labels,
    transform=albumentations_transform
)

고급 기법: OneOf와 Compose

transform = A.Compose([
    A.OneOf([
        A.GaussNoise(p=1.0),
        A.GaussianBlur(p=1.0),
        A.MotionBlur(p=1.0),
    ], p=0.3),  # 이 중 하나를 30% 확률로 적용

    A.OneOf([
        A.OpticalDistortion(p=1.0),
        A.GridDistortion(p=1.0),
        A.ElasticTransform(p=1.0),
    ], p=0.2),  # 이 중 하나를 20% 확률로 적용

    A.RandomBrightnessContrast(p=0.5),
])

OneOf를 사용하면 여러 증강 기법 중 하나만 무작위로 선택하여 적용할 수 있습니다.[^7]

주요 증강 기법 예시

Pixel-level

  • RandomBrightnessContrast: 밝기와 대비 조정
  • HueSaturationValue: 색조, 채도, 명도 조정
  • RGBShift: RGB 채널 값 이동
  • CLAHE: 대비 제한 적응 히스토그램 평활화

Spatial-level

  • ShiftScaleRotate: 이동, 스케일, 회전을 한 번에[^4]
  • Affine: 어파인 변환
  • Perspective: 원근 변환
  • ElasticTransform: 탄성 변형
  • GridDistortion: 격자 왜곡

데이터 증강 사용 팁

  1. 훈련 시에만 적용: 검증/테스트 데이터에는 증강을 적용하지 않거나 최소한으로 적용[^1]
  2. 적절한 확률 설정: 너무 강한 증강은 오히려 성능을 해칠 수 있으므로 적절한 확률 조정 필요
  3. 도메인 특성 고려: 의료 영상, 위성 이미지 등 도메인에 따라 적절한 증강 기법 선택
  4. 실험적 접근: 다양한 증강 조합을 실험하여 최적의 조합 찾기

결론

이미지 데이터 증강은 제한된 데이터로도 강건한 모델을 만드는 핵심 기술입니다. PyTorch의 기본 transforms로 시작하여, 더 다양하고 빠른 증강이 필요할 때는 Albumentations 라이브러리를 활용하면 됩니다. 30가지 이상의 다양한 증강 기법을 적재적소에 활용하여 모델의 일반화 성능을 극대화할 수 있습니다.

 

 

 

 

다음 글

[AI 인공지능 머신러닝 딥러닝/Python | PyTorch] - 인스톨! 파이토치 9강 | VGGNet으로 전이 학습 시작하기: 사전 학습 모델 활용 완벽 가이드

 

인스톨! 파이토치 9강 | VGGNet으로 전이 학습 시작하기: 사전 학습 모델 활용 완벽 가이드

[AI 인공지능 머신러닝 딥러닝/Python | PyTorch] - 인스톨! 파이토치 강의 소개 인스톨! 파이토치 강의 소개혁펜하임 PyTorch 강의 오리엔테이션 요약혁펜하임 채널의 '[PyTorch] 0강. 오리엔테이션' 영상

inner-game.tistory.com

 

728x90
반응형
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
250x250