딥러닝을 공부하면서 여러가지 코드나 라이브러리를 보면
backbone, fine-tuning, transfer learning 등의 용어가 자주 등장합니다.
이 용어들의 차이점을 알아봅시다.
모델의 layer가 많아질수록 학습되는 parameter의 양이 많아지고 학습시간이 증가하게 됩니다.
성능이 좋은 대부분의 모델엔 수 많은 layer가 있고 학습시간이 수십일까지 걸리기도 합니다.
공개된 모델과 동일한 Dataset과 용도로 사용할때는 그냥 가져다 쓰면 되지만, Dataset나 용도가 달라졌을때는 어떻게 해야될까요?
예를들면 30가지 class를 분류하던 모델을 개,고양이 2가지 class를 분류하게 만들고 싶을때 혹은 내가 직접만든 custom dataset를 이용해 model을 만들고 싶을때 처음부터 학습해서 수십일의 시간을 써야될까요?
이 때 사용하는것이 Fine-tuning 입니다.
말 그대로 공개된 모델을 튜닝해서 사용하는것 입니다.
VGG net과 같이 이미 학습된 모델(Pre-trained Model)에서 feature map 생성부분인 CNN layer와 분류부분인 FC layer(fully-connected layer)를 용도에 맞게 수정해 주는것 입니다.
이 때, classification이 아니라 object detection이나 segmentation등을 수행하는 모델을 만든다면 분류부분인 FC layer가 필요없어 CNN layer만 가져다 사용할수도 있는데 이것을 backbone으로 사용한다고 합니다.
Fine-tuning을 자세히 살펴보면 크게 4가지 경우가 있습니다.
Overfitting이 발생하지 않을정도로 큰 데이터셋과 pre-trained model의 학습에 사용된 dataset과 많이 다른(유사하지 않은) dataset을 사용하는 경우입니다.
이 경우, 기존 학습에 사용된 learning-rate(이후, lr)의 1/10으로 lr을 적용하여 Conv. layer와 FC layer에 대해 학습을 진행합니다.
lr을 너무 크게 조정하면 모델이 완전히 새로 학습되어 fine-tuning을 사용하는 의미가 없어지기 때문입니다.
Conv. layer는 input에 가까운 계층일수록 선과 색과 같은 일반적인 특징을 학습합니다. output과 가까운 계층일수록 class 분류와 관련된 세세한 특징들을 학습합니다.
유사한 dataset을 사용한다면 시간절약을위해 Conv. layer의 후반 계층과 FC layer만 학습을 진행해줍니다. 학습을 하지 않는 부분은 lr=0, 학습을 하는 부분은 lr = 기존의 1/10 으로 지정해줍니다.
가장 Challenge한 경우입니다. 데이터가 적기때문에 overfitting의 위험성이 있어 Conv. layer를 전부 학습시키는건 피해야합니다. Conv. layer에서 어느정도 계층을 학습할지 잘 정해서 학습시켜야 합니다. 역시 FC layer는 모두 학습합니다. 이 경우 data augmentation을 통해 데이터양을 늘려주기도 합니다.
Dataset이 작기때문에 Conv.layer는 학습하지 않고 FC layer만 학습합니다.
Fine-tuning은 이미 학습된 안정적인 가중치들을 조금씩 바꾸는 방법입니다. 따라서 새로운 layer를 붙이는것에는 주의를 기울여야 합니다. random한 가중치를 토대로 모델이 학습될 수 있기 때문입니다. 기타 주의할점은 아래와 같습니다.
Fine-tuning과 비슷한 개념으로 볼 수 있습니다.
Fine-tuning은 Pre-trained model의 가중치를 재학습 시키는것을 말합니다.
Transfer learning은 Pre-trained model을 가져다 사용하는것을 말합니다.
Pytorch 에서는 VGG, ResNet을 주로 사용합니다.
Backbone network는 classification용으로 만든 모델(ResNet등)을 FC layer부분을 바꿔 다른용도인 Detection, Segmentation, Pose Estimation 등으로 사용하는 것을 말합니다.
입력을 받아 backbone network model을 이용해서 feature extraction을 진행한 뒤, 용도에 맞는 모듈로 전달해 처리합니다.
참고 사이트
https://inhovation97.tistory.com/31
https://jeinalog.tistory.com/13