-
[PyTorch] 프로그래머스 과제 - 미술작품 분류하기 2카테고리 없음 2024. 3. 28. 01:14
지난번글에 이어서 다른 방법들을 통해 정확도를 향상시켜 보려고 합니다.
1. timm 라이브러리 사용해서 pretrain된 모델 사용하기
timm 라이브러리를 사용하면 ImageNet으로 학습된 여러 이미지 분류 모델을 쉽게 가져다가 학습할 수 있습니다.
지원 모델로는 대표적으로 아래 모델들이 있고, 예시 코드에서 모델명만 교체해서 사용할 수 있습니다.
- 'efficientnet_b1'
- 'inception_v3'
- 'mobilenetv2_035'
- 'vit_small_patch8_224'
(다른 지원 모델 확인하기: timm.list_models())
'efficientnet_b0' 모델을 사용했을 때, 기존 convolution 모델을 사용했을 때 보다 epoch1 만에 좋은 성능을 보였습니다.
1-1. pretrain 모델의 일부 parameter는 freezing 시키고 일부만 파인튜닝하기
모델 전체를 다 파인튜닝하다보니 학습이 너무 오래 걸리더군요
따라서, 일부 layer만 학습해보기로 했습니다.
feature 추출부(convolution) layer를 전부 freezing하기에는 ImageNet 데이터와 제가 학습하는 미술작품 데이터가 꽤 다르기 때문에 convolution layer의 앞 쪽 일부분만 freezing 해보겠습니다.
model.name_parameters()로 확인해보니 blocks가 6까지 있고 그 뒤로 fc layer가 있어서
blocks5부터 fc layer만 학습하고 그 앞 부분은 freezing 하려고 합니다.
blocks.5가 등장했던 143 index 전까지만 requires_grad=False로 freezing 해주었습니다.
결과적으로, 학습 속도가 freezing 하지 않았을 때 보다 절반밖에 걸리지 않았고 학습도 더 안정적인 모습을 보였습니다.
2. Data Augmentation
transform 부분을 보강하다보니 train data와 test data에 개별적으로 적용해야해서
custom Dataset 객체를 만들어야했습니다.
(transform 변형 다른 종류 참고: https://blog.joonas.io/193)
3. 추론
데이터셋을 test시에는 아무 label이나 내 뱉도록 수정해야했습니다. (mode 추가)