CNN 시대를 갈아엎은 심플함의 미학, VGGNet 완전 정복 – 3×3 컨볼루션만으로 만든 딥러닝 레전드
한 줄 요약: 필터는 3×3 하나로 통일, 대신 깊이를 끝까지 밀어붙여 ImageNet을 씹어먹은 레전드 CNN.
VGGNet은 딥러닝 역사에서 거의 “교과서의 표지 모델” 같은 존재입니다.
구조는 놀라울 만큼 단순해요. 필터 크기는 3×3 하나로 통일, 풀링은 2×2, activation은 ReLU. 그런데도 ImageNet ILSVRC 2014에서 분류 2위, 물체 위치 찾기(localization) 1위를 차지하며 실력을 정면으로 증명해버렸죠.
“복잡하게 꼬지 말고, 작은 필터를 깊게 쌓아라. 그러면 성능은 자연스럽게 따라온다.”
이 글에서는 VGGNet 원 논문 “Very Deep Convolutional Networks for Large-Scale Image Recognition”의 핵심 내용을 기반으로,
- 왜 3×3 컨볼루션을 고집했는지
- 16·19층 초딥 구조가 어떻게 설계됐는지
- 어떤 방식으로 학습했는지
- 왜 전이학습(Transfer Learning)의 국민 베이스라인이 되었는지
까지, 처음부터 이해할 수 있게 풀어서 정리해보겠습니다.
중간중간 CNN 기본 개념이나 딥러닝 기초를 연결해가며 읽으시면 더 잘 들어올 거예요.
1. VGGNet은 도대체 왜 그렇게까지 유명할까요?
1-1. ILSVRC 2014에서 증명된 단순함의 힘
VGGNet은 옥스퍼드 대학 Visual Geometry Group(그래서 이름이 VGG)에서 제안한 CNN 아키텍처예요. 논문은 2015년 ICLR에 실렸고, 실험은 ImageNet ILSVRC 2014 대회에서 검증되었죠.
당시 경쟁자는 AlexNet 이후 진화한 ZFNet, OverFeat, 그리고 최종 우승자 GoogLeNet(Inception v1)이었습니다. 구조적으로는 GoogLeNet이 훨씬 기발했지만, 실무·연구 현장에서 실제로 가장 널리 쓰인 건 VGG 계열이었어요.
이유는 단순합니다.
- 구조가 너무 정직하고 이해하기 쉽습니다.
- 구현이 쉽고 프레임워크에 기본 탑재되어 있죠(PyTorch, TensorFlow 등).
- 전이학습용 feature extractor로 성능이 좋습니다.
즉, 한 마디로 정리하면 “공부하기 좋고, 갖다 쓰기도 좋고, 성능까지 좋다.”
1-2. VGGNet의 핵심 철학: “크게 한 방 말고, 작게 여러 번”
기존 CNN(예: AlexNet)은 초반에 11×11, 7×7 같은 큰 필터를 한두 번 쓰고 바로 다운샘플링을 해버렸습니다.
VGGNet은 여기에 반기를 들죠.
- 필터 크기는 3×3로 고정
- stride는 1
- padding으로 공간 크기 유지
- 풀링은 2×2 stride 2로만 사용
그리고 이 3×3 conv를 2~3번 연속으로 쌓은 뒤 풀링을 합니다.
이렇게 하면 어떤 일이 벌어질까요?
- 3개의 3×3 conv를 쌓으면 실질적으로는 7×7 수용영역(receptive field)
- 그런데 중간에 ReLU가 3번이나 들어가 비선형성이 3배
- 파라미터 수는 진짜 7×7 하나 쓸 때보다 훨씬 적습니다
이게 바로 VGGNet의 핵심 미학이에요. “작고 단순한 연산을 깊게 쌓아 복잡한 표현을 만든다.”
2. VGGNet 아키텍처 한 번에 보기 – VGG16을 예로
논문에는 A~E까지 여러 구성(11, 13, 16, 19 weight layers)이 나오지만,
실무에서 가장 많이 쓰는 건 VGG16(구성 D), 그리고 조금 더 깊은 VGG19(구성 E)입니다.
2-1. 입력과 전처리
- 입력: 224 × 224 RGB 이미지
- 전처리: 학습 데이터에서 채널별 평균 RGB 값을 빼는 정도
이런 구조는 이후 PyTorch 공식 VGG 구현이나 여러 프레임워크에서도 그대로 쓰이고 있습니다.
2-2. VGG16(D)의 전체 구조
VGG16은 이름 그대로 가중치를 가진 레이어가 16개(13 conv + 3 FC)예요.

