torchvision 사용법 (resnet50 로드)
torchvision 사용법 (resnet50 로드)
PyTorch의 torchvision에서 ResNet을 사전학습 가중치와 함께 아주 간단하게 불러올 수 있어요.
모델 빌더
torchvision.models.resnet50(*, weights: Optional[ResNet50_Weights] = None,
progress: bool = True, **kwargs)
weights를 지정하지 않으면 사전학습 가중치를 쓰지 않고, weights='DEFAULT' 또는 weights='IMAGENET1K_V2'로 사전학습 가중치를 쓸 수 있어요.
사전학습 가중치 비교
ResNet50_Weights.IMAGENET1K_V1(원본 논문 재현):
- acc@1: 76.13, acc@5: 92.862
- num_params: 25,557,032, GFLOPS: 4.09
ResNet50_Weights.IMAGENET1K_V2(= DEFAULT, torchvision 새 레시피):
- acc@1: 80.858, acc@5: 95.434
- num_params: 25,557,032, GFLOPS: 4.09
전처리 파이프라인
전처리 변환은 ResNet50_Weights.IMAGENET1K_V1.transforms 같은 형태로 제공돼요.
- V1: 이미지를
resize_size=[256](BILINEAR)로 리사이즈 후crop_size=[224]중앙 크롭 - V2:
resize_size=[232]로 리사이즈 후crop_size=[224]중앙 크롭 - 두 경우 모두
mean=[0.485, 0.456, 0.406],std=[0.229, 0.224, 0.225]로 정규화
참고 (ResNet V1.5)
TorchVision의 bottleneck은 다운샘플링 stride를 두 번째 3x3 conv에 두는데, 원본 논문은 첫 1x1 conv에 둬요. 전자가 정확도를 높인 변형으로 ResNet V1.5로 알려져 있어요.