base 모델을 찾기 위한 pretrained 모델별 성능비교를 해봤습니다.
optimizer, dataset, batchsize, criterion 등은 동일하고,
모델에 따라 출력 레이어에서 1) dropout(0.5) 추가나 2) fc layer만 변경, 3) 기존 모델 그대로 사용 등 약간의 차이만 있습니다.
아래는 모델이외의 고정된 파라미터 값입니다.
대부분 모델은 fc layer를 변경하였고 일부 모델은 변경하기 애매해서 그냥 사용하였습니다
model이름 (val accuracy 최고점 / 10epochs 학습시간)
resnet18(0.7131/ 4:03)
resnet18 + dropout(0.7351/4:03)
resnet18 + 마지막 layer block 제거(0.7313/4:02)
resnet18 + freeze + dropout(0.5635/4:04) -> freeze 후 dropout을 적용하면 성능이 매우 떨어지는 것을 확인(regularization이 너무 큰듯)
resnet18 + 3번째 layer block까지 freeze + dropout(0.7169/4:03)
resnet18 + 3번째 layer block까지 freeze + dropout(0.7134/4:02)
alexnet(0.1844/2:46) -> 중단/성능이 너무 안좋음
googlenet(0.7327/4:02) -> fc그대로사용, pretrain된 fc layer여서 높은 성능일 수도 있음
googlenet + fc변경(0.7207/4:02)
resnext50_32x4d(0.7418/5:44)
wide_resnet50_2(0.7049/8:09)
mnasnet1_0(0.3159/4:01)
squeezenet1_0(0.7198/3:59)
shufflenet_v2_x1_0(0.7172/3:59) -> 초반부터 꾸준히 높은 성능을 유지하는 듯?
densenet161(0.7228/9:52)
vgg16(0.7219/9:08)
피해야할 모델:
alexnet(0.1844/2:46)
__mnasnet1_0__(0.3159/4:01)
resnet18 + freeze + dropout(0.5635/4:04)
성능 순(top3):
__resnext50_32x4d__(0.7418/5:44) -> model size: 1515.25
googlenet(0.7327/4:02) -> model size: 420.67
resnet18 + dropout(0.7351/4:03) -> model size: 292.85
모델 사이즈가 크다고 점수가 무조건 높은 건 아님
vgg16(0.7219/9:08) -> model size: 1386.18
결론
여러 모델들을 비교해보았지만 몇몇 모델 빼고 엄청 유의미하게 차이나는 모델은 없는 것 같습니다.
상황에 따라 다른 결과가 나올 수 있기 때문에 상위 모델 몇가지를 골라 비교해보면 좋을 것 같습니다.
※ 하이퍼 파라미터의 변화 / 데이터셋의 변화에 따라 성능은 달라질 수 있습니다.
피해야할 모델:
성능 순(top3):
모델 사이즈가 크다고 점수가 무조건 높은 건 아님 vgg16(0.7219/9:08) -> model size: 1386.18
결론