# 이미지 증강

이미지 증강은 데이터셋에서 "Train"으로 표시된 기존 이미지에 증강을 적용하는 단계입니다. 이 과정은 모델이 일반화하는 능력을 향상시켜 보지 못한 이미지에서도 더 효과적으로 성능을 발휘하도록 도와줄 수 있습니다.

{% hint style="success" %}
증강 없이 프로젝트를 시작하는 것을 권장합니다. 이렇게 하면 원본 데이터셋의 품질을 평가할 수 있습니다. 증강을 추가했는데 데이터셋 성능이 기대만큼 나오지 않더라도, 모델 성능을 비교할 기준선이 없게 됩니다.

증강 없이도 모델 성능이 좋지 않다면, 클래스 균형, 데이터 표현, 데이터셋 크기를 살펴봐야 할 수 있습니다. 증강 없이 모델을 성공적으로 학습한 데이터셋이 있다면, 증강을 추가해 모델 성능 향상을 더 도울 수 있습니다.
{% endhint %}

증강은 몇 가지 중요한 이유로 학습 시점이 아니라 데이터셋 버전("offline augmentation")을 통해 적용됩니다:

1. **모델 재현성이 향상됩니다**. Roboflow에서는 각 이미지가 어떻게 증강되었는지에 대한 복사본을 보관합니다. 예를 들어, 모델이 어두운 이미지보다 밝은 이미지에서 더 잘 동작한다는 것을 발견할 수 있으므로, 더 많은 저조도 학습 데이터를 수집해야 합니다.
2. **학습 시간이 줄어듭니다**. 증강은 CPU에 제약을 받는 작업입니다. GPU로 학습하면서 on-the-fly로 증강을 수행하면, 각 epoch마다 CPU가 증강된 데이터를 제공해 주길 기다리는 경우가 많습니다. 이 시간이 쌓이면 꽤 큽니다!
3. **학습 비용이 줄어듭니다**. 증강은 CPU에 제약을 받는 작업이기 때문에, 비용이 많이 드는 임대 GPU는 종종 학습에 사용할 이미지를 공급받기 위해 기다리게 됩니다.

## 증강이 적용되는 방식

