메뉴 바로가기 본문 바로가기

최근 Data Augmentation 기법에는 어떤 것이 있을까요?

  • Dahee Kim
  • 2022.11.23

최근 Data Augmentation 기법에는 어떤 것이 있을까요? 

 

들어가며

 

딥러닝 모델에게 데이터는 중요한 존재입니다. 특히 데이터는 많으면 많을수록 더 좋은 모델을 만들 수 있기에 더욱 절대적이죠. 그러나 우리가 만들고자 하는 모델에 알맞은 데이터가 항상 존재하지 않는 것이 현실입니다. 예를 들어 얼굴 표정으로 기분을 추측하는 얼굴 인식 모델을 만들고 싶다면, 기쁜 표정, 슬픈 표정, 화난 표정에 해당하는 얼굴 이미지 데이터들이 많아야 더욱 성능이 좋은 얼굴 인식 모델을 만들 수 있겠죠.

따라서 한 이미지를 다양한 방법으로 변형시켜 이미지 데이터 수를 늘리는 방법인 데이터 증강(Data Augmentation)을 딥러닝에서 많이 활용합니다.

[그림 1] 좌우 반전, 색 조절 등의 기법을 사용하여 데이터를 증강 시킨 모습 (출처: Unsplash)

데이터 증강이란 하나의 이미지 데이터를 다양하게 변형하여 데이터 수를 늘리는 방법입니다. 위 그림과 같이 사람의 눈으로 오른쪽 네 개의 이미지들이 모두 ‘웃는 표정’이라는 것을 판단할 수 있지만, 컴퓨터가 볼 땐 이미지 하나하나의 픽셀 값들이 달라지는 것이기 때문에 모두가 ‘같은 대상’이라고 판단할 수 없습니다. 그래서 컴퓨터에게 증강된 이미지 데이터를 주면서 ‘자, 이 이미지들이 모두 다 같은 ‘웃는 표정’들이야’라고 훈련을 시키는 것이죠.

그러면 데이터를 증강시키는 방법들 중 가장 일반적이고 흔히 쓰이는 단순한 방법들은 어떤 것들이 있는지 알아봅시다.

기존 이미지 변형 방법들

 

파이토치(pytorch: 딥러닝 프레임워크)에서 흔히 사용되는 이미지 변형 방법들을 예시로 들겠습니다.

*다른 프레임워크에서 사용되는 데이터 증강 방법들은 아래의 링크들을 참조하시면 됩니다.

- 텐서플로우(Tenserflow): https://www.tensorflow.org/tutorials/images/data_augmentation?hl=ko

- 케라스(Keras): https://keras.io/api/preprocessing/image/

파이토치에서 제공되는 데이터 증강 방법들 중 제일 흔히 사용되는 방법들은 Resize, RandomHorizontalFlip, Normalize가 있습니다.

** 더욱 다양한 방법들을 확인해보고 싶으시다면 해당 링크를 참고하시기 바랍니다.*

Resize: 이미지의 사이즈를 조정하는 방법

[그림 2] 원본 이미지를 30, 50, 100, 원본 이미지 사이즈 순으로 증강한 모습 (출처: pytorch.org)

RandomHorizontalFlip: 이미지를 수평(좌우 방향)으로 대칭하는 방법

[그림 3] 좌우 대칭하여 원본 이미지를 증강한 모습 (출처: pytorch.org)

Normalize: 이미지의 픽셀 값들의 mean과 std값을 조정하는 방법

[그림 4] (좌)원본 이미지, (우)원본 이미지를 Normalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5))한 이미지 (출처: Unsplash)

최근에 소개된 새로운 데이터 증강 방법들

 

마냥 위와 같은 단순한 방법들로 일일이 이미지 변형 방법을 정하고 훈련을 돌려 테스트하는 수고로움을 느낀 연구자들은 딥러닝 훈련에 더욱 효과적이고 효율적인 새로운 데이터 증강 방법들을 고안하였습니다.

CutMix (2019년)

[그림 5] 원본 이미지, Mixup, Cutout, CutMix된 이미지 (출처: CutMix 논문)