구조를 층별로 펼치면 다음과 같습니다.
- Block 1:
- conv3-64
- conv3-64
- maxpool 2×2
- Block 2:
- conv3-128
- conv3-128
- maxpool
- Block 3:
- conv3-256
- conv3-256
- conv3-256
- maxpool
- Block 4:
- conv3-512
- conv3-512
- conv3-512
- maxpool
- Block 5:
- conv3-512
- conv3-512
- conv3-512
- maxpool
- FC층:
- FC-4096
- FC-4096
- FC-1000 (ImageNet 1000 클래스)
- softmax
모든 conv 뒤에는 ReLU가 붙고, 거의 모든 hidden layer에서 ReLU만 쓴다는 점이 또 하나의 심플 포인트입니다.
2-3. 채널 수 증가 패턴
채널 수는 매우 교과서적이에요.
- 64 → 128 → 256 → 512 → 512
- 각 단계는 풀링으로 공간 해상도를 절반으로 줄이고, 채널 수는 2배로 늘립니다.
이 패턴은 이후 ResNet, DenseNet 등 수많은 CNN에서 기본 템플릿처럼 사용되고 있습니다.
3. 왜 3×3를 여러 번 쓰면 좋은가요? – 직관적으로 이해해보기
초보자 입장에서는 이런 의문이 생길 수 있어요.
“7×7 한 번 하는 거나 3×3 세 번 하는 거나, 어차피 보는 범위(7×7)는 비슷한 거 아닌가?”
논문은 여기에 대해 두 가지 이점을 명확히 이야기합니다.

