Deep Learning/CV

[boostcourse] 2. 컴퓨터 비전과 딥러닝 - 데이터 부족 문제 완화

hyeonzzz 2024. 6. 11. 16:33

데이터 부족 문제 완화

Data Augmentation

Neural network : 데이터에 포함된 정보를 압축하여 weight로 주입하는 모델

하지만 실제 데이터셋들은 항상 bias되어있다.

 

사람이 촬영한 이미지는 대부분 사람이 보기 좋은 구도로 촬영되었기 때문에 bias가 데이터에 존재한다고 볼 수 있다. 실제로 위와 같은 평균 이미지를 살펴보면, 특정한 패턴이 보이는 것을 확인할 수 있다.

 

 

실제로 사용하게 되는 데이터는 real data distribution에서 샘플링된 일부이며 대부분의 데이터는 확보하지 못한다.

또한 데이터에 bias가 존재한다.

 

데이터에 bias가 존재하는 것이 왜 문제가 될까?

 

밝은 이미지로만 구성된 학습 데이터셋을 가정할 때, test time에서 한번도 보지 못했던 어두운 고양이 사진이 입력된 경우에 올바른 분류를 수행하기 어렵다. 이는 데이터셋이 충분히 real data distribution을 표현하지 못했기 때문에 발생한 문제이다.

 

그렇다면 어떻게 real data distribution과의 차이를 좁힐 수 있을까?

 

 

Data Augmentation 을 이용한다. 위의 그림과 같이 학습 데이터의 이미지를 기반으로 이미지 회전, 밝기 조절 등과 같은 기본적인 동작을 수행하여 학습 데이터의 사이즈를 증가시키는 방법이다.

 

1. Brightness adjustment

  • 이미지 픽셀의 RGB 값에 특정한 상수를 더하거나 곱하여 이미지의 밝기를 조절할 수 있다.
  • RGB 값이 0-255 사이의 값을 가지므로 이 점에 유의하여 값을 제한(clipping)해야한다.

 

2. Rotate, flip

  • 회전 혹은 반전의 경우, 위와 같이 OpenCV 라이브러리를 활용하여 쉽게 구현할 수 있다.

 

3. Crop

  • 중요한 파트에 대해서 더 강하게 학습하도록 한다.
  • 이미지 크롭의 경우, 리스트 인덱싱을 통해 간단하게 구현할 수 있다.

 

4. Affine transformation

  • 선, 길이 비율, 평행 관계가 유지된다.
  • 세 개의 변환 전후 대응쌍을 설정하여 변환행렬을 계산하고, 변환행렬을 기반으로 OpenCV 라이브러리를 활용하여 이미지에 affine transformation을 적용시킬 수 있다.
  • warp : 기하학적으로 영상을 비틀거나 회전하거나 픽셀의 위치를 옮겨주는 작업

 

5. CutMix

  • 영상의 일부를 잘라서 다른 영상과 합성하는 것
  • 영상만 합성하는 것이 아니라 라벨도 같은 비율에 따라 합성해준다.

 

6. RandAugment

  • 한번에 두 개 이상의 기법을 적용하는 경우
  • RandAugment 방법을 사용하여, 자동으로 어떤 조합(policy)이 가장 좋은 성능을 보여줄지 탐색할 수 있다.
  • 사용가능한 data augmentation 옵션들을 입력해주었을 때, 그 리스트에서 랜덤으로 샘플링하여 적용하고 성능을 평가하는 방식으로 동작한다.
  • Policy : 하나의 augmentation 기법들의 순서

 

Annotation Efficient Learning

1. Transfer Learning

새로운 task에 대해서 동작하는 인공지능 모델을 개발하기 위해선 먼저 레이블링된 데이터를 확보해야하는데, 이 data annotation 과정은 시간적으로, 금전적으로 부담되는 작업일 뿐더러, annotation 품질에 대한 이슈도 있어 매우 어려운 작업이다. 이런 어려움을 극복할 수 있는 실용적인 방안으로 Transfer Learning을 활용할 수 있다.

 

Transfer learning : 한 데이터셋에서 학습하며 배웠던 지식을 다른 데이터셋에서 활용하는 기술

 

위의 그림은 서로 다른 4개의 task를 위한 데이터셋들이다. 하지만 모두 이미지 데이터셋이라는 공통점이 있으며, 심지어 일부 공통된 패턴을 확인할 수 있다.

가령 (a) 데이터셋의 승용차 이미지에서 차량 바퀴와 (b) 데이터셋의 트럭 이미지에서 차량 바퀴를 공통된 패턴으로 확인할 수 있다. 이렇게 한 데이터셋을 통해 학습한 지식이 다른 데이터셋에서도 공통된 부분이 많아 유의미하게 활용될 수 있지 않을까? 라는 것으로 부터 Transfer Learning이 고안되었다.

 

방식1 - FC layer의 가중치만 업데이트

  • 사전 학습된 모델에서 마지막 FC layer들만 떼어내고, 새로운 FC layer들로 교체하여 기존 모델 가중치들은 학습시키지 않고(freeze), 새로 교체한 FC layer의 가중치만 업데이트하는 방식
  • 기존 학습된 모든 지식을 그대로 가지고 있다.
  • 적은 파라미터만 학습시키면 되기 때문에 작은 사이즈의 데이터셋으로도 비교적 좋은 성능을 기대할 수 있다.

 

