비즈니스 문제를 해결하고 예측하는 데이터 사이언티스트가 되고 싶다면?
#인공지능 

데이터 Preprocessing과 Augmentation

이미지 처리에서 다뤘던 데이터 preprocessing 할 때 활용할 수 있는 다양한 augmentation 방법에 대해 간단히 다룹니다. 데이터 증강은 이미지 처리 분야에서 학습했듯이, 데이터셋을 확장하여 모델의 성능을 개선하는 기술입니다.

2024-07-10 | 신유진

Augmentation, 데이터 증강은 이미지 처리 분야에서 학습했듯이, 데이터셋을 확장하여 모델의 성능을 개선하는 기술입니다. 예를 들어, VGG 모델에서 이 기법을 실험하고 벤치마킹한 사례가 있습니다. VGG-D 모델에 256×256 해상도의 이미지를 입력할 때보다 동일한 이미지를 256×256과 512×512 해상도로 각각 입력하면 성능이 약간 향상된다는 결과를 보였습니다. 이로 인해 오차가 3~5% 감소했다고 합니다. Augmentation을 추가하면 기본적으로 성능이 향상될 수 있다는 결론이 도출되었습니다.

Augmentation 하는 이유

  1. Preprocessing과 augmentation을 하면, 성능이 거의 좋아집니다.
  2. 원본에 추가되는 개념이니 성능이 떨어지지 ㅇ낳습니다.
  3. 패턴이 정해져 있어 비교적 쉽게 데이터를 얻을 수 있습니다.

단기간에 성능을 올리고 싶다면 Transfer Learning, 또는 Augmentation 으로 해결할 수 있습니다.

Augmentation 종류:

  1. 좌우반전
  2. 이미지를 잘라준다.
  3. 밝기조절
  4.  응용방법:
    • AlexNet
    • VGGNet
    • ResNet
  5. 그 외 augemntation방법:
    • Rotation: 이미지를 0 ~ 360도 회전시킨다.
    • Shifting: 이미지를 약 10px 움직인다. 끝단이 잘려 나가는 효과가 있다.
    • Rescaling: 이미지를 1.0 ~ 1.6배 키운다.
    • Flipping: 이미지를 상하 / 좌우 반전을 한다.
    • Shearing: 약 -20 ~ 20도 정도로 이미지를 찌그러트린다.
    • Stretching: 이미지를 가로 / 세로 약 1.0 ~ 1.3배 늘린다.

일부 사진과 뉴럴 네트워크를 예로 들어 설명하겠습니다.

Augmentation 1- 좌우반전

제일 기본적인 방법으로, 왼쪽만 바라보는 고양이를 70개 넣어준다고 할 때 오른쪽을 보는 고양이는, 고양이라고 인식하지 못하게 됩니다. 왼쪽보는 고양이 60 + 그 좌우 반전인 오른쪽을 보는 고야이 사진을 70개 해서 총 140개를 넣어주면 어느 쪽을 보더라도 다 정답으로 인식하게 됩니다.

 

Augmentation 2- 이미지 crop 

 

꼬리를 보고 고양이로 판단할 확률이 50%, 귀를 보고 30%이라고 가정할 때, 만약 고양이가 상자속에 들어가서 꼬리만 있는 사진이 있다고 합시다. 사람이 판단하기엔 단번에 고양이라고 판단 할 수 있으나 딥러닝은 꼬리뿐만 아니라 상자도 인식하느라 고양이의 특징을 제대로 파악하지 못할 것입니다.
사람의 인식방법을 모방하기 위해 사물+꼬리 있는 사진을 포함시키기 보다는, 꼬리만 잘라서 학습시킨다면 성능이 더 좋아질 것입니다. 각 부분만 보고도 고양이로 판단할 수 있도록 해줍니다.

Augmentation 3 – 밝기 조절

만약 딥러닝 모델로 이미지 편집하는 앱을 만들게 되면, 사진을 찍는 사람마다 빛의 양이 다를 것입니다. 이를 딥러닝이 인식할 수 있도록 밝기가 낮은 사진부터 높은 사진까지 전부 밝기를 조절한 데이터를 포함시키는 것이 딥러닝 학습에 유리할 것입니다.

그 외에도 많은 응용방법이 있습니다.

AlexNet

이미지 챌린지에서 나왔던 AlexNet이라는 모델이 있습니다. 이는 처음으로 Augmentation을 많이 썼다고 합니다.
1. 좌우반전
2. 224*224px –>  256*256px 로 resize –> 224*224px로 랜덤하게 2048번 잘라서 데이터를 2048배 늘려줬습니다.
3. 테스트시에는 2048배 데이터를 늘리면 너무 느리니까
256*256px 로 resize –> 좌상단/우상단/좌하단/우하단 가운데, 총 5번만 자른 후 5배 늘리게 resize –> 좌우반전도 더해서 *2로 총 10배 늘림
–> 10개 따로 predict한 다음, 평균을 냅니다.
4. PCA를 통해 RGB채널을 조절하는데 이는 요새 쓰지는 않습니다.

