이미지 증강

하는·2024년 10월 7일
1

컴퓨터 비전

목록 보기
4/4

데이터 증강이란(Data Augmentation)

모델의 성능을 향상시키기 위해 기존 데이터를 변형하여 새로운 데이터를 생성하는 기법.
주로 딥러닝에서 모델의 일반화 성능을 높이고 과적합(overfitting)을 방지하기 위해 사용된다.

1. 데이터 증강의 필요성

  • 딥러닝 모델은 많은 데이터를 필요로 하지만 데이터 수가 부족할 때, 모델이 과적합하는 문제가 발생할 수 있다.

    과적합: 모델이 훈련 데이터에 너무 특화되어 새로운 데이터에 대한 성능이 떨어지는 현상

  • 이 문제를 해결하기 위해, 데이터 증강을 사용한다. 기존 데이터를 조금씩 변형해서 더 많은 데이터를 생성하고, 모델이 더 다양한 상황을 학습할 수 있다.

2. 대표적인 데이터 증강 방법

1) 회전 (Rotation)

angle_rand = random.choice([0, 90, 180, 270])
  • 이미지 전체를 0도, 90도, 180도, 270도 중 하나의 각도로 무작위 회전.
  • 회전을 통해 모델이 다양한 방향에서 이미지를 학습할 수 있게 함.
  • 같은 이미지라도 회전된 버전을 학습함으로써, 객체의 방향에 관계없이 모델이 인식할 수 있도록 한다.

2) 평행 이동 (Translation)

trans_rand = [random.uniform(0, 0.3), random.uniform(0, 0.3)]
  • 이미지를 x축과 y축 방향으로 무작위로 이동.
  • 평행 이동은 객체가 이미지의 중앙에만 위치하는 것이 아니라, 다양한 위치에서도 모델이 인식할 수 있도록 도와준다.
  • 객체가 이미지의 한쪽 구석에 있어도 모델이 이를 인식하도록 하는데 유용.

3) 크기 조정 (Scaling)

scale_rand = random.uniform(0.8, 1.2)
  • 이미지를 0.8배에서 1.2배 크기로 조정.
  • 이는 객체의 크기가 다른 상황을 모델이 학습할 수 있도록 도와준다.
    예를 들어, 같은 물체라도 멀리 있을 때는 작고 가까이 있을 때는 크게 보일 수 있다. 이 변형을 통해 모델이 다양한 크기의 객체를 학습할 수 있게 된다.

4) 수평/수직 반전 (Horizontal/Vertical Flip)

hori_rand = random.choice([True, False])
verti_rand = random.choice([True, False])
  • 이미지를 좌우로 뒤집거나(수평 반전) 위아래로 뒤집는(수직 반전) 방식.
  • 이런 반전 작업을 통해, 같은 이미지를 다양한 방향으로 모델이 학습할 수 있다.
    예를 들어, 사람의 얼굴이 좌우 반전되거나 상하 반전된 경우에도 모델이 이를 인식할 수 있다.

5) 색상 조정 (Color Jitter)

transforms.ColorJitter(
    brightness=random.random(),
    contrast=random.random(),
    saturation=random.random(),
    hue=random.random() / 2
)
  • 이미지의 밝기, 대비, 채도, 색조를 무작위로 변경.
  • 이 변형을 통해 모델이 조명 조건이 다른 다양한 환경에서 이미지를 학습할 수 있도록 도와준다.

3. 데이터 증강의 효과

  • 데이터 다양성 증가: 데이터 증강을 통해 기존 데이터에서 여러 변형된 버전을 생성하므로, 데이터셋의 크기를 늘리는 효과를 얻을 수 있다.
  • 과적합 방지: 데이터 증강으로 다양한 변형된 데이터를 학습하게 하여, 특정 데이터 패턴에 의존하는 모델을 방지하고 일반화 성능을 높일 수 있다.
  • 훈련 데이터 부족 해결: 데이터 수가 부족할 때, 데이터 증강을 통해 더 많은 데이터를 학습할 수 있다. 이는 모델 성능 향상에 큰 도움이 된다.

4. 데이터 증강의 구현 예시

transforms.Compose를 사용해 변형을 차례대로 묶어 적용한다.

  • Affine()을 통해 회전, 평행 이동, 크기 조정을 적용하고,
  • RandomHorizontalFlip()RandomVerticalFlip()으로 좌우, 상하 반전을 무작위로 적용한다.
  • ColorJitter()를 사용해 밝기와 색상 변화를 주고, ToTensor()로 이미지를 텐서로 변환해 모델에 입력할 수 있게 만들어.
profile
천천히 꾸준히 취미처럼 냐미😋

0개의 댓글