증강은 항상 학습 이미지에 다음 이후에 적용됩니다 [전처리 단계](https://docs.roboflow.com/roboflow/roboflow-ko/datasets/dataset-versions/image-preprocessing). 선택한 증강은 함께 쌓여 적용되며, 증강 설정과 각 설정의 값에 대해 랜덤화가 이루어져 각 증강 이미지에 적용됩니다. 이 과정에서 중복으로 나타나는 이미지는 생성된 버전에서 필터링됩니다.

예를 들어, "수평 뒤집기"와 "소금과 후추 노이즈" 증강을 선택하면, 해당 이미지는 무작위로 수평 뒤집기가 적용되고 무작위 소금과 후추 노이즈가 추가됩니다.

### 증강 제한하기

증강이 포함된 데이터셋 버전을 만들 때, "Maximum Version Size" 옵션을 통해 포함할 최대 증강 이미지 수를 선택할 수 있습니다.

예를 들어 3x를 선택하면, 최종 데이터셋 버전에는 각 학습 원본 이미지에 [전처리 단계](https://docs.roboflow.com/roboflow/roboflow-ko/datasets/dataset-versions/image-preprocessing) 가 적용되고, 선택한 설정에 따라 각 이미지에 대해 무작위 증강 2개가 추가됩니다.

데이터셋에 100개의 이미지가 있고 train/valid/test 비율이 70/20/10이며 3x 증강을 선택했다면, 최종 데이터셋은 대략 210/20/10 비율이 됩니다.

<figure><img src="https://3958014485-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M6S9nPJhEX9FYH6clfW%2Fuploads%2Fgit-blob-6e1eab9e86e8e1271b32261c1f214c503ed7afc7%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
버전의 최종 이미지 수는 중복 제거가 이루어지고, 특정 옵션("Filter Null" 등)이 출력에서 이미지를 제거할 수 있으므로 이 추정치보다 더 적을 수 있습니다.
{% endhint %}

## 증강 옵션

Roboflow의 증강은 "Basic" 또는 "Enhanced"일 수 있으며, 두 가지 다른 수준에서 적용할 수 있습니다.

### 이미지 수준 증강

이미지 수준 증강은 개별 객체나 영역이 아니라 이미지 전체에 변환을 적용해 새로운 학습 데이터를 만듭니다. 전체 이미지를 수정함으로써 개발자는 더 다양한 시각적 조건을 시뮬레이션할 수 있고, 모델이 새로운 데이터에 더 잘 일반화하도록 도울 수 있습니다.

### 바운딩 박스 수준 증강

바운딩 박스 수준 증강은 소스 이미지의 바운딩 박스 내용만 변경하여 새로운 학습 데이터를 만듭니다. 이를 통해 개발자는 문제의 조건에 더 적합한 학습 데이터를 만드는 데 더 큰 제어권을 가질 수 있습니다.

A [2019 논문](https://arxiv.org/pdf/1906.11172.pdf) 은 Google 연구진이 모델에 최적의 데이터를 만들기 위해 바운딩 박스만 사용하는 증강을 활용하는 아이디어를 소개합니다. 이 논문에서 연구진은 바운딩 박스만 수정해도 체계적인 개선이 이루어지며, 특히 작은 데이터셋으로 학습한 모델에서 그러한 효과가 크다는 것을 보여주었습니다.

{% hint style="info" %}
Enhanced Augmentations와 Bounding Box Augmentations는 **프리미엄** 기능입니다.

요금제와 각 요금제에 포함된 기능에 대한 최신 정보는 [요금 페이지](https://roboflow.com/pricing).
{% endhint %}

<table><thead><tr><th></th><th data-type="checkbox">이미지 수준 증강</th><th data-type="checkbox">바운딩 박스 증강</th><th>증강 유형<select><option value="Z8F06MhppTfn" label="Enhanced" color="blue"></option><option value="sdEDfdaf9Z03" label="Basic" color="blue"></option></select></th></tr></thead><tbody><tr><td><a href="image-augmentation/augmentation-types/flip-augmentation">Flip 증강</a></td><td>true</td><td>true</td><td><span data-option="sdEDfdaf9Z03">Basic</span></td></tr><tr><td><a href="image-augmentation/augmentation-types/90o-rotate-augmentation">90º Rotate 증강</a></td><td>true</td><td>true</td><td><span data-option="sdEDfdaf9Z03">Basic</span></td></tr><tr><td><a href="image-augmentation/augmentation-types/crop-augmentation">Crop 증강</a></td><td>true</td><td>true</td><td><span data-option="sdEDfdaf9Z03">Basic</span></td></tr><tr><td><a href="image-augmentation/augmentation-types/rotation-augmentation">Rotation 증강</a></td><td>true</td><td>true</td><td><span data-option="sdEDfdaf9Z03">Basic</span></td></tr><tr><td><a href="image-augmentation/augmentation-types/shear-augmentation">Shear 증강</a></td><td>true</td><td>true</td><td><span data-option="sdEDfdaf9Z03">Basic</span></td></tr><tr><td><a href="image-augmentation/augmentation-types/grayscale-augmentation">Grayscale 증강</a></td><td>true</td><td>false</td><td><span data-option="sdEDfdaf9Z03">Basic</span></td></tr><tr><td><a href="image-augmentation/augmentation-types/hue-augmentation">Hue 증강</a></td><td>true</td><td>false</td><td><span data-option="sdEDfdaf9Z03">Basic</span></td></tr><tr><td><a href="image-augmentation/augmentation-types/saturation-augmentation">Saturation 증강</a></td><td>true</td><td>false</td><td><span data-option="sdEDfdaf9Z03">Basic</span></td></tr><tr><td><a href="image-augmentation/augmentation-types/brightness-augmentation">Brightness 증강</a></td><td>true</td><td>true</td><td><span data-option="sdEDfdaf9Z03">Basic</span></td></tr><tr><td><a href="image-augmentation/augmentation-types/exposure-augmentation">Exposure 증강</a></td><td>true</td><td>true</td><td><span data-option="sdEDfdaf9Z03">Basic</span></td></tr><tr><td><a href="image-augmentation/augmentation-types/blur-augmentation">Blur 증강</a></td><td>true</td><td>true</td><td><span data-option="sdEDfdaf9Z03">Basic</span></td></tr><tr><td><a href="image-augmentation/augmentation-types/noise-augmentation">Noise 증강</a></td><td>true</td><td>true</td><td><span data-option="sdEDfdaf9Z03">Basic</span></td></tr><tr><td><a href="image-augmentation/augmentation-types/camera-gain-augmentation">Camera Gain 증강</a></td><td>true</td><td>true</td><td><span data-option="sdEDfdaf9Z03">Basic</span></td></tr><tr><td><a href="image-augmentation/augmentation-types/motion-blur-augmentation">Motion Blur 증강</a></td><td>true</td><td>true</td><td><span data-option="sdEDfdaf9Z03">Basic</span></td></tr><tr><td><a href="image-augmentation/augmentation-types/cutout-augmentation">Cutout 증강</a></td><td>true</td><td>false</td><td><span data-option="Z8F06MhppTfn">Enhanced</span></td></tr><tr><td><a href="image-augmentation/augmentation-types/mosaic-augmentation">Mosaic 증강</a></td><td>true</td><td>false</td><td><span data-option="Z8F06MhppTfn">Enhanced</span></td></tr></tbody></table>

## 자세히 알아보기

* [데이터 증강을 위한 궁극의 가이드](https://blog.roboflow.com/data-augmentation/)
* [객체 탐지를 위한 이미지 증강 방법](https://blog.roboflow.com/object-detection-augmentation/)
