본문 바로가기

AI/CV

[10/17] 아이펠 리서치 15기 TIL | 이미지 인식 모델 AlexNet, VGG-16, ResNet

반응형

오늘 배운 내용

오늘은 저번 포스팅에서 공부한 CNN을 기반으로 하는 AlexNet, VGG-16, ResNet 세 개의 모델을 공부했다.

 

목차

  1. 모델의 복잡성: 깊이(Depth)와 넓이(Width)
  2. AlexNet
  3. VGG16
  4. ResNet

1. 모델의 복잡성: 깊이(Depth)와 넓이(Width)

이미지 인식 모델의 발전 과정을 이해하기 위해, 모델의 구조가 어떻게 복잡해지는지 알아야 한다.

복잡성은 크게 깊이와 넓이라는 두 가지 방향으로 확장될 수 있다.

모델이 깊어진다 (Depth)

모델이 깊어진다는 것은 모델의 레이어를 더 많이 쌓는 것을 의미한다.

입력 데이터가 레이어를 많이 거치면, 모델은 저수준의 특징(선, 질감)에서 고수준의 추상적인 특징(형태, 객체)까지 더 복잡한 특징을 학습할 수 있게 된다.

모델이 넓어진다 (Width)

모델이 넓어진다는 것은 더 많은 채널(필터)을 사용하는 것을 의미한다.

사용 필터가 많아지면, 특정 단계에서 더 다양한 특징을 동시에 추출하고 학습할 수 있게 된다.

모델 복잡성의 장단점

장점은 모델의 표현력이 증가하므로 더 복잡한 데이터의 패턴을 학습할 수 있어 성능이 좋아질 수 있다.

단점은 아래와 같다.

  1. 파라미터 수가 늘어나 학습과 추론에 더 많은 리소스가 필요해진다.
  2. 너무 복잡해지면 과적합이 발생할 수 있다.
  3. 깊은 모델의 경우 레이어가 많아지므로 역전파 과정에서 Gradient Vanishing, Gradient Exploding 문제가 발생할 수 있다.

2. AlexNet

AlexNet은 2012년에 개최된 ILSVRC (ImageNet Large Scale Visual Recognition Challenge)에서 우승한 깊은 CNN 구조의 모델이다. 

AlexNet은 이미지의 특징 추출에 합성곱과 Max pooling을 활용하며, 이후 FC로 클래스를 분류한다.

AlexNet의 구조

위의 구조를 보면 순전파 과정에서

피처 맵의 차원 수는 증가하고(3 → 96 → 256 → 384), (CONV5에서 다시 감소하는 이유는 정보를 압축하고 FC Layer로 넘어가기 전 연산량을 줄이기 위함.)

피처 맵의 크기는 감소하는(224 → 55 → 27 → 13) 것을 알 수 있다.

그 이유는 피처 맵의 차원 수가 늘어날수록 모델의 표현력이 증가하며, 피처 맵의 크기가 작을수록 연산량을 줄일 수 있기 때문이다.

그렇기 때문에 AlexNet을 포함한 대부분의 CNN은 피처맵의 크기를 줄이면서 차원은 늘리는 구조로 이뤄진다.

 

AlexNet의 주요 특징은 다음과 같다.

  • 활성화 함수로 ReLU를 사용해 기울기 소실 문제를 완화했다.
  • FC Layer에서 Dropout을 사용하여 과적합을 방지했다.
  • 초기 레이어에서 11x11, 5x5 등 비교적 큰 필터를 사용했다.
  • Max pooling을 사용해 입력 크기 축소, 노이즈 제거, 이동 불변성 등의 효과를 얻었다.

자세한 모델의 정보와 소스코드는 아래 깃허브 링크에서 확인할 수 있다.

https://github.com/choiwonjini/AIFFEL_practice/blob/main/CV/1_AlexNet.ipynb

 

AIFFEL_practice/CV/1. AlexNet.ipynb at main · choiwonjini/AIFFEL_practice

Contribute to choiwonjini/AIFFEL_practice development by creating an account on GitHub.

github.com


3. VGG-16

VGG-16은 AlexNet보다 훨씬 깊은 16개의 레이어를 가지는데, 이 중 13개는 CL이며 3개는 FC이다.

VGG-16 구조
AlexNet과 VGG-16

 

AlexNet과 VGG-16은 Conv, Pooling, ReLU, FC Layer을 사용한다는 점에서는 유사해 보이지만, VGG-16이 오류율을 10% 이상 낮췄다. 이렇게 오류율을 낮출 수 있었던 이유는, VGG 모델은 3x3의 작은 필터만으로 conv 연산을 수행해 더 깊은 구조를 갖는다는 특징 때문이다.

 

