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로 알려져 있어요.

더 알아보기