3-1. 비선형성(Non-linearity) 증가
3×3 conv 세 개를 쌓으면, 중간에 ReLU가 3번 들어갑니다.
- 7×7 conv 한 번: Conv → ReLU 한 번
- 3×3 conv 세 번: Conv → ReLU → Conv → ReLU → Conv → ReLU
즉, 모델이 표현할 수 있는 함수의 복잡도가 훨씬 커지는 거죠.
“한 번에 대충 훑어보는 사람” vs “세 번에 나눠 디테일하게 살펴보는 사람” 정도의 차이라고 보시면 됩니다.
3-2. 파라미터 절약 효과
수학적으로도 이득입니다.
- 7×7 conv 하나, 입력·출력 채널 C라고 하면 파라미터는:
- 7×7×C×C = 49C²
- 3×3 conv 세 개는:
- 3×3×C×C × 3 = 27C²
즉, 동일한 수용영역을 가지면서도 파라미터 수는 약 45% 정도만 사용합니다.
적은 파라미터로 더 깊은 비선형성을 확보하니, 규제(regularization)까지 겸한 셈이죠.
4. 학습 세팅 – 어떻게 이 깊은 네트워크를 안정적으로 학습시켰나요?
4-1. 기본 학습 설정
논문은 대부분의 학습 설정을 AlexNet과 비슷하게 가져갑니다.
- 옵티마이저: SGD + momentum 0.9
- 배치 크기: 256
- weight decay(L2): 5×10⁻⁴
- 드롭아웃: FC 두 층(4096, 4096)에 0.5 적용
- 초기 학습률: 0.01에서 시작, 성능이 안 좋아지면 1/10로 감소
- 총 학습: 약 74 epochs (370K iterations)
요즘 기준으로 보면 고전적인 설정이지만, ImageNet에서도 여전히 자주 쓰이는 정석 조합입니다.
4-2. 초기화 전략 – 얕은 네트워크부터 차근차근
이 깊은 네트워크를 한 번에 random init으로 학습시키기는 당시 기준으로 쉽지 않았어요.
그래서 VGG는 다음과 같은 전략을 씁니다.
- 가장 얕은 네트워크(A, 11 layers)를 먼저 random 초기화로 학습
- 더 깊은 네트워크(B~E)를 학습할 때,
- 앞쪽 conv층과 마지막 FC층을 얕은 모델 A의 가중치로 초기화
- 중간에 새로 추가된 conv층만 random 초기화
즉, 얕은 모델을 발판으로 삼아 점점 깊이를 늘리는 방식입니다.
(물론 후속 연구에서는 Glorot/Xavier 초기화, He 초기화 등으로 이런 번거로운 절차 없이도 바로 깊은 네트워크를 학습시킬 수 있게 되었죠.)
4-3. 데이터 증강과 멀티스케일 학습
VGG는 단순한 구조를 보완하기 위해 학습·테스트 시 멀티스케일 처리를 적극 활용합니다.
- 학습 시:
- 입력 이미지의 짧은 변을 S로 맞추고, 224×224 랜덤 크롭
- S는 256 또는 384로 고정(single-scale)하거나, [256, 512] 범위에서 랜덤 샘플링(multi-scale, scale jittering)
- 수평 뒤집기, 색상 변형도 함께 사용
- 테스트 시:
- 여러 스케일에서 feature map을 뽑아 평균 또는 최대 풀링
- 10-crop이 아니라 dense evaluation(이미지 전체를 슬라이딩)도 실험
이 멀티스케일 전략 덕분에 고정 입력 크기 CNN의 한계를 어느 정도 극복했습니다. 이후 SPP-Net 같은 연구로 이어지는 흐름이기도 하죠.
5. 성능: GoogLeNet보다 단순한데, 왜 이렇게 잘 나왔을까요?
5-1. ImageNet 분류 성능
논문 기준으로, 단일 모델(single network) VGG-16/19는 ILSVRC 2012 validation set에서 top-5 error 약 7.3% 수준까지 도달합니다.
이는 당시 우승 모델인 GoogLeNet에 거의 근접하는 성능이며, 단일 모델 기준으로는 GoogLeNet보다 좋은 설정도 존재한다는 것을 논문이 보여줍니다.
핵심은 다음 두 가지예요.
- 깊이가 늘어날수록 에러가 꾸준히 감소
- 16층 이상부터는 수익이 점점 줄지만, 여전히 11층보다 확실히 좋음
“깊게 쌓으면 성능이 오른다”는 것을 대규모 데이터셋(ImageNet)에서 정량적으로 증명한 거의 첫 번째 연구 중 하나입니다.
5-2. Localization(물체 위치 찾기) 1위
VGG 팀은 classification뿐 아니라 classification + localization 트랙에도 참가했고,
여기서는 1위를 기록했습니다. 이는 깊은 feature가 단순히 클래스만 맞추는 것이 아니라 위치 정보도 충분히 유지하고 있다는 강력한 증거죠.
이 경험은 이후 Faster R-CNN, SSD 등 Object Detection 모델에서 백본(backbone)으로 VGG 계열이 널리 채택되는 배경이 됩니다.
5-3. 파라미터 수는 많지만, 계산 구조는 단순
VGG16의 파라미터는 약 138M 정도로, 오늘날 기준으로도 가볍지는 않습니다.
특히 FC-4096 두 층이 파라미터 대부분을 먹거든요.
그럼에도 불구하고 구조가 워낙 단순해서,
- GPU에서 최적화가 쉽고
- 병렬화·배치 처리에 잘 맞고
- 코드 구현·디버깅 난이도가 낮습니다.
그래서 연구용 베이스라인, 벤치마크, 튜토리얼용 CNN의 표준으로 자리잡게 되었죠.
6. VGGNet이 전이학습(Transfer Learning)의 국민 베이스라인이 된 이유
VGG 논문의 후반부는 ImageNet이 아닌 여러 데이터셋(PASCAL VOC, Caltech-101/256 등)에서 전이학습 성능을 분석합니다.
6-1. 어떻게 전이학습에 쓰였나요?
VGG를 feature extractor로 활용하는 기본 레시피는 지금도 거의 똑같이 쓰입니다.
- ImageNet으로 학습된 VGG에서 마지막 FC-1000 레이어를 제거
- 그 전 단계 FC-4096(혹은 conv feature map)에 있는 활성값을 4096차원 특징 벡터로 사용
- 새로운 데이터셋에 대해 이 벡터를 뽑아 SVM이나 작은 MLP를 학습
- 필요하다면 VGG 전체 또는 뒷부분만 fine-tuning
논문에서는 단순히 pretrained VGG + linear SVM 조합만으로도, 당시 많은 hand-crafted 특징(SIFT, HOG 등)을 압살하는 성능을 보여줍니다.
6-2. 왜 VGG feature가 그렇게 잘 먹힐까요?
- 3×3 컨볼루션을 깊게 쌓은 구조 덕분에, 저수준 엣지부터 고수준 개념까지 매끄러운 계층 표현을 만듭니다.
- 마지막 FC 바로 앞의 표현은 다양한 데이터셋에서 재사용 가능한 일반적 시각 표현으로 작동하죠.
- 구조가 단순하니, 다른 테스크에 맞게 일부 블록만 잘라 쓰기도 쉽습니다.
이 특성 덕분에 VGG는
- 스타일 트랜스퍼(Neural Style Transfer)
- 이미지 캡셔닝
- 의료 영상 분석
등 수많은 응용 연구에서 기본 backbone으로 사용되었습니다.
대표적으로, Neural Style Transfer의 원조 논문인 “A Neural Algorithm of Artistic Style”에서도 스타일·콘텐츠 특징을 추출하는 데 VGG 네트워크를 사용했었죠.
7. VGGNet을 현대 관점에서 어떻게 봐야 할까요?
요즘엔 ResNet, EfficientNet, ConvNeXt, ViT 등 훨씬 효율적이고 강력한 모델들이 많습니다.
그러면 VGGNet은 이제 쓸모 없는 구식 모델일까요?
그렇게 보기는 어렵습니다. 현대 관점에서 VGG는 이런 의미를 가지거든요.
7-1. 구조적 레퍼런스
- CNN의 기본 빌딩 블록(conv + ReLU + pool)의 정석 배치
- 채널 수 증가 패턴(64→128→256→512→512)
- 3×3 conv를 기본 단위로 쓰는 습관
실제로 ResNet, DenseNet, UNet, FPN 등 대부분의 CNN 구조에서 VGG의 설계 철학이 기본값처럼 깔려 있습니다.
7-2. 교육·실험용 베이스라인
- 구조가 단순하다 → 학생들이 배우기 좋다
- 구현이 쉽다 → 튜토리얼, 예제 코드로 적합
- 성능이 여전히 준수하다 → 작은/중간 규모 데이터셋에서는 아직도 쓸 만한 baseline
PyTorch Hub의 VGG 예제 같은 문서나, Kaggle 튜토리얼에서도 VGG는 꾸준히 등장합니다.
7-3. ViT 시대에도 남는 유산
Vision Transformer(ViT) 같은 self-attention 기반 모델이 이미지 인식의 주류로 떠오른 지금도, CNN은 여전히
- 실시간 처리
- 임베디드/온디바이스 환경
- 낮은 해상도/작은 데이터셋
같은 영역에서 강력합니다. 이런 CNN 설계의 “원형”으로서 VGG를 이해해 두면,
향후 새로운 비전 아키텍처를 볼 때 확실한 기준점이 생길 거예요.
8. 실전에서 VGGNet을 어떻게 활용할까요? (PyTorch · Keras 관점)