그렇다면, VGG는 왜 큰 필터가 아닌 3x3 크기의 필터만 사용했을까?

그 이유는 아래와 같다.

Receptive Field (수용 영역)

CNN에서 RF(Receptive Field)가 크다면 노드가 한 번에 바라보는 이미지의 영역이 커지므로 Global Feature을 더 효율적으로 학습할 수 있지만, edge나 corner와 같은 낮은 수준의 Local Feature을 학습하기 어렵다.

  • 3x3 필터를 두 번 연속으로 쌓으면, 이 두 레이어가 보는 영역(RF)은 5x5 필터 한 개와 동일하다.
  • 3x3 필터를 세 번 연속으로 쌓으면, 7x7 필터 한 개와 동일한 RF를 본다.
  • 즉, VGG는 작은 필터를 여러 번 쌓아서 큰 필터와 동일한 RF를 확보한다는 아이디어이다.

그래서 VGG-16은 큰 사이즈의 필터를 적용하는 대신 3x3 필터를 여러 번 적용했다.

더 작은 크기의 필터를 여러 번 적용하면 모델 매개변수의 수가 감소할 뿐만 아니라 활성화 함수를 더 많이 적용해 비선형성이 증가하기 때문이다.

또한, 7x7 필터를 하나 적용하면 49개의 파라미터가 필요하지만, 3x3 필터를 3번 적용한다면 27개의 파라미터만 필요한 것처럼 더 적은 파라미터로 더 깊고 비선형적인 모델을 구축할 수 있다는 장점이 있다.

 

하지만 가장 큰 단점은, 레이어를 깊게 쌓으면 기울기 소실 문제가 발생한다는 것이다.

이 문제를 해결한 모델이 바로 다음 소개할 ResNet이다.

 

자세한 모델의 정보와 소스코드는 아래 깃허브 링크에서 확인할 수 있다.

https://github.com/choiwonjini/AIFFEL_practice/blob/main/CV/2_VGG16.ipynb

 

AIFFEL_practice/CV/2_VGG16.ipynb at main · choiwonjini/AIFFEL_practice

Contribute to choiwonjini/AIFFEL_practice development by creating an account on GitHub.

github.com


3. ResNet

