DL/CNN

2. Inception Net V1-V3 - 여러 크기의 특징을 한 번에 보는 네트워크

rem1004 2026. 9. 1. 02:55

이미지 속 대상은 크기가 제각각이다. 어떤 패턴은 1×1, 어떤 패턴은 3×3, 또 어떤 패턴은 5×5 범위에서 잘 포착된다. Inception Network는 어느 Kernel 크기가 정답인지 하나만 고르지 않고, 여러 연산을 병렬로 수행한 뒤 결과를 합친다.

1×1 Bottleneck과 Multi-scale Branch로 구성된 Inception Module

1. Inception Module의 출발점

초기 아이디어는 다음 Branch를 같은 입력에 병렬 적용하는 것이다.

  • 1×1 Convolution
  • 3×3 Convolution
  • 5×5 Convolution
  • 3×3 Max Pooling

각 Branch의 출력은 공간 크기를 같게 맞춘 뒤 Channel 방향으로 Concatenation한다. 서로 다른 Receptive Field에서 얻은 특징을 다음 Layer가 함께 사용할 수 있다.

하지만 큰 Kernel을 많은 Channel에 그대로 적용하면 계산량이 너무 크다.

Concatenation을 하려면 모든 Branch의 Height와 Width가 같아야 한다. 그래서 3×3, 5×5 Branch에는 알맞은 Padding을 사용하고, Pooling Branch도 Stride 1과 Padding을 적용한다. Spatial Shape은 유지하고 Channel만 합친다는 원칙이다.

2. 1×1 Convolution이라는 Bottleneck

Inception Net V1 (GoogLeNet)은 비싼 3×3, 5×5 앞에 1×1 Convolution을 두어 Channel 수를 줄였다. 이 구조를 Bottleneck 또는 Dimension Reduction이라고 한다.

예를 들어 192 Channel을 곧바로 128개의 3×3 Kernel에 넣는 대신, 먼저 1×1로 96 Channel까지 줄인 뒤 3×3을 적용하면 연산량과 파라미터가 크게 감소한다. 1×1 뒤에 Activation도 들어가므로 단순 압축 이상의 비선형 표현을 추가한다.

숫자로 비교하면 직접 3×3을 적용할 때 Weight 수는 3×3×192×128 = 221,184다. 1×1로 96 Channel까지 줄이면 1×1×192×96 + 3×3×96×128 = 129,024개다. Bottleneck에도 비용이 있지만 전체는 약 42% 줄어든다.

3. Inception V1의 전체 구조

GoogLeNet은 Inception Module을 깊게 쌓고 마지막에 Global Average Pooling (GAP)을 사용해 거대한 FC Layer를 없앴다. VGGNet보다 훨씬 적은 파라미터로 높은 성능을 냈다.

깊은 네트워크 중간에는 Auxiliary Classifier를 달았다. 중간 Feature Map에서도 분류 Loss를 계산해 초기 Layer까지 Gradient가 잘 흐르도록 돕는 장치다. 추론 때는 보조 분류기를 사용하지 않는다.

성능 평가에서 여러 Crop과 여러 모델 결과를 합치는 Ensemble을 사용했다는 점도 주의해야 한다. 단일 모델 성능과 Ensemble 성능은 공정하게 구분해 비교해야 한다.

Auxiliary Classifier의 Loss는 Main Loss에 일정 Weight를 곱해 더한다. 이는 학습 중 깊은 중간 Layer에 직접 감독 신호를 주는 Deep Supervision이다. 추론 시 제거되므로 최종 Latency에는 영향을 주지 않지만 학습 그래프와 Loss 구성에는 포함된다.

 큰 Kernel을 작은 Kernel로 분해하고 효율적으로 Downsampling하는 Inception 설계

4. Inception V2/V3의 Factorization

V2와 V3는 큰 Convolution을 더 작은 연산으로 분해하는 Factorization을 적극 사용한다.

  • 5×53×3 두 번
  • 3×31×3 다음 3×1

같거나 비슷한 Receptive Field를 유지하면서 파라미터와 연산을 줄이고 Activation 횟수는 늘린다. 다만 너무 이른 Layer에서 지나치게 분해하면 공간 구조를 충분히 잡지 못할 수 있어 해상도에 따라 모듈 구성을 다르게 한다.

