코딩하는 해맑은 거북이

[컴퓨터비전] Annotation Data Efficient Learning 본문

AI

[컴퓨터비전] Annotation Data Efficient Learning

#CJE 2023. 3. 28.
본 게시물의 내용은 '부스트캠프 AI Tech - CV (오태현)' 강의를 듣고 작성하였다.
해당 글은 아래의 3가지를 다룬다.
📌 Data augmentation
📌 pre-trained information를 이용하는 방법
   - Knowledge Distillation (Teacher-student learning)
📌 unlabeled dataset을 이용해 학습하는 방법
   - Semi-supervised learning
   - Self-training

 

📌 Data augmentation

Q. 실제 존재하는 데이터는 biased data 인데, 여기서 발생하는 문제는?

만약 밝은 영상으로 이루어진 데이터들로 학습시킨다면, 어두운 이미지는 모델이 제대로 인식하지 못한다.

이는 이러한 데이터들이 실제 데이터를 충분하게 표현하지 못했기 때문에 발생한 문제이다.

하지만, 우리는 실제 데이터를 모두 탐색할 수 없고, 학습 데이터는 실제 데이터에서 샘플링된 것!

이러한 문제를 해결하기 위해 등장한 방법이 Data Augmentation 이다.

 

- Data Augmentation은 원본 데이터에 Brightness, Rotate, Crop 등 영상처리 기법을 적용해서 데이터를 늘려주는 것이다.

이러한 Data Augmentation 기법을 통해 만들어진 데이터를 Augmented data 라고 한다. 이를 통해 이루고자 하는 목표는 학습 데이터셋의 분포를 실제 데이터셋 분포와 비슷하게 만들고자 하는 것이다.

 

 

- 영상처리 기법 종류

1) Brightness adjustment

255의 상한선을 넘지않도록 일정 숫자를 더해주거나, 스케일링해서 밝기를 조절한다.

 

2) Rotate, filp

OpenCV에서 rotate 함수를 통해서 회전할 수 있고, Numpy의 flip 기능을 통해 상하좌우를 반전 할 수 있다.

 

3) Crop    → 굉장히 간단한데 의외로 강력한 방법

원본이미지의 일부를 잘라서 중요한 부분에 대해 강하게 학습시킬 수 있다.

Numpy에서 indexing을 통해서 쉽게 구현할 수 있다.

 

4) Affine transformation

변환 전후에도 선으로 유지되고(1), 기로/세로의 길이의 비율이 유지되고(2), 평행관계를 유지되는(3) 이러한 3가지 조건을 만족하는 transform을 의미한다. shear transform으로 불리기도 한다.

직관적으로 (입력에 점 3개, 대응되는 출력의 점 3개 쌍)을 getAffinTransform 함수를 통해 총 6개의 변환행렬 값을 가진 행렬을 반환이 된다. warpAffine 함수를 부르면 이미지가 변환된다.

 

5) CutMix

영상의 일부를 잘라서(Cut) 다른 영상과 합성하는 것(Mix)

합성할 때 각 영상의 label인 y도 잘라서 같이 넣어준다.

이 방법을 사용하면 의미있는 수준의 성능 향상이 일어나고, 물체의 위치를 더 정교하게 잡을 수 있다.

 

Q. 그렇다면 이러한 영상처리 기법들을 조합해보자! 그런데 어떤 조합이 성능이 향상될지, 또 조합 순서는 어떻게 할까?

이를 위한 방법은 RandAugment 이 있다.

RandAugment는 Random하게 Sampling해서 수행하고 평가해서 best sequece를 찾아준다!

랜덤하게 샘플링되어 조합된 하나의 기법의 sequence를 Policy라고 한다.

Augmentation policy는 어떤 Augmentation 기법을 적용할지, 이를 얼만큼 적용할지의 2개의 파라미터를 가진다.

이러한 방법을 통해 Best Augmentation Policy를 찾을 수 있다. 이는 쉽게 성능을 향상시킬 수 있는 방법이다

 

 

📌 pre-trained information를 이용하는 방법

- 데이터셋을 수집할 때, annotating하는 작업은 비용이 높은데다가 사람이 작업하기 때문에 퀄리티를 보장할 수 없다.

이때 사용하는 것이 Transfer learning 이다.

 

- Transfer learning은 기존에 미리 학습시켜놓은 사전 지식을 활용해서 연관된 새로운 태스크에 적은 비용으로 높은 성능에 도달할 수 있는 기술이다. 즉, 한 데이터셋에서 배운 지식을 다른 데이터셋에서 활용하는 것이다.

 

Q. 학습하고자하는 데이터셋이 다른데도 가능한가요?

4 종류의 데이터셋이 있다고 하자. 각각의 데이터셋에서도 일부 영상에서는 비슷한 패턴이 다른 데이터셋에서도 나타나기 때문에 가능하다. 그래서 한 데이터셋에서 배운 지식 중에 다른 데이터셋에 적용할만한 공통된 지식이 의외로 많이 있지 않을까에서 탄생한 것이 Transfer learning이다.

 

- Transfer learning의 접근 방법

1) Transfer knowledge from a pre-trained task to a new task

하나의 데이터셋에 미리 학습한 모델에서 Convolution Layer는 Freeze 해두고, Fully Connected Layer만 Update 해서 학습하는 것이다. 이는 적은 데이터로도 잘 학습된다.

2) Fine-tuning the whole model

