0614 - Pretrained backbone, Fine tuning

zln·2022년 6월 14일
0

학습한 내용

Pretrained backbone

Backbone(Feature Extractor)

  • Detection, Segmentation 등 고도화된 이미지 처리 인공지능 모델에서, 이미지 특징 추출을 위해 사용되는 Image Classification 모델
  • Pretrained: ImageNet 등 데이터셋에 대해 사전 학습된 모델의 가중치(weight)

Backbone을 사용해야 하는 이유

  • Object detection의 Faster R-CNN, Libra R-CNN의 경우, backbone 모델에 따라 판독 성능이 차이나는 것을 확인할 수 있음

  • ResNet-50-FPN, ResNet-101-FPN, ResNeXt-101-FPN 순으로 정확도 향상

  • ImageNet 기반에서 1~2% 성능 차이가 나는 경우 실제 모델 적용 상황(targettask)에서도 2~3% 이상 성능 차이 발생

  • 그림의 왼쪽, 오른쪽 column은 ImageNet Classification에서 1~2% 성능 차이가 나는 모델로, COCO2017에서 backbone으로 사용되었을 때 2~3% 성능 차이를 보였으나, 실제 detection 결과는 매우 차이남

  • 더 좋은 Backbone을 사용한다면 더 높은 detection 수준을 가질 것으로 기대

Fine tuning

  • Transfer learning: Pre-trained model을 가져와 사용하는 것

  • Fine tuning: 사전 학습된 가중치를, 사용 목적에 맞도록 업데이트하는 것

  • Object detection의 YOLO v1 모델을 가져와 transfer learning을 진행할 때, 추가된 layer의 가중치를 학습하기 위해 backbone의 가중치를 고정하고 미세 튜닝

  • 사전 학습 모델을 자신의 프로젝트에 적합하도록 변형하기 위해, 기존 모델의Classifier을 적절한 Classifier로 대체함

Fine tuning 전략

  • 일반적으로 아래의 3가지 전략 중 하나를 선택해 finetuning 진행

1) 전체 모델 새로 학습 : 사전 학습된 모델의 구조를 사용하되, 데이터셋에 맞춰 새로 학습시키는 방법. 대규모 데이터셋과 우수한 컴퓨팅 능력이 필요함

2) Convolutional base의 일부만 고정하고, 나머지 계층과 Classifier 새로 학습 : 신경망의 가중치 파라미터 중 어느 정도까지 재학습할지 결정해야 함
● 낮은 라벨 계층: 모든 문제 해결에 있어 보편적인 특징 추출
● 높은 레벨 계층: 문제에 따라 달라지는 구체적인 특징 추출
데이터셋이 작은데 많은 레이어를 재학습하는 경우 Overfitting 주의

3) Convolutional base는 고정하고, Classifier만 새로 학습 : Convolutional base는 feature extractor로 계속 사용하고, Classifier만 재학습 시키는 방법. 컴퓨팅 연산이 부족하거나 데이터셋이 너무 작은 경우 및 해결하고자 하는 문제와 사전에 학습된 모델이 해결할 수 있는 문제가 매우 비슷한 경우 고려할 수 있음

  • Fine tuning을 할 때는 이전에 학습된 내용이 지워지지 않도록 작은 Learning rate를 사용하는 것이 바람직함

실습 1 - Yoga Poses 이미지 분류

  • 필요한 라이브러리, class 선언

  • 데이터 비율 체크

  • 데이터 train과 validation을 위한 데이터 split

  • Custom Dataset 만들기

  • Data Augmentation, Data loader

  • train datda, val data check

  • data loader, loss function, device

  • model choose

이렇게 함수구현까지만 했고 나머지 부분은 내일 진행

학습한 내용 중 어려웠던 점

알 수 없는 오류가 떠서 실행이 안되었다.

해결방법 작성

구글에 검색한 후 해결

학습 소감

코드 분석이 과제인데 너무너무넘누너무너무 너무 어렵다

0개의 댓글