본문 바로가기
Visual Intelligence/Image Classification

[Image Classification] GoogleNet

by goatlab 2022. 9. 6.
728x90
반응형
SMALL

GoogleNet

 

GoogLeNet은 2014년도 ILSVRC (ImageNet Large Sclae Visual Recognition Challenge)에서 우승한 CNN 네크워크이다. 정확하게 보면 GoogLeNet은 Inception이라는 개념의 네트워크들 중 하나이다.

 

CNN의 성능 향상 기법 CNN의 성능을 향상시키기는 가장 직접적인 방식은 망의 크기를 늘리는 것이다. 망의 크기를 늘린다는 것은 단순하게 망의 레이어 수 (depth)를 늘리는 것 뿐만 아니라, 각 레이어에 있는 유닛의 수(width)도 늘리는 것을 의미한다. 특히, ImageNet과 같은 대용량 데이터를 이용한 학습의 경우 필수적이다.
깊은 망의 부작용 망이 깊어지면 성능이 높아지지만 2가지 중대한 문제가 발생한다.
  • 망이 깊어질수록 파라메터의 수가 증가한다. 이는 학습에 사용할 데이터 양이 제한적일 경우 오버피팅이 발생할 가능성이 존재한다.
  • 망의 크기가 커지면 연산량이 증가한다.
NIN (Network-In-Network) GoogleNet에서는 망의 깊이와 넓이가 모두 커지고 중간에 분기되는 부분이 있다. Inception Module이 등장하는데, 이는 이전에 발표된 Network-in-Network논문의 영향을 받은 것이다.

 

Network-In-Network 설계자는 CNN의 convolution layer가 local receptive field에서 Feature를 추출해내는 능력은 우수하지만 필터의 특징이 선형적이기 때문에 비선형 적인 성질을 갖는 feature를 추출하는데 어려움이 있다고 한다. 이 부분을 개선하기 위해서 feature의 갯수를 늘려야 하는 문제에 주목했다. Local receptive filed안에서 좀 더 feature를 잘 추출하는 방법이 micro neural network이다. 이들은 convolution 대신에 MLP (Multi layer perceptron)를 사용하여 feature를 추출할 수 있도록 했다.

 

https://www.semanticscholar.org/paper/Network-In-Network-Lin-Chen/5e83ab70d0cbc003471e87ec306d27d9c80ecb16

 

구조

 

https://medium.com/analytics-vidhya/cnns-architectures-lenet-alexnet-vgg-googlenet-resnet-and-more-666091488df5

 

GoogLeNet에서 1x1 컨볼루션은 특성맵의 갯수를 줄이는 목적으로 사용된다. 특성맵의 갯수가 줄어들면 그만큼 연산량이 줄어든다.

 

https://bskyvision.com/539

 

GoogLeNet에서 1x1컨볼루션은 특성맵의 갯수를 줄이는 목적으로 사용된다. 특성맵의 갯수가 줄어들면 그만큼 연산량이 줄어든다.

 

https://kangbk0120.github.io/articles/2018-01/inception-googlenet-review

 

GoogLeNet은 총 9개의 인셉션 모듈을 포함하고 있다.

 

https://wikidocs.net/137251

 

GoogLeNet에 실제로 사용된 모듈은 1x1 컨볼루션이 포함된 (b)모델이다. 1x1 컨볼루션은 특성맵의 장 수를 줄여주는 역할을 한다.노란색 블럭으로 표현된 1x1 컨볼루션을 제외한 나이브 (naive) 버전을 살펴보면, 이전 층에서 생성된 특성맵을 1x1 컨볼루션, 3x3 컨볼루션, 5x5 컨볼루션, 3x3 최대 풀링해 준 결과, 얻은 특성맵들을 모두 함께 쌓아준다. AlexNet, VGGNet 등의 이전 CNN 모델들은 한 층에서 동일한 사이즈의 필터 커널을 이용해서 컨볼루션을 해줬던 것과 차이 가 있다. 따라서, 좀 더 다양한 종류의 특성이 도출된다. 여기에 1x1 컨볼루션이 포함되었으니 당연히 연산량은 많이 줄어들었을 것이다.

 

https://bskyvision.com/entry/CNN-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EB%93%A4-GoogLeNetinception-v1%EC%9D%98-%EA%B5%AC%EC%A1%B0

 

AlexNet, VGGNet 등에서는 fully-connected (FC) 층들이 망의 후반부에 연결되어 있다. 그러나 GoogLeNet은 FC방식 대신에 globalaveragepooling이란 방식을 사용한다. globalaveragepooling은 전 층에서 산출된 특성 맵들을 각각 평균낸 것을 이어서 1차원 벡터를 만들어주는 것이다. 1차원 벡터를 만들어줘야 최종적으로 이미지 분류를 위한 softmax 층을 연결해줄 수 있기 때문이다. 만약, 전 층에서 1024장의 7x7의 특성맵이 생성되었다면 1024장의 7x7 특성맵 각각 평균을 구하여 1024개의 값을 하나의 벡터로 연결 해주는 것이다.

 

https://paperswithcode.com/method/auxiliary-classifier

 

이렇게 해줌으로 얻을 수 있는 장점은 가중치의 갯수를 상당히 많이 없애준다는 것이다. 만약, FC방식을 사용한다면 훈련이 필요한 가중치의 갯수가 7x7x1024x1024=51.3M이지만 globalave ragepooling을 사용하면 가중치가 단 한 개도 필요하지 않다. 

 

네트워크의 깊이가 깊어지면 깊어질수록 vanishing gradient 문제를 피하기 어려워진다. 가중치를 훈련하는 과정에 역전파 (backpropagation)를 주로 활용하는데, 역전파 과정에서 가중치를 업데이트하는데 사용되는 gradient가 점점 작아져서 0이 되어버리는 것이다. 따라서, 네트워크 내의 가중치들이 제대로 훈련되지 않는다. 이 문제를 극복하기 위해서 GoogLeNet에서는 네트워크 중간에 두 개의 보조 분류기 (auxiliaryclassifier)를 달아주었다.

728x90
반응형
LIST