|
|
제안 방법: Two-Stage Fine-Tuning
stage 1: 부분 학습
stage 2: 전체 fine-tuning
구현 방법
함수 구현
stage 1 -> freeze_backbone
stage 2 -> unfreeze_all
> 먼저 자신이 쓰는 model의 구조를 파악하고 어느정도(층)까지 freeze 할건지 정해야 함
> 이 과정이 젤 중요한 듯... 잘못하면 아예 성능이 이상해짐
사용한 resnet50 구조
stage1 - freeze backbone
stage2 - unfreeze all
위와 같은 방식으로 epoch 횟수를 조정해서
n에폭까지는 freeze, 이후 에폭부터는 unfreeze하는 방식임
훈련 결과
Loss가 높고 acc가 높은 이유...
데이터 증강으로 인해 학습 데이터가 다양화 됨
> 모델이 정답은 맞추는데 확신이 낮으면 정확도는 높아지는데 loss는 커진다고 한다(...)
CrossEntropyLoss는 확률 분포의 확신 정도를 평가함 -> Accuracy는 정답만 맞추면 올라감
따라서 이런 결과도 나올 수 있다고 함...
실제로 이전 resnet101 돌렸을 때 정확도는 90점 넘었지만 현재 돌린 resnet50 fine-tuning 은 90점 이내임...
리더보드 평가 결과는 resnet50으로 fine-tuning한게 더 좋음
https://cafe.daum.net/SmartRobot/RoVa/2216
다음 할 일
resnet101로 fine-tuning (resnet101을 그냥 돌렸을 때와의 차이를 보기 위함)
위 학습을 통해 fine-tuning이 성능을 확실히 올린다면 적용
early stop 기능 추가해보기
이전 훈련했던 모델 가져와서 재학습 해보기