3×31×33×1로 나누면 Kernel당 공간 Weight가 9개에서 6개로 줄어든다. 이를 Asymmetric Convolution이라고 한다. 사각형 영역을 세로·가로 두 단계로 처리하면서 같은 Receptive Field를 확보하고 중간 Activation도 추가한다.

5. 효율적인 Grid Reduction

Pooling만으로 Downsampling하면 표현 공간이 갑자기 좁아지는 Representational Bottleneck이 생길 수 있다. Inception V3는 Stride 2 Convolution Branch와 Pooling Branch를 병렬로 수행한 뒤 Concatenate한다. 공간 해상도를 줄이면서 Channel 표현을 더 풍부하게 유지하는 방식이다.

6. Batch Normalization과 Label Smoothing

V2/V3 계열은 Batch Normalization (BN)을 널리 사용해 학습을 안정화한다. 또한 Label Smoothing을 사용한다.

One-hot Label이 정답 클래스에 확률 1, 나머지에 0을 준다면 Label Smoothing은 정답 확률을 조금 낮추고 나머지 클래스에 작은 확률을 배분한다. 모델이 지나치게 확신하는 것을 막고 일반화를 돕는다.

smoothed label = (1 - ε) × one_hot + ε / K

여기서 K는 클래스 수, ε는 Smoothing 정도다.

Label Smoothing은 정답 Class와 다른 Class 사이의 Logit 간격이 끝없이 커지는 것을 억제한다. Calibration과 일반화에 도움이 될 수 있지만, Teacher의 Dark Knowledge를 활용하는 Knowledge Distillation이나 정확한 Confidence가 중요한 문제에서는 Smoothing 강도를 검토해야 한다.

7. Inception이 남긴 설계 원칙

Inception의 진짜 유산은 특정 Module 모양보다 다음 세 가지다.

  1. 여러 Scale의 특징을 병렬로 본다.
  2. 비싼 연산 전에 Bottleneck으로 Channel을 조절한다.
  3. 큰 Kernel을 작은 Kernel이나 비대칭 Kernel로 Factorization한다.

8. Inception V1, V2, V3의 차이

Version 중심 개선 기억할 요소
V1 Multi-scale Branch와 계산 절감 1×1 Bottleneck, GAP, Auxiliary Classifier
V2 큰 Kernel의 효율적 분해 5×5 → 3×3 + 3×3, Batch Normalization
V3 Factorization과 학습 기법 정교화 Asymmetric Conv, Grid Reduction, Label Smoothing

논문이나 구현체에 따라 V2/V3 명칭과 세부 구분이 다소 혼용되기도 한다. 이름만 외우기보다 “Bottleneck → Factorization → 효율적 Downsampling → Regularization”이라는 발전 방향을 이해하는 편이 안전하다.

9. Inception 구조를 구현할 때의 함정

  • Branch마다 Spatial Shape이 달라지면 Concatenation할 수 없다.
  • Concatenation 뒤 Channel 수는 각 Branch Output Channel의 합이다.
  • Bottleneck Channel을 너무 줄이면 연산은 가벼워지지만 정보 병목이 심해진다.
  • Auxiliary Loss의 Weight를 너무 크게 두면 중간 분류 목표가 Main Task를 방해할 수 있다.
  • 여러 Crop·Ensemble 성능을 단일 Forward 성능과 혼동하면 안 된다.

모델을 관통하는 설계 흐름

여러 Scale의 특징이 필요함
 → 여러 Branch를 병렬 실행
 → 계산량 증가
 → 1×1 Bottleneck으로 Channel 축소
 → 큰 Kernel을 작은/비대칭 Kernel로 Factorization
 → Downsampling에서도 여러 Branch를 유지
 → BN·Label Smoothing으로 학습 안정화

Key Terms

Inception Module · Multi-scale Feature · Bottleneck · Dimension Reduction · Concatenation · Auxiliary Classifier · Factorization · Grid Reduction · Batch Normalization · Label Smoothing

Self Check

  1. Inception Module에서 Branch 출력을 더하지 않고 Concatenate하는 이유는 무엇인가?
  2. 1×1 Convolution이 연산량을 줄이는 과정을 설명할 수 있는가?
  3. Label Smoothing은 모델의 어떤 행동을 완화하는가?