하나의 데이터셋에 미리 학습한 모델에서 Fully Connected Layer만 Update 하는데, 여기서 Convolution Layer도 learning rate를 낮게(low) 잡아서 학습을 같이하고 Fully Connected Layer 는 learning rate를 높게(high) 잡아서 새로운 target task에 빠르게 적응할 수 있도록 학습한다.

해당 방법은 첫번째 방법보다 좀 더 많은 데이터가 필요하지만 성능은 훨씬 뛰어나다.

 

- Knowledge Distillation (Teacher-student learning)

pre-trained 지식을 더 이용하는 진보된 심플하지만 강력한 방법이다.

  *Teacher Model : 이미 학습된 모델 (Already trained)

  *Student Model : 학습되지 않은 모델 (Not trained)

이미 학습된 Teacher의 네트워크 지식을 더 작은 모델인 Student 네트워크에 주입해서 학습하는 것이다.

이는 모델압축(model compression)과 unlabeled dataset에서 가짜 레이블(pseudo-label)을 생성하는 방법으로 사용하기도 한다.

 

* Teacher-student network structure

1) Unlabeled Data 일 때

Input X 에 대해 Teacher Model과 Student Model에 동시에 Fitting해서 2개의 Output을 만든다. 해당 Output의 차이를 KL-Divergence Loss를 통해 측정해서 back propagation을 통해 Student만 업데이트 시킨다.

즉, Student Model이 Teacher Model의 따라하게(비슷하게) 만드는 학습법이라고 할 수 있다.

이는 레이블을 사용하지 않아서 Unsupervised Learning 이다.

 

2) Labeled Data 일 때

레이블이 존재하는 데이터라면, Ground Truth을 통해 나온 loss를 Student Loss와 Teacher Model을 따라하게 만들 수 있는 Loss를 Distillation Loss라고 한다.

여기서 각각의 값들의 전반적인 경향성을 Soft Label로 살펴보기 위해 Softmax를 통해 Soft Prediction을 사용한다.

이때 중요한 점은 Softmax with temperature(T) 이다. Softmax를 할 때, 입력값을 T로 나누어주는데 출력을 smooth 하게 만들어주는 역할을 한다. 이유는 smooth된 출력값이 극단적인 값보다 전반적인 분포를 파악하는데 유용하기 때문이다.

그리고 Distillation 에서는 semantic information 를 고려하지 않는다.

Softmax with temperature(T)

  • Distillation Loss
    • KLdiv (Soft label,Soft prediction)
    • Loss는 Teacher와 Student Network의 예측 결과 차이
    • Teacher Network를 따라하게 만드는 것
  • Student Loss
    • CrossEntropy (Hard label,Soft prediction)
    • Loss는 Student Network와 True Label의 예측 결과 차이
    • 옳은 답을 찾도록 학습

결론: 레이블이 있는 데이터는 Distillation Loss, Student Loss를 합쳐서 쓴다.

back propagation을 통해 Student Model이 업데이트되어 학습되게 한다.

 

 

cf) Hard Label vs Soft Label

Hard Label은 One-hot vector 방식으로, 정답 레이블은 n개의 클래스 중 1개만 1로 나타난다. 나머지는 0

Soft Label은 모델의 출력이 각 클래스에 대한 0~1 사이의 확률값으로 나타난다.

 

 

 

📌 unlabeled dataset을 이용해 학습하는 방법

레이블이 없는 데이터는 레이블을 해야하는 비용이 없으므로 많이 수집할 수 있다는 장점이 있다.

이를 이용하면 학습에 많은 데이터를 활용할 수 있으므로 좋지 않을까?

 

- Semi-supervised learning

적은 labeled data를 이용해서 많은 unlabeled data를 활용할 수 있는 방법이다.

레이블된 데이터를 통해 학습을 한 pre-trained model을 생성하고, 해당 모델을 통해 레이블이 없는 데이터에 pseudo-label(가짜 라벨)을 생성한다. 그래서 레이블이 없는 데이터는 pseudo-labeling unlabeled data를 얻게 된다.

그리고 Labeled dataset와 Pseudo-labeled dataset를 합쳐서 재학습하는 방법이다.

즉, Semi-supervised learning은 Unsupervised (No label) + Fully Supervised (fully labeled)라고 할 수 있다.

Semi-supervised learning

 

- Self-training

Self-training 은 앞서 배운 3가지

Data Augmentation + Knowledge distillation (Teacher-Student networks) + semi-supervised learning 인 방법이다.

해당 논문에서는 레이블이 있는 1M개의 ImageNet Dataset와 레이블이 없는 300M 데이터로 학습하였다.

 

1. ImageNet data을 통해 학습하여 Teacher Model을 먼저 생성하고

2. 레이블이 없는 데이터를 pre-trained Teacher Model을 통해 pseudo-labeled data 를 만든다.

3. ImageNet data와 pseudo-labeled data를 합쳐 RandAugment를 이용해서 augment된 방대한 데이터를 학습하여 Student Model을 생성한다.

4. 이전 Teacher Model을 Student Model로 바꾼다.

5. 2~4과정을 여러번 반복하여 New Student Model을 생성한다.

→ Knowledge distillation에서 Teacher Model이 Student Model 보다 큰 게 일반적이였는데,

    Self-training에서는 매 라운드마다 더 큰 Student Model을 채용해서 학습하므로, Student Model이 점점 커지게 된다.

 

 

 

 

 

Comments