Python for AI, Embedded/Deep Learning: PyTorch & AI Modeling

PyTorch로 Pretrained Model 활용하기: ResNet과 VGG 완벽 비교 가이드

임베디드 친구 2026. 5. 25. 16:47
반응형

컴퓨터 비전 분야에서 딥러닝 모델을 처음부터 학습시키는 것은 막대한 데이터와 연산 자원이 필요합니다. 이러한 문제를 해결하기 위해 대형 데이터셋으로 미리 학습된 가중치를 활용하는 전이 학습(Transfer Learning)이 대세로 자리 잡았습니다. 이번 포스팅에서는 현업과 연구에서 가장 널리 쓰이는 대표적인 사전 학습된 모델인 VGG와 ResNet의 핵심 구조를 살펴보고, PyTorch를 활용해 실무에 적용하는 방법을 알아보겠습니다.

Generated by Gemini AI.

핵심 요약 3줄

  • 사전 학습된 모델은 대규모 데이터셋(ImageNet 등)에서 검증된 가중치를 가져와 학습 속도와 성능을 극대화합니다.
  • VGG는 3x3 커널을 일관되게 사용하여 네트워크를 깊게 쌓았고, ResNet은 스킵 커넥션 기반의 잔차 블록으로 기울기 소실을 해결했습니다.
  • PyTorch의 torchvision을 이용하면 몇 줄의 코드만으로 두 모델을 불러와 특징 추출이나 미세 조정에 바로 활용할 수 있습니다.

1. 사전 학습된 모델(Pretrained Model)이란?

사전 학습된 모델은 대형 데이터셋을 활용해 이미 학습을 마친 신경망 모델을 뜻합니다. 모델을 처음부터 학습하는 대신 기존의 가중치를 가져와 특정 작업에 맞게 조정(Fine-tuning)하거나 특징 추출(Feature Extraction) 용도로 사용합니다. 데이터가 부족하거나 컴퓨팅 자원이 한정된 환경에서 개발 시간을 단축하고 성능을 높이는 가장 효과적인 방법입니다.

2. VGG(VGGNet) 모델의 구조와 특징

VGG는 2014년 ILSVRC 대회에서 준우승을 차지하며 주목받은 CNN 기반 모델입니다. 옥스퍼드 대학교의 연구진이 개발했으며, 구조가 직관적이고 단순하여 딥러닝 입문자가 이해하기에 아주 좋습니다.

VGG의 가장 큰 특징은 큰 크기의 커널 대신 3x3 크기의 작은 컨볼루션 커널을 연속으로 쌓았다는 점입니다. 3x3 필터를 두 번 쌓으면 5x5 필터 한 개와 동일한 수용 영역(Receptive Field)을 가지면서도 파라미터 수를 줄이고 비선형성을 증가시켜 성능을 높일 수 있습니다.

모델 명칭 총 레이어 수 컨볼루션 계층 특성 주요 풀링 방식 특징 및 한계
VGG16 16개 3x3 커널, ReLU 활성화 함수 Max Pooling (5개) 구조가 단순하지만 파라미터가 많아 연산량이 큼
VGG19 19개 3x3 커널, ReLU 활성화 함수 Max Pooling (5개) 망이 더 깊어져 표현력이 좋으나 연산 부담 가중

VGG16의 전체적인 신경망 흐름은 다음과 같은 단계를 거쳐 출력층으로 이어집니다.

  1. 3x3 컨볼루션 + ReLU (2회 연속) -> Max Pooling
  2. 3x3 컨볼루션 + ReLU (2회 연속) -> Max Pooling
  3. 3x3 컨볼루션 + ReLU (3회 연속) -> Max Pooling
  4. 3x3 컨볼루션 + ReLU (3회 연속) -> Max Pooling
  5. 3x3 컨볼루션 + ReLU (3회 연속) -> Max Pooling
  6. Fully Connected Layer (완전연결층 3개 계층)
  7. Softmax 출력층

PyTorch를 사용하면 아래 코드로 VGG16 가중치를 즉시 로드할 수 있습니다.

Python
 
import torch
import torchvision.models as models

# 사전 학습된 VGG16 모델 로드 (최신 버전 라이브러리 기준 weights 매개변수 사용 권장)
vgg16 = models.vgg16(weights=models.VGG16_Weights.DEFAULT)

# 모델 구조 출력
print(vgg16)

3. ResNet(Residual Network) 모델의 구조와 특징

VGG처럼 층을 깊게 쌓으면 성능이 무조건 좋아질 것 같지만, 실제로는 층이 너무 깊어지면 미분 값이 사라지는 기울기 소실(Vanishing Gradient) 문제가 발생합니다. 이 문제를 해결하기 위해 2015년 마이크로소프트 연구팀이 제안한 모델이 바로 ResNet입니다.

