본 내용은
https://bskyvision.com/539?category=635506
https://hnsuk.tistory.com/32?category=958494
참고하여 제작하였습니다.
CNN Algorithms 중에서 이미지 분류용 Algorithms 중 GoogLeNet(Inception)에 대해 포스팅해보겠습니다.
목차
CNN Algorithm - GoogLeNet(Inception)
GoogLeNet(Inception) 소개
이번 포스팅에서 알아볼 알고리즘은 GoogLeNet입니다.
GoogLeNet은 2014년 이미지넷 이미지 인식 대회(ILSVRC)에서 VGGNet(VGG19)을 이기고 우승을 차지한 알고리즘입니다. GoogLeNet은 19층의 VGG19보다 좀 더 깊은 22층으로 구성되어 있습니다.
정확하게 보면 GoogLeNet은, Inception이라는 개념의 네트워크들 중 하나 입니다.
따라서 GoogLeNet은 Inception-v1와 같은 모델입니다.
GoogLeNet의 논문은 "Going Deeper With Convolutions"로, GoogLeNet이란 이름이 붙은 이유는 구글이 알고리즘 개발에 참여했기 때문입니다.
GoogLe Net 구조 & 1 x 1 Convolution
첫 번째 사진은 GoogLeNet의 구조도 입니다.
먼저 주목해야 할 것은 1x1 사이즈의 필터로 Convolution 해주는 것입니다.
구조도를 보면 곳곳에 1x1 Convolution 연산이 있음을 확인할 수 있습니다.
1x1 Convolution은 어떤 의미를 갖는 것일까요? 그렇다면 왜 해주는 것일까요?
GoogLeNet에서 1x1 Convolution은 Feature Map의 개수를 줄이는 목적으로 사용됩니다.
Feature Map의 개수가 줄어들면 Convolution을 하는데 그만큼 연산량이 줄어듭니다.
이미지가 있을 때 3x3 Convolution을 그래도 하게 되면 필터 개수만큼 채널의 depth가 늘어나게 됩니다.
기본적으로 3x3은 9개를 가지고 있고 채널 수만큼 하게 되면 아무래도 연산량이 부담이 됩니다.
반면에 1x1을 사용하게 되면 같은 채널이라고 해도 1x1 픽셀만 고려하면 되기 때문에 연산량이 크게 줄어듭니다.
연산량을 줄일 수 있다는 점은 네트워크를 더 깊이 만들 수 있게 도와준다는 점에서 중요합니다.
Inception Module
GoogLeNet은 총 9개의 Inception Module을 포함하고 있습니다.
Inception Module을 확대해서 자세히 살펴봅시다.
GoogLeNet에 실제로 사용된 Module은 1x1 Convolution이 포함된 (b) 모델입니다.
이전에 살펴봤듯이 1x1 Convolution은 Feature Map의 개수를 줄여주는 역할을 합니다.
1x1 Convolution을 제외한 naive version을 살펴보면, 이전 층에서 생성된 Feature Map을 1x1 Convolution, 3x3 Convolution, 5x5 Convolution, 3x3 Max pooling해준 결과로 얻은 Feature Map들을 모두 함께 쌓아줍니다.
AlexNet, VGGNet 등의 이전 CNN 모델들은 한 층에서 동일한 사이즈의 필터 커널을 이용해서 Convolution을
줬던 것과 차이가 있습니다. 따라서 좀 더 다양한 종류의 특성이 도출됩니다.
여기에 1x1 Convolution 포함되었으니 당연히 연산량은 많이 줄어들었을 것입니다.
Global average pooling
GoogLeNet은 AlexNet, VGGNet과 달리 Fully Connected 대신 Global Average Pooling을 사용합니다.
Global Average Pooling은 전 층에서 산출된 Feature Map들을 각각 평균 낸 것을 이어서 1차원 벡터로 만들어 줍니다. 1차원 벡터를 만들어줘야 최종적으로 이미지 분류를 위한 softmax 층을 연결해줄 수 있기 때문입니다.
이렇게 해줌으로써 얻을 수 있는 장점은 가중치의 개수를 상당히 많이 없애준다는 것입니다.
만약 FC 방식을 사용한다면 훈련이 필요한 가중치의 개수가 7X7X1024X1024 = 51.3M이지만
Global Average Pooling을 사용하면 가중치가 단 한 개도 필요하지 않습니다.
Auxiliary classifier(보조 분류기)
네트워크의 깊이가 깊어지면 깊어질수록 Vanishing gradient 문제를 피하기 어려워집니다.
여기서 Vanishing gradient란 가중치를 훈련하는 역전파(back propagation) 과정에서 가중치를 업데이트하는 데 사용되는 gradient가 점점 작아져서 0이 돼버리는 것을 말합니다.
따라서 이런 문제가 발생하면 네트워크 내의 가중치들이 제대로 훈련되지 않습니다.
이 문제를 극복하기 위해서 GoogLeNet에서는 네트워크 중간에 두 개의 보조 분류기(Auxiliary classifier)를 달아주었습니다.
이 보조 분류기들은 훈련 시에만 활용되고 사용할 때는 제거해줍니다.
Summary
GoogLeNet의 전체적인 구조를 다시 한번 설명해드리겠습니다.
Input Image
- 224 x 224 x 4 이미지를 입력으로 받습니다.
Inception Module(Convolution Layer)
- 총 9번의 Inception Module을 시행합니다.
- 단, Input Image와 가까운 부분은 Convolution을 시행합니다. 왜냐하면 얕은 네트워크는 Inception Module을 사용해도 효과가 없음을 확인했기 때문입니다.
- Model 훈련 중일 때 4번째와 7번째 Inception Module은 Auxiliary Classifier를 시행합니다.
Final Layer(Fully Connected Layer)
- Global Average Pooling으로 Flatten 해준 후 1000개의 뉴런을 출력합니다.
- 1000개 뉴런 출력 값에 Softmax 함수를 적용하여 1000개 클래스 각각에 속할 확률을 나타냅니다.
---------------------------------------------------------------------------------------------------------------------------------------------------
GoogLeNet algorithm에 대한 conclusion을 말씀드리겠습니다.
- Inception Module을 제안함
- 상기 모듈을 통하여 깊은 네트워크에서도 비교적 적은 파라미터를 사용하여 모델 성능을 크게 향상시킴
'Main > Paper Review' 카테고리의 다른 글
[Paper Review] MobileNet V1 (0) | 2022.05.26 |
---|---|
[Paper Review] SENet: Squeeze-and-Excitation Networks (0) | 2022.05.16 |
[Paper Review] Batch Normalization (1) | 2022.03.31 |
[CNN-Algorithm] ResNet (0) | 2022.03.22 |
[CNN-Algorithm] VGGNet (0) | 2022.03.21 |
댓글