본문 바로가기
머신러닝-딥러닝/study

0120_DL study (Finetuning,pretrained,Pseudo labeling,tta)

by 복복씨 2022. 1. 20.

1. transfer learning

transfer과 finetuning은 혼동될 수 있는 개념인 것 같습니다. 거의 transfer learning = finetuning으로 봐도 무방합니다.

imagenet이라는 큰 데이터로 pretrain된 backbone을 이용해 feature map을 뽑아내고, 아래 4가지 처럼 fine tuning을 자신의 데이터셋에 맞게  fc layer만 다시 설계하는 겁니다!

 

object detection이나 segmentation같이 vgg net의 CNN을 classification이 아닌 feature extraction으로만 쓰는 경우는 transfer learning이라고 하지는 않고 vgg net의 CNN을 backbone으로만 썼다고 합니다.

하지만 task가 바뀐 이런 경우에도 자신의 데이터에 더욱 fit하게 backbone을 다시 학습 시킨다면, finetuning이라고 합니다.

 

출처 : https://inhovation97.tistory.com/31

 

Transfer learning & fine tuning의 다양하고 섬세한 기법

우리가 어떤 문제에 직면했을 때 해당 문제와 비슷한 결과들이 있다면 훨씬 수월하고 빠르게 문제를 해결해 나갈 수 있을 겁니다. 이번에는 바로 그 개념인 *Transfer learning과 **fine tuning에 대한 내

inhovation97.tistory.com

2. Fine tuning

기존에 학습되어져 있는 모델을 기반으로 아키텍쳐를 새로운 목적(나의 이미지 데이터에 맞게)변형하고 이미 학습된 모델 Weights로 부터 학습을 업데이트하는 방법을 말한다. 

 

- 모델의 파라미터를 미세하게 조정하는 행위

(특히 딥러닝에서는 이미 존재하는 모델에 추가 데이터를 투입하여 파라미터를 업데이트하는 것을 말한다.)

 

파인튜닝은 정교한 파라미터 튜닝이라고 생각하면 되는데 정교한 파라미터가 키포인트들 이다.

고양이와 개 분류기 를 만드는데 다른 데이터로 학습된 모델(VGG16, ResNet 등) 을 가져다 쓰는 경우를 생각해보자.

 

VGG16 모델의 경우 1000 개의 카테고리를 학습시켰기 때문에 고양이와 개, 2개의 카테고리만 필요한 우리 문제를 해결하는데 모든 레이어를 그대로 쓸 수는 없다.

 

따라서 가장 쉽게 이용하려면 내 데이터를 해당 모델로 예측(predict)하여 보틀넥 피쳐만 뽑아내고, 이를 이용하여 어파인 레이어(Fully-connected layer) 만 학습시켜서 사용하는 방법을 취하게 된다.

하지만 이 경우는 파인튜닝이라고 부르지 않는다. 피쳐를 추출해내는 레이어의 파라미터를 업데이트 하지 않기 때문이다.

 

이렇게 이미 학습된 pretrained model을 불러와서 pretrained model의 파라미터를 적용하는 transfer learning을 합니다.

이 과정에서 현재는 개와 고양이 이진 분류만 하면 되므로 불러온 모델이 현재 task에 좀 더 집중하도록 fine tuning을 해주는 것입니다. 새로운 데이터로 다시 한 번 가중치를 미세 조정 해주는 것

여기서 이미지넷에 쓰인 모델을 쓰기 위해서는 이미지넷은 class 1,000개를 분류하는 모델이었으므로 fc layer를 이진분류로 바꿔주는 등의 조작이 필요합니다.

 

어파인 레이어를 업데이트 하지 않냐고 생각할 수 있지만 내가 새로 구성한 레이어이기 때문에 업데이트가 아니며 초기 웨이트가 랜덤이기 때문에 정교하지도 않다.

파인튜닝을 했다고 말하려면 기존에 학습이 된 레이어에 내 데이터를 추가로 학습시켜 파라미터를 업데이트 해야 한다



출처: https://eehoeskrap.tistory.com/186 [Enough is not enough]

 

3. Pseudo Labeling / meta Pseudo Labeling

- Image classification 분야에서 EfficientNet에 Meta Pseudo Lable을 적용한 모델이 성능이 괜찮다고 함.

 이 논문에서 제안하는 신경망은 labeled data와 unlabeled data를 지도 학습 방법으로 동시에 학습하는 신경망입니다. unlabeled data(Pseudo-Labels)는 예측된 확률이 가장 높은 클래스를 True label로 갖습니다. 그리고 이것은 Entropy Regularization과 동일한 효과를 갖고 있습니다. #

- GPU 성능을 고도로 요구하기에 일반 학습을 할 때 적합하지 않는다.

- Meta Pseudo Labeling은 또 다름/ pesudo Labeling은 semi supervised learning에서 쓰는 하나의 방법임.

 

 

 

4. TTA

model을 test할 때에도 Data Agumentation을하는것.

원본으로 부터 변형된 여러가지 Agumentation을 통해 최종분류 값을 예측한다.

직관적으로 모델의 한가지 이미지를 주는것보다는 여러가지 변형된 이미지를 주어 평가를 하게 되면 발생하는 오차는 작아진다. TTA를 쓰게되면 모델이 편향된 학습 결과를 가지고 있을 때, 그러한 편향에서 벗어나 좀 더 좋은 예측을 하게 되는것.

 

  • TTA는 일종의 Ensemble 기법이다.
  • Ensemble이란 일반적으로 어떤 데이터에 대해 여러 모델의 예측결과를 평균내어 편향된 데이터를 억제하는 역할을 함으로써 정확도를 높이는 데에 사용된다.
  • 이와 마찬가지로 이미지 task에서 예측을 할 데이터의 조도가 어둡거나 밝은 데이터, 객체가 작은 데이터 등과 같이 편향된 데이터가 있을때 여러 Augmentation 기법을 적용해 평균을 내게 되면 그냥 모델의 output을 예측으로 사용할때 보다 일반적으로 더 높은 성능을 보인다.
  • 결국 TTA는 모델의 정확도가 중요할 때(Competetion과 같은 상황) 사용하면 좋다.

#그니까 TEST SET을 어그멘테이션한걸 앙상블을 하는거구나!!!!!!!!!!!!!!!!!!!!