ResNet (Residual Network)은 2015년 카이밍 허의 마이크로소프트 연구팀이 발표한 모델이며, 오류율 3.75%로  ILSVRC 대회에서 우승했다. (ResNet paper: https://arxiv.org/pdf/1512.03385)

VGG-16의 경우 AlexNet보다 깊은 레이어를 만들어 성능을 높였지만, 동시에 기울기 소실 문제도 있었기 때문에 단순히 레이어를 깊게 쌓는 것이 항상 좋은 성능으로 이어지는 것은 아니라는 사실을 알 수 있었다.

20-layer보다 56-layer의 오차가 더 높은 모습

 

그래프를 보면, VGG-16보다 훨신 깊은 56-layer의 Plane Network는 오히려 20-layer의 plane Network보다 성능이 나빠진다는 것을 알 수 있다.

만약 이것이 과적합 문제라면 train error는 낮고 test error만 높아야 하겠지만, 이 경우는 학습 자체가 제대로 이뤄지지 않은 것이다.

그 이유는 위의 "모델 복잡성의 장단점"에서 언급했듯이, 역전파 과정에서 기울기가 너무 작아지거나 커져서 학습이 불안정해지고, 이로 인해 깊은 모델은 최소한 얕은 모델만큼의 성능(예를 들면, 단순히 입력을 그대로 출력하는 항등함수 등)조차 학습하기 어려워지는 성능 저하 문제가 발생했기 때문이다.

ResNet은 이러한 문제의 해결책으로 잔차 학습(Residual Learning)이라는 기법을 적용했다.

1. 잔차 학습(Residual Learning)

잔차 학습이란 모델의 입력과 출력 사이의 차이(Residual, 잔차)만 학습하게 하는 방법이다. 아래 그림은 잔차 학습 방식이다.

 

 

기존의 인공 신경망은 입력값 x로부터 출력 H(x) 전체를 직접 학습하는 y = H(x) 구조였다. 하지만 이런 방식으로 레이어가 깊어질수록 수많은 비선형 함수들과 가중치 조정이 누적되어 H(x) = x인 항등함수조차 제대로 학습하지 못 하게 되어 모델의 성능이 저하되었다.

 

반면, ResNet은 입력값 x를 출력에 그대로 더해주는 잔차 연결(Residual connection)을 도입하고,

변화량(잔차) F(x)를 추가하는 y = F(x) + x 구조로 변환했다. 즉, 전체 함수를 학습하는 대신 잔차 F(x) = H(x) - x 만 학습하면 된다.

이때 입력 x는 이전 블록의 출력을 그대로 전달하므로, 기존 정보가 손실되지 않고, 새로운 정보 F(x)가 더해진다.

이 구조 덕분에 역전파 과정에서 기울기가 skip 경로를 따라 직접 전달되어 기울기 소실 문제가 완화되고 깊은 네트워크에서도 안정적인 학습이 가능해진다.

 

이러한 연산 방식을 잔차 연결(Residual Connection)이라고 한다.

잔차 연결(Residual Connection)이란, 현재 블록의 입력을 현재 블록의 출력 그대로 더해주는 지름길(shortcut)이며, 수식은 아래와 같다.

  • x: 블록의 입력 (input)
  • y: 블록의 최종 출력 (output)
  • F(x): y와 x의 차이 (잔차)

아래 그림은 순서대로 VGG-19, RC를 적용하지 않은 plain Network, RC를 적용한 ResNet의 구조이다.

그런데 여기서 잔차 연결 경로를 보면, 항상 두 개의 CL을 건너뛴다는 것을 알 수 있는데, 그 이유는 두 개의 CL이 하나의 Residual Block을 구성하기 때문이다.

2.  2-layer block을 사용한 이유는?

입력 x
↓
[Conv → BN → ReLU → Conv → BN]
↓
출력 F(x)
↓
잔차 연결: y = F(x) + x
↓
ReLU

 

왜 두 개의 CL이 하나의 블록을 구성할까?

  • 한 개의 CL만 두면 잔차 연결이 너무 단순해서 학습 이득이 작다.
  • VGG-16 파트에서 언급했듯이 두 개의 3x3 conv를 연속해서 사용하면 RF가 넓어져 (5x5 효과), 더 복잡한 특징 표현이 가능해진다.
  • ResNet 논문에서 1-layer block과 2-layer block을 비교했을 때 2-layer block이 훨씬 안정적으로 수렴한 실험 결과가 있다.

잔차 연결은 "블록의 입력"과 "블록의 출력"을 더하는 구조이기 때문에 두 개의 CL을 건너뛰는 형태인 것이다.

 

3. 점선의 의미는?

위의 그림을 보면 실선으로 이어진 잔차 연결 외에 점선으로 이어진 잔차 연결 구간이 있는 것을 알 수 있다.

이 점선은 채널 수 또는 공간 크기 바뀔 때 사용한다.

 

예를 들면, 블록 전 입력 채널이 64, 블록 출력 채널이 128인 경우, x와 F(x)의 채널 수가 달라 바로 더할 수가 없다.

이럴 경우에 x에 1x1 conv을 적용하여 크기를 맞춘다.

또 다른 예시로, 블록 안에서 stride=2 로 다운샘플링을 한다면 출력 공간의 크기가 작아지는데, 이때도 마찬가지로 x를 stride=2인 1x1 conv으로 축소하여 F(x)와 크기를 통일시켜 계산할 수 있다.

점선(Projection shortcut) 수식

 

4. 병목 블록 (Bottleneck Block)

병목 블록이란 ResNet-50 이상의 매우 깊은 모델에서 연산 효율성을 극대화하기 위해 설계된 잔차 블록의 변형된 구조이다.

이름처럼, 블록의 중간에서 차원을 줄였다가 다시 확장하는 구조이다.

 

1. 1x1 Conv: 차원 축소

  • 채널 수를 줄여 연산량을 감소시킨다.

2. 3x3 Conv: 특징 학습

  • 연산량이 적어진 상태에서 학습한다.

3. 1x1 Conv: 차원 확장

  • 채널 수를 다시 원래대로 (또는 원하는 차원으로) 늘린다.

이 과정의 결과 F(x)는 x와 더해지게 된다.

 

5. ResNet 유형별 구조

 

모델 구현 소스코드는 아래 깃허브 링크에서 확인할 수 있다.

https://github.com/choiwonjini/AIFFEL_practice/blob/main/CV/3_ResNet.ipynb

 

AIFFEL_practice/CV/3_ResNet.ipynb at main · choiwonjini/AIFFEL_practice

Contribute to choiwonjini/AIFFEL_practice development by creating an account on GitHub.

github.com


느낀 점, 어려웠던 점

저번 포스팅의 CNN 구조를 이해하고 나니 AlexNet, VGG-16은 어렵지 않게 이해할 수 있었지만, ResNet의 잔차 학습의 아이디어와 원리가 꽤 어려웠다. 하지만 이번에도 코드 작성을 해보고, 구글링, Gemini를 이용해 공부하며 결국 ResNet의 전체적인 흐름(문제 -> 해결법)을 잘 이해할 수 있었다.

 

다음 포스팅은 딥러닝 모델의 내부 동작 원리를 시각화하는 방법인 Grad-CAM의 내용이다.

 

반응형