강아지와 고양이를 구분하는 딥러닝 모델을 구축하려고 할 때, 많은 데이터가 필요하다.
그러나 보통 데이터셋이 적음…. → 데이터셋의 크기가 적으면 학습이 잘 안됨
이 때 어떻게 딥러닝 모델을 구축할 수 있을까?
그에 대한 해답!
ImageNet 데이터를 미리 학습해 놓은 딥러닝 모델 (Pre-Trained Model)을 가져와 Fine- Tuning 시키는 방법을 사용한다. 이러한 방법을 Transfer Learning이라고 한다.
Pre-Trained Model은 보통 유명한 것들을 쓰므로 쉽게 WEB에서 가져올 수 있다. Pre-Trained Model을 로드한 후, Fully Connected Layer 앞의 네트워크의 가중치를 가져오고, Fully Connected Layer를 다시 설계하는 방식으로 진행이 된다.
Transfer Learning은 크게 4가지로 구분할 수 있습니다.
앞선 예를 계속 들자면,
개와 고양이를 분류하는 딥러닝 모델을 만들고자 할 때, Fully Connected Layer를 그대로 사용하고, Output Layer만 디자인하기도 한다. Pre-Trained Model은 우리가 분류하고자 하는 문제인 (강아지 , 고양이)보다 훨씬 큰 문제를 푸는 모델이기 때문에, Output Layer의 Dimension을 수정해야한다.
그 후, 강아지와 고양이 데이터를 가지고 Input으로 학습을 시켜야한다. 일반적으로 Pre-Trained Model의 Fully Connected layer 이전의 Weight는 학습시키지 않는다. 이 때는 Weight를 freezing한다는 표현을 쓰며, 이 것은 Fully Connected Layer 부분의 weight만을 가지고 학습을 진행하는 것이다.
→ 이 과정을 Fine Tuning이라고 한다.
이제 간단한 실습을 해보도록 합시다.!
ResNet18 모델 구조를 활용해 개미와 벌 이미지를 분류해보도록 하겠습니다.
다음 코랩 링크를 참고해주세요!
Pre-Trained 되지 않은 모델을 사용하고 학습을 진행한 결과, 학습시간이 오래걸리고 accuracy가 굉장히 낮다.
그러나, Pre-Trained 된 모델을 활용해 학습을 진행한 결과, 학습시간이 짧고 accuracy가 굉장히 높다.
https://colab.research.google.com/drive/1dtFQfpRX3zXEI6gN5dammuolfJsh9szO#scrollTo=qCvLYBrDF-tj