CutMix란 훈련 이미지들의 패치들이 자르고 붙여져 이미지의 레이블들 또한 패치들의 영역에 정비례하게 섞이게 하는 방법입니다. 맨 오른쪽 이미지처럼 강아지 이미지에 고양이 이미지를 덧대고, 두 이미지의 비율만큼을 레이블로 나타내는 방법입니다.

특히 이 방법은 Cutout(2017년)과 Mixup(2017년)이라는 이전에 소개된 방법들을 혼합한 방법으로서, 두 방법들의 단점들을 해결하였습니다. Cutout은 이미지의 일부를 사각형으로 잘라내는 방법으로, 중요한 feature들이 모여있는 영역을 잘라낼 수 있어 딥러닝 훈련에 방해 요인으로 작용할 수 있습니다. 그리고 Mixup은 두 이미지를 반투명하게 만들어 혼합하는 방법으로, 만들어진 이미지가 애매모호하고 자연스럽지 않아 훈련을 할 딥러닝 모델을 혼란스럽게 만들 수 있습니다. 그러나 CutMix는 증강된 이미지의 모든 픽셀들을 유용히 사용할 수 있고 합쳐진 이미지의 비율대로 레이블이 되어 더욱 효과적인 훈련을 할 수 있는 장점이 있습니다.

[그림 6] Mixup, Cutout, CutMix 비교 (출처: CutMix 논문)

AutoAugment (2018년)

데이터 증강 방법들을 수동적으로 일일이 설계해야 하는 번거로움으로 인해, 강화학습을 통하여 자동적으로 알아서 데이터셋에 적절한 data augmentation들을 찾아내는 방법인 AutoAugment라는 방법을 제안했습니다.

[그림 7] ImageNet 데이터셋에 AutoAugment 적용 (출처: AutoAugment 논문)

그러나 이 방법으로는 데이터 증강을 위해 강화학습을 거칠 모델이 별도로 필요한 것과 그 모델을 훈련시키기 위한 GPU 소요시간이 너무 길다(ImageNet 데이터셋에는 15,000시간이 소요)는 단점이 있습니다.

❗ 이 AutoAugment라는 방법이 등장된 이후로 더 발전된 자동 데이터 증강 방법과, 확률과 무작위성에 의존하는 데이터 증강 방법인 두 갈래로 나뉘어 연구가 진행되는 경향을 나타냅니다.

 

 효율적인 자동 데이터 증강 방법

Fast AutoAugment (2019년)

[그림 8] AutoAugment와 Fast AutoAugment의 GPU 소요시간을 비교한 표 (출처: Fast AutoAugment 논문)

Fast AutoAugment란, 앞서 소개한 AutoAugment의 단점인 매우 긴 GPU 소요시간을 해결하고 Bayesian optimization을 이용하여 더욱 효율적이고 적절한 데이터 증강 방법을 찾아내는 방법입니다.

