데이터 증강이란(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()로 이미지를 텐서로 변환해 모델에 입력할 수 있게 만들어.