VGGNet

일반적으로 이미지 데이터에서 많이 사용되는 augmentation 방법은 VGGNet에서 도입된 방식을 따르고 있습니다. VGGNet은 여러 방법으로 벤치마킹하고 실험한 결과,

  1. RGB 채널 값에서 각각 평균을 빼서 RGB 값의 평균을 0으로 맞추었습니다. 이는 손실 함수의 수렴을 빠르게 만듭니다.
    가중치 초기화 시에도 입력 데이터의 기대값(E(X))과 출력 데이터의 기대값(E(Y))을 0으로 설정한 것은 이러한 이유에서였습니다. X와 Y는 모두 활성화 출력값이었습니다. 이는 hidden layer 사이의 입력과 출력의 평균을 0으로 유지함으로써 더 많은 층(layer)을 쌓을 수 있는 개념이었습니다.
    우리가 처음 이미지를 넣는 입력(input)은 세로, 가로, RGB 값이며 활성화 출력값(activation output)이 아닙니다. 그러므로 강제로 RGB 값에서 평균을 뺌으로써 사실상 입력 값의 평균을 0으로 만들면, 손실 함수의 수렴이 빨라집니다!
  2. 같은 이미지를 256*256 px, 384*384px, 512*512px 3가지 버전으로 생성한 후, 이를 224*224 px로 랜덤으로 크롭합니다. 256*256 px 이미지에서 224*224 px로 크롭하면 대부분의 이미지가 잘 들어갑니다. 그러나 512*512 px 이미지에서 224*224 px로 크롭하면 이미지의 약 1/4 정도만이 들어갑니다. 이는 고양이의 경우 귀, 꼬리, 털 등이 잘려서 들어가는 것을 의미합니다. 이런 방식으로 일부분만 보고도 고양이로 인식할 수 있도록 학습이 진행됩니다.
  3. 테스트할때도 이 방법이 가장 낮은 오류율을 보였습니다.

결과적으로 이러한 전처리 방식을 사용하니 오류율이 10.4%에서 7.1%로 감소했다고 합니다.

밑의 표에 나오는 용어들을 간략하게 정리하겠습니다.

  • Multi-crop: AlexNet에서 사용한 방법으로, 이미지의 여러 위치에서 crop하여 좌상단에서 가운데까지 5개 crop에 좌우반전까지 적용하여 이미지를 10배로 증가시키는 방법입니다.
  • Dense: (1,1) Convolutional Layer처럼 동작하며 Fully-connected Layer를 대체하는 방법으로, 테스트 시 큰 이미지를 입력할 수 있습니다. 큰 이미지 입력 시 (1,1)로 처리되는 결과가 (2,2)로 나오며, 이 결과는 여러 위치에서 Crop한 후 평균화하는 것과 동일한 효과를 줍니다.

VGGNet에서는 Multi-Crop과 Dense를 따로 사용하면 성능이 향상되지만 결과는 거의 동일하며, 두 기법을 함께 사용하면 더욱 좋은 성능을 얻을 수 있습니다. 실행 속도가 빠른 Dense 사용을 권장했으나 결국엔 두 기법을 병행하는 것이 선택되었습니다.

ResNet

VGGNet과 유사한 방법이라 생략하도록 하겠습니다.


마치며  

실무에서는 가장 성능을 끌어올리는 방식이 이 Preprocessing 방법입니다. 가장 자주 사용하는 방법은
1. RGB 값의 평균을 빼는 것입니다, 성능이 좋아지는게 아니라 train 시 loss 수렴이 빨라집니다.
Augmentation, 데이터 증강 하는 방법으로는,
2. 좌우반전
3. 다양한 사이즈로 넣기

등이 있습니다.

Reference

12. Data Preprocessing & Augmentation

Augmentation은 원래 데이터를 부풀려서 성능을 더 좋게 만든다는 뜻이다. 대표적인 케이스가 VGG모델에서 많이 사용하고 벤치마킹하였다. VGG-D모델에서 256*256 데이터를 넣어주는 것보다 똑같은 사진을 256*256과 512*512 데이터를 따로 넣어주는 것이 미묘하지만 성능이 올라갔다. 에러가 3~5%까지 줄어든다고 한다.기본적으로 Augmentation을 넣어주면, 기본적으로 성능이 좋아진다는 결론도 나왔다. AugmentationAugmentation을 하는 중요한 이유1. Preprocessing과 augmentation을 하면, 거의 성능이 좋아진다.