본문 바로가기
Deep Learning Specialization

CNN Case Studies [Deep Learning Specialization #10]

by ALTERww 2022. 7. 26.
320x100

Coursera의 Deep Learning Specialization - Week 4의 강의를 수강하면서 필기한 내용을 바탕으로 정리한 글입니다.

 

지난 주차에는 CNN에 대한 개념 사용하는 이유, 그리고 간단한 CNN을 살펴 보았습니다.

이번 주차에는 여러 CNN 모델 연구를 살펴 보겠습니다.

 

 

LeNet-5

이미지 분류를 위한 CNN 중 초기에 기본 구조를 잘 정립한 모델입니다.

INPUT이 있고, CONV1 => POOL1 => CONV2 => POOL2 => FC1 => FC2 => OUTPUT으로 구성됩니다. CONV + POOL을 합쳐 하나의 Layer로 취급하고, 총 5개의 Layer를 pass합니다. 

  • CONV1의 커널 사이즈(=필터 사이즈)는 5 x 5, Strides = 1입니다. Feature Map이 조금 축소되고, Filter 수만큼 채널이 증가합니다.
  • POOL1은 AveragePooling을 이용하고, 커널 사이즈는 2 x 2, Strides = 2입니다. Strides가 2이기 때문에 Feature Map이 절반으로 축소됩니다.
  • CONV2는 채널 수가 6장에서 16장으로 증가하는데, 컨볼루션 과정이 조금 특이합니다. 연속된 3장을 모아 5 x 5 x 3 필터와 컨볼루션하고, 연속된 4장을 모아 5 x 5 x 4 필터와 컨볼루션하고, 불연속한 4장을 모아 5 x 5 x 4 필터와 컨볼루션하고, 6장 모두와 5 x 5 x 6 필터와 컨볼루션 하여 6 + 6 + 3 + 1 = 16장의 Feature Map이 나옵니다.
  • POOL2는 POOL1과 같습니다.
  • FC1는 120 x 1 x 1 Feature Map으로 변환합니다.
  • FC2는 84개의 Unit으로 변환합니다.
  • OUTPUT에서는 Softmax 활성 함수를 이용하여 클래스를 알려줍니다.

60,000개 정도의 파라미터가 사용됩니다.

 

AlexNet

LeNet과 유사하지만 GPU를 활용한 병렬 연산이 가능하게 하기 위해 네트워크가 더 커지고, 병렬 구조로 이루어져 있습니다. 그리고 Local Response Normalization이라는 개념이 도입되었습니다.

 

Local Response Normalization (LRN)

생리학에서 한 신경 세포가 활성화되면 이웃 신경 세포를 억제하려는 경향을 보인다는 '측면 억제'라는 용어가 있습니다. AlexNet에선 ReLU를 사용하는데, 픽셀값이 크면 주변 픽셀에 영향을 크게 미치게 됩니다. 이것을 방지하기 위해 다른 Feature Map의 같은 위치 픽셀끼리 정규화를 진행하는 것을 LRN이라고 합니다.

 

 

VGG-Net

이 모델은 16층으로 구성되어 있고, "네트워크가 깊어질수록 성능이 좋아짐"을 보여주는 모델 중 하나입니다. 그리고 쉬운 구조를 가지고 있어서 공개 당시 인기를 끌었습니다.

특징이라고 하면, 큰 필터로 한 번 컨볼루션하지 않고 작은 필터로 여러 번 컨볼루션하여 훈련시켜야 할 파라미터 크기를 줄여 학습 속도를 빠르게 하였습니다. 동시에 Layer를 늘려 비선형성을 증가시키게 됩니다.

 

최종적으로 1000개의 클래스를 분류하는 모델입니다.

 

ResNet

무작정 모델을 깊게 쌓는다고 성능이 향상되는게 아니라는 것이 알려진 뒤, 사람들은 입력값에 출력값을 더해주는 잔류블럭(Residual Block)을 제안하게 됩니다. 잔류 블럭을 누적시키면, 활성값 a가 신경망 깊숙이 들어가게 되어 모델 학습의 안정감과 성능을 개선하는 효과가 있습니다.

a[l+2] = g(z[l+2] + a[l])의 형태를 띠는데, a[l+2] = a[l]은 항등 함수이므로 기존 학습 정보를 보존합니다. 거기에 추가적인 정보만을 학습하게 되는데, NN가 깊을 수록 이 방식이 더욱 효율적이게 됩니다.

 

1 x 1 Convolution

1 x 1 Convolution은 입력 정보의 차원을 줄였다 늘렸다 하여 속도와 정확도를 적절히 높게 가지는 지점을 찾기 위해 사용되는 기법 중 하나입니다.

 

  • 그림에서 채널 수가 192인 Input이 주어집니다. 이는 연산을 수행하기에 너무 크기 때문에, 1 x 1 x 16 CONV를 수행하여 강제로 채널 수를 감소시킵니다. 이러면 속도는 증가하지만, 정보가 손실됩니다.
  • 그래서 다시 5 x 5 x 32 CONV를 수행하여 공간적인 특징을 추출합니다.
  • 특징을 추출한 뒤, 다시 1 x 1 x 192 CONV를 수행하여 채널 수를 증가시킵니다.
  • 이 모습이 도로의 병목 현상과 닮아 BottleNeck이라고 불립니다.

파라미터가 감소하기 때문에 연산 속도가 빨라지지만, 정보 손실과 정확도와 연결되기 때문에 적절한 지점을 찾는 것이 중요합니다.

 

 

Inception Module

인셉션 모듈이란, 입력에 대해서 모든 필터와 Pooling을 수행한 뒤, Output을 모두 통합하는 모듈입니다.

 

 

Inception Network

Inception Module을 이용하여 네트워크를 구성한 것이 Inception Network입니다.

이 때, 두 차례의 Convolution이 진행됩니다.

  • 1. Depthwise Convolution : Filtering Stage
    하나의 필터는 하나의 채널에만 컨볼루션합니다. 
  • 2. Pointwise Convolution : 1의 결과를 1 x 1 x n_channel x n_filters 필터와 컨볼루션하여 하나의 지점에 대한 컨볼루션을 계산합니다. 위에서 배운 1 x 1 Convolution을 이용합니다.

 

일반 신경망의 cost를 살펴보면 Inception Network의 cost가 훨씬 적다는 것을 알 수 있습니다.

 

 

MobileNet_V2

MobileNet_V1은 위의 Depthwise Separable Convolution과 Bottleneck 구조를 적용하여 효과를 보았으나, 활성 함수가 ReLU같은 비선형 함수였기 때문에 정보가 많이 손실됨을 확인했습니다.

그러나 채널의 수를 충분히 늘린다면 다른 채널에서 살아있음이 확인되었고, 선형 활성 함수 Layer를 추가합니다. 이것이 Linear Bottleneck의 역할입니다.

 

그리고 일반적인 Residual Connection과 다르게 Inverted Residuals가 적용됩니다. WIDE - NARROW - WIDE가 아닌, NARROW - WIDE - NARROW의 형태를 가집니다. 이는 저차원 Narrow Layer에는 이미 필요한 정보들이 압축되어 있기 때문에 Skip Connection을 사용해도 더 깊이 전달될 수 있기 때문입니다.

 

 

EfficientNet

기존의 모델은 모델의 깊이 d, 너비 w, 입력 이미지의 해상도 r을 수동으로 조절했기에 최적의 성능을 얻기 어려웠습니다. 이에 EfficientNet 모델은 d, w, r을 효율적으로 조절하는 Compounding Scaling 방법을 제안합니다.

d, w, r이 일정한 관계가 있다는 것을 찾아내어 관계를 수식으로 만들게 됩니다.

 

 

댓글