실제 코드 차원에서 VGG를 어떻게 쓰는지 감만 잡아보죠. (여기서는 개념만 설명하고, 코드는 직접 구현 시 참고하시면 됩니다.)
8-1. PyTorch에서 VGG 불러오기
- torchvision.models에
vgg11,vgg13,vgg16,vgg19및_bn(BatchNorm 버전) 변형들이 기본 제공됩니다. pretrained=True옵션으로 ImageNet 가중치를 손쉽게 가져와 전이학습에 활용할 수 있죠.
전이학습 시에는 보통
- features 부분(VGG의 conv 블록)을 그대로 쓰고
- classifier(Fc 레이어)를 새 데이터셋에 맞는 작은 MLP로 갈아끼웁니다.
8-2. Keras / TensorFlow에서 VGG 사용
tensorflow.keras.applications.VGG16,VGG19가 기본 제공됩니다.include_top=False로 설정하면 FC 레이어를 제거한 채 CNN feature extractor만 가져올 수 있어요.weights='imagenet'를 사용하면 사전학습 가중치를 로드합니다.
이후 Global Average Pooling + Dense 레이어를 붙여 자신만의 분류기, 검출기, 세그멘테이션 모델을 쉽게 만들 수 있습니다.
관련해서는 전이학습 가이드 글과 함께 보시면 좋습니다.
9. VGGNet을 이해할 때 같이 보면 좋은 개념들
VGGNet은 단독으로 보기보다는 앞뒤 세대 모델과 연결해서 보는 게 이해에 훨씬 도움이 됩니다.
- 앞 세대: AlexNet – “큰 필터 + 얕은 깊이”에서 출발
- VGGNet: 작은 3×3 필터를 깊게 쌓기 시작
- 뒤 세대: ResNet – 깊어지면서 생기는 학습 문제를 skip connection으로 해결
- 더 뒤: Vision Transformer(ViT) – CNN 대신 self-attention으로 전환
또한, VGG의 컨볼루션 블록을 이해하려면 기본적으로
같은 개념들을 한 번씩 짚어두시는 것이 좋습니다.
10. 정리 – 왜 지금도 VGGNet을 공부해야 할까요?
마지막으로, 이 글에서 다룬 VGGNet의 포인트를 한 번 더 압축해보겠습니다.
- 단순함의 미학: 3×3 conv + ReLU + 2×2 maxpool이라는 단순한 블록만으로도, 깊게 쌓으면 충분히 강력한 표현력이 나옵니다.
- 깊이의 효과를 정량적으로 증명: 11→13→16→19층으로 늘릴수록 ImageNet 성능이 꾸준히 좋아진다는 것을 실험으로 보여줬죠.
- 전이학습의 국민 backbone: 다양한 데이터셋에서 VGG feature가 강력한 성능을 보여주며, 이후 수많은 응용 연구의 기본 베이스라인이 되었습니다.
- 현대 CNN 아키텍처의 레퍼런스: ResNet, DenseNet, UNet, FPN 등 거의 모든 CNN이 VGG의 설계 철학을 어느 정도 계승하고 있습니다.
요약하면, VGGNet은 “지금 당장 최고 성능 모델”은 아니지만,
“딥러닝·컴퓨터 비전을 진지하게 공부한다면 반드시 한 번은 직접 뜯어봐야 하는 필수 교양 아키텍처”입니다.
논문 원문과 함께, 실제로 PyTorch나 Keras에서 VGG16을 불러와 몇 장의 이미지를 통과시켜 feature map을 시각화해보면 훨씬 더 피부에 와닿으실 거예요.
외부 참고자료
- Very Deep Convolutional Networks for Large-Scale Image Recognition (Simonyan & Zisserman, 2014, ICLR)
- PyTorch Hub – VGG Nets (torchvision.models)
- TensorFlow Keras Applications – VGG16, VGG19
- A Neural Algorithm of Artistic Style (Gatys et al., 2015)