[그림 9] Bayesian optimization의 간단 설명 (출처: https://towardsdatascience.com/a-zero-maths-understanding-of-bayesian-optimization-e064a957a124)

여기서 얘기하는 Bayesian optimization이란, 현재 시점까지 쌓인 데이터에 기반하여 만들어진 모델(prior)과, 추가적인 실험 정보(likelihood)를 통해 새로운 데이터가 주어질 때의 모델(posterior)을 추정해나가는 최적화 방법입니다. 이로 인해 데이터 증강을 위한 모델을 훈련하는 것이 필요 없어진 것이죠.

+이 이후에 등장한 논문들은 앞서 발표된 논문들(AutoAugment, Fast AutoAugment)의 단점들을 보안하고 더 나은 성능을 선보이기 위해 계속 등장했습니다. 차례대로 Faster AutoAugment(2019년), Adversarial AutoAugment(2019년), DADA(Differentiable Automatic Data Augmentation)(2020년) 등이 등장했습니다.

Fast AutoAugment와 달리, 이제부터 등장하는 새로운 데이터 증강 방법들은 확률과 무작위성에 기반하여 제안됐습니다. 타겟 데이터에 최적화된 데이터 증강 방법을 자동적으로 찾아내는 방법보다, 더 랜덤하게 데이터를 증강하는 것이 더 높은 성능을 나타낸다는 이유인데요. 어떤 방법들이 있었는지 살펴봅시다.

 

확률과 무작위성에 기반한 데이터 증강 방법

RandAugment (2019년)

AutoAugment 이후 처음으로 확률과 무작위성에 초점을 둔 데이터 증강 방법이 RandAugment입니다.

[그림 10] RandAugment를 적용한 이미지 (출처: RandAugment 논문)

RandAugment 논문의 저자들은 자동화된 데이터 증강의 연산량을 크게 낮추고, 큰 규모의 데이터셋에서 효율적으로 적용하기 위해 사용되는 프록시 태스크(proxy task)를 없애도 되는 단순화된 search space(알고리즘이 탐색을 수행하는 공간)을 제안했습니다.

[그림 11] 앞서 발표된 방법들보다 더 나은 성능을 보이는 RandAugment (출처: RandAugment 논문)

앞서 소개한 AutoAugment(AA), Fast AutoAugment(Fast AA), PBA(Population Based Augmentation: AutoAugment의 GPU 시간을 1/1000 가량 줄이고, 시간에 따른 스케줄을 학습함으로서, 학습 시점에 따라 다른 augmentation 적용 확률과 강도를 사용함)보다 RandomAugment(RA)가 더 적은 search space에도 불구하고 가장 높은 정확도를 나타낸 것을 확인할 수 있습니다.

[그림 12] RandAugment 핵심 코드 (출처: RandAugment 논문)

또한 매우 적용하기 단순하고 쉽습니다. 위의 코드와 같이 적용할 이미지 변형 방법 개수(N: number of augmentation transformations)와, 변형 방법들의 강도(M: magnitude)만 정하면 되기 때문이죠.

그러나 이 RandAugment의 하이퍼 파라미터들인 N과 M을 조정(튜닝)하는 비용은 여전히 무시하지 못합니다. 이로 인해 새로 소개된 방법이 UniformAugment입니다.

UniformAugment (2020년)

[그림 13] UniformAugment를 적용한 모습 예시 (출처: Unsplash)

UniformAugment는 RandAugment과는 달리, 적용할 augmentation transformation 개수를 고정하지 않고, 모든 연산들(N과 M)을 0과 1 사이(균등 분포, Uniform distribution)의 확률로 설정하여 augmentation을 할 지 말지를 정합니다. 이러한 설정으로 인해 RandAugment에 존재하던 두 개의 하이퍼파라미터들을 튜닝할 필요가 사라지게 됩니다. 이 UniformAugment는 여전히 RandAugment와 비슷한 성능을 나타내고 있습니다.

[그림 14] AutoAugment(AA), Fast AutoAugment(FAA), Population Based Augmentation(PBA), RandomAugment(RA), UniformAugment(UA)의 성능을 비교한 표 (출처: UniformAugment 논문)

이 이후로 등장한 논문들은 TrivialAugment(2021년), Deep AutoAugment(2022년) 등이 있습니다.

나가며

지금까지 기존 이미지 변형 방법들, 새로 등장한 데이터 증강 방법들에 대해 소개했습니다. 더 나아가서 자동적으로 이미지 변형 방법들을 정해주는 자동화된 데이터 증강 방법들과, 확률과 무작위성에 기반한 데이터 증강 방법들을 소개했습니다. 이미 활발하게 데이터 증강 방법들이 소개되고 있는 만큼 더 좋고 간편한 데이터 증강 방법들이 계속 등장하길 기대해 봅니다.

참고 자료

 

- pytorch image transformation examples: https://pytorch.org/vision/main/auto_examples/plot_transforms.html#grayscale

- CutMix: https://arxiv.org/abs/1905.04899

- AutoAugment: https://arxiv.org/abs/1805.09501

- Fast AutoAugment: https://arxiv.org/abs/1905.00397

Bayesian Optimization: https://sonsnotation.blogspot.com/2020/11/12-bayesian-optimization.html

- Faster AutoAugment: https://paperswithcode.com/paper/faster-autoaugment-learning-augmentation

- RandAugment: https://arxiv.org/abs/1909.13719

UniformAugment: https://arxiv.org/abs/2003.14348

 

 

 

About Author

 

김 다 희

 

 


Pro, AI 1팀

dahee.kim@cubox.ai