방식 2 - 전체 모델을 그대로 fine-tuning

  • 전체 모델을 그대로 fine-tuning하는 방식
  • 새로운 FC layer들로 교체하는 것은 동일하지만 Convolution layer의 가중치 또한 업데이트를 진행한다.
  • 사전 학습된 지식을 최대한 보존하기 위해 Convolution layer의 learning rate는 FC layer에 비해 작은 값으로 설정하여 학습을 진행한다.
  • 첫번째 방식보다 데이터셋의 사이즈가 클 때 사용한다.

 

2. Knowledge distillation

Knowledge Distillation : 사전에 학습한 Teacher model을 활용하여 그보다 작은 Student model을 학습시키는 방법

큰 모델의 지식을 작은 모델에 효과적으로 주입하는 방식으로 모델 압축에 주로 활용되는 방법이다. 또한 레이블링되지 않은(unlabeled) 데이터셋에 pseudo-lableling을 적용하기 위한 목적으로도 활용된다.

 

Teacher-student network 구조

 

  • 사전 학습시킨 Teacher model을 준비하고, Student model을 초기화한다. 이때 student model은 더 작은 네트워크를 쓰는 것이 일반적
  • 같은 입력 X에 대한 Teacher model과 Student model의 각 출력을 바탕으로 KL divergence loss를 계산하여 Student model을 학습시킨다. 이때 KL divergence loss를 활용할 경우 두 출력 간의 distribution이 비슷하게 만들어지도록 학습이 진행되기 때문에, Student model이 Teacher model의 행동을 모방하도록 학습시키는 방식이다.

 

레이블링된 데이터를 가지고 있을때 Knowledge distillation을 쓰는 방법

  • 이 세팅에서는 두 가지 Loss를 사용한다.
  • 하나는 앞서 설명했었던 KL div.를 계산하는 Distillation Loss, 또 다른 하나는 Ground truth와 Student model의 출력을 바탕으로 cross-entropy loss를 계산하는 Student Loss이다.

Distillation Loss

  • teacher와 student의 prediction 결과의 차이를 측정 
  • Teacher model의 행동을 모방하기 위한 것

Student Loss 

  • student network가 출력을 한 것과 true label이 일치하도록 만드는 것
  • 정답을 맞추기 위한 것

Distillation Loss와 Student Loss의 가중합을 최종적인 Loss 값으로 사용한다.

 

주의깊게 볼 만한 두 가지 포인트

  • 첫 번째로 Teacher model의 경우, softmax 출력 값에 argmax를 수행한 hard label(one-hot vector)이 아닌 softmax 출력 값을 그대로 활용하는 soft label의 형태로 결과를 출력하여, 이 출력 값을 Loss 계산에 사용한다는 것이다.
  • 두 번째는 softmax 함수에 Temerature T값을 인자로 입력한다는 것이다.

 

  • Hard label (One-hot vector) : 클래스에 속하는지 나타내기 위해서 0,1의 binary 형태로 나타낸다.
  • Soft label : 사이값들이 존재한다.

knowledge distillation에서는 모델이 어떻게 생각하는지 확인하기 위해 soft label을 사용한다.

 

Softmax with temperature (T)

  • Normal Softmax : 출력의 값을 극단적으로 벌려준다.
  • Softmax with temperature T : T로 나눠주면 중간값도 갖기 때문에  smooth한 결과값을 얻을 수 있어(전반적인 분포를 얻을 수 있어), 결과적으로 Student model이 Teacher model의 동작을 더욱 더 잘 모방할 수 있게 된다.

 

3. Leveraging Unlabeled Dataset for Training

레이블링된 데이터가 한정적인 상황에서, 레이블링되지 않은 데이터를 활용하여 성능을 높히는 방법

 

Semi-supervised Learning

: 레이블링되지 않은 큰 데이터 + 레이블링된 작은 데이터를 모두 학습에 활용하여 데이터 부족 문제를 효과적으로 완화하는 방법이다.

 

구체적인 예시로 다음의 그림과 같이 pseudo-labeling을 활용하는 방법이 있다.

 

  1. labeled dataset으로 모델을 먼저 pre-train 한다.
  2. unlabeled dataset의 pseudo-label을 모델을 통해 가짜로 생성한다.
  3. pseudo-labeled dataset과 labeled dataset을 합쳐 모델을 재학습시킨다.

 

4. Self-training

Data Augmentation + Knowledge Distillation + Semi-supervised Learning

2019년 ImageNet classification에서 SOTA 성능을 달성했다.

Self-training with noisy student

  1. ImageNet을 이용해 Teacher Model을 학습시킨다.
  2. pseudo-label을 Teacher Model로 생성해 300M pseudo-labeled data를 만든다.
  3. labeled data와 300M pseudo-labeled data를 합쳐서 Student Model을 학습시킨다. (RandAugment 이용)
  4. Student Model을 Teacher Model로 삼아 300M pseudo-labeled data를 만든다.
  5. labeled data와 300M pseudo-labeled data를 합쳐서 New Student Model을 학습시킨다.
  6. 또 반복한다. (여기서 Student Model의 사이즈가 계속 커진다.)

 

 

unsupervised dataset과 supervised dataset을 잘 합쳐서 성능을 향상시켰다.