ResNet은 입력값 x를 출력층에 직접 더해주는 스킵 커넥션(Skip Connection)을 도입했습니다. 기존 방식이 레이어의 출력 $H(x)$를 직접 학습했다면, ResNet은 잔차 $F(x) = H(x) - x$를 학습하여 결과적으로 $F(x) + x$를 최적화합니다. 이 구조 덕분에 레이어가 100개가 넘어가도 안정적인 학습이 가능해졌습니다.

모델 명칭 레이어 수 핵심 블록 구조 파라미터 수 연산 효율 비고
ResNet34 34개 Basic Block (지름길 연결 기본) 상대적으로 가벼움 작은 데이터셋에 적합
ResNet50 50개 Bottleneck Block (1x1, 3x3, 1x1) 연산 효율성 극대화 가장 대중적으로 사용됨
ResNet101 101개 Bottleneck Block (1x1, 3x3, 1x1) 무겁지만 높은 정확도 대용량 고해상도 이미지에 사용

ResNet50 모델은 PyTorch에서 다음과 같이 호출하여 커스텀 프로젝트에 적용할 수 있습니다.

Python
 
import torchvision.models as models

# 사전 학습된 ResNet50 모델 로드
resnet50 = models.resnet50(weights=models.ResNet50_Weights.DEFAULT)

# 모델 구조 출력
print(resnet50)

4. 사전 학습된 모델 활용 방법 비교

사전 학습된 모델을 우리 프로젝트에 가져와서 사용하는 방법은 목적에 따라 세 가지로 나뉩니다. 데이터의 양과 유사성에 따라 전략을 다르게 세워야 합니다.

활용 전략 작업 내용 적합한 데이터 환경
특징 추출 (Feature Extraction) 기존 가중치는 모두 고정하고 마지막 분류기(FC Layer)만 새롭게 학습 데이터가 매우 적고 기존 이미지와 유사할 때
미세 조정 (Fine-tuning) 레이어 전체 혹은 일부의 가중치를 낮은 학습률로 다시 학습 데이터가 충분히 많고 타깃 도메인이 고유할 때
전이 학습 (Transfer Learning) 가중치 초기화 도구로 사용하여 도메인 전반을 새로 정렬 완전히 새로운 형태의 의료 이미지나 특수 데이터 레이블일 때

아래는 ResNet50 모델의 마지막 출력 분류 계층을 제거하고 특징 추출기로 변환하는 구현 예시입니다.

Python
 
import torch.nn as nn

# 마지막 완전연결층을 항등 매핑으로 대체하여 특징 추출기로 변경
resnet50.fc = nn.Identity()

# 이제 모델은 클래스 분류 결과 대신 고차원 특징 벡터를 반환합니다.

5. 개발을 위한 실무 팁

  • 입력 데이터 크기 맞추기: VGG와 ResNet은 대다수 ImageNet 기준으로 학습되었기 때문에 입력 이미지 크기를 가급적 224x224로 리사이즈하고, ImageNet의 평균과 표준편차 값으로 정규화(Normalize)를 수행해야 사전 학습된 성능이 정상적으로 나옵니다.
  • 학습률(Learning Rate) 관리: 미세 조정을 진행할 때는 기존 가중치가 급격하게 변하지 않도록 새로 추가한 분류기 계층보다 훨씬 작은 학습률(예: 1e-4 이하)을 적용해야 기존에 학습된 유용한 정보가 파괴되지 않습니다.

6. 흔히 하는 실수

  • Pretrained 옵션 누락: 모델을 불러올 때 가중치 매개변수를 지정하지 않으면 구조만 가져오고 가중치는 무작위로 초기화됩니다. 이 경우 사전 학습 효과를 전혀 볼 수 없으므로 반드시 가중치 옵션을 확인해야 합니다.
  • 출력 레이어 노드 수 불일치: ImageNet은 1000개의 클래스를 분류합니다. 우리가 해결하려는 문제가 2개의 클래스를 분류하는 이진 분류라면, 마지막 FC Layer의 out_features를 반드시 2로 수정해야 하며 그렇지 않으면 런타임 에러가 발생합니다.

7. 결론

VGG와 ResNet은 컴퓨터 비전 전이 학습의 기반을 다진 핵심 모델입니다. VGG는 직관적인 3x3 커널 적층 구조의 강력함을 증명했고, ResNet은 잔차 학습과 스킵 커넥션을 통해 현대 딥러닝이 더 깊은 신경망으로 나아갈 수 있는 길을 열었습니다. PyTorch 프레임워크가 제공하는 강력한 API를 활용해 풀고자 하는 도메인 데이터셋의 규모와 특성에 맞춰 두 모델을 적절히 변형해 활용해 보시기 바랍니다. 데이터 효율성을 극대화하는 첫걸음이 될 것입니다.

반응형