닫기

테크노트

배너

라온피플의 머신러닝 아카데미(12) - GoogLeNet (3)

  • 등록 2019.06.24 11:49:15
URL복사
[마감임박!! 무료] 생성형AI, 디지털트원, 제조AI, SaaS, 클라우드로 생산성 높이고, 비용절감 방안 제시.. AI자율제조혁신포럼 개최 (3/27~29, 코엑스3층 컨퍼런스룸 317~318호)

[첨단 헬로티]


머신비전산업에서 인공지능 기술(머신러닝, 딥러닝)이 빠르게 확산되고 있다. 인공지능 기술을 통해 기존의 컴퓨터비전 기술로는 어려웠던 검사가 가능해질 뿐만 아니라 ‘데이터의 자기 학습’으로 보다 빠르고 쉬우며 신뢰성과 유연성을 갖춘 머신비전 검사가 가능해졌다. 이에 따라 자연스럽게 인공지능 기술에 대한 관심이 높아지고 있다. 국내 대표적인 머신비전 전문업체인 라온피플은 ‘LAON PEOPLE’s 머신러닝 아카데미’를 통해 인공지능의 대표적인 기술인 머신러닝 기술에 대해 연재한다.

 

2014년에 발표된 GoogLeNet과 VGGNet 등에서 가장 주목할 만한 특징은 망이 깊어지고 넓어졌다는 점이며, 이후 CNN 구조의 대세를 이루게 된다. 그럼 왜 이렇게 망은 넓어지고 깊어지는 것일까? 답은 깊어진 망을 이용하게 되면 문제 해결능력, 즉 학습 능력이 증가하기 때문이다.

 

하지만, 망이 깊어지게 되면 앞서 살펴보았듯이, 적절한 hyper-parameter의 설정이나 초기값 설정이 없다면 overfitting 문제에 빠질 가능성이 훨씬 증가하게 되며, 연산량의 문제로 인해 아주 성능 좋은 시스템을 사용하여 학습을 할지라도 시간이 너무 오래 걸리고, 그로 인해 최적의 결과를 얻어내지 못할 수도 있게 된다. 또한 스마트 폰이나 embedded system 에서는 아주 제한된 하드웨어 자원으로 인해, 망이 깊어지는 것에 대해서는 꿈도 꾸지 못할 수도 있다.

 

GoogLeNet 설계자들은 단순하게 hyper-parameter나 초기값을 적절하게 잘 설정하는 것만으로는 한계가 있다는 점을 잘 이해하였기 때문에 전체 구조적인 측면을 주목 하였으며, 다양한 CNN 구조 실험을 통해, 연산량을 유지하면서 망의 깊이와 넓이를 증가시킬 수 있는 구조를 얻게 되었다.

 

그 결과를 2014년 ILSVRC 대회 우승을 통하여 입증을 하였으며, 2015년에 발표한 그들의 또 다른 논문을 살펴보면, 좀 더 구조적인 개선을 통하여, 그 성능이 다시 2배 정도 좋아지는 쾌거를 이루게 되었다.
지난 2개의 Class를 통해, GoogLeNet의 핵심인 1x1 convolution, NIN(Network-in-Network), 인셉션 모듈의 기본 개념에 대하여 살펴보았기 때문에, 이번 Class에서는 그 개념들을 결합하여 GoogLeNet의 전체 구조에 대하여 살펴볼 예정이다.

 

GoogLeNet의 핵심 철학 및 구조
GoogLeNet 의 핵심 설계 철학은 주어진 하드웨어 자원을 최대한 효율적으로 이용하면서도 학습 능력은 극대화 할 수 있도록 깊고 넓은 망을 갖는 구조를 설계하는 것이다.

 

그림1

 

이를 위해 GoogLeNet [1] 와 GoogLeNet [2] 에서 살펴본 것처럼, 인셉션이라는 독특한 모듈을 만들어 낸다. 인셉션 모듈에 있는 다양한 크기의 convolution kernel(그림7에서 파란색 부분)을 통해 다양한 scale의 feature를 효과적으로 추출하는 것이 가능해졌다. 또한 인셉션 모듈 내부의 여러 곳에서 사용되는 (위 그림의 노란색 부분) 1x1 convolution layer를 통해, 연산량을 크게 경감시킬 수 있게 되어, 결과적으로 망의 넓이와 깊이를 증가시킬 수 있는 기반이 마련 되었다. 이 인셉션 모듈을 통해 NIN(Network-in-Network) 구조를 갖는 deep CNN 구현이 가능하게 되었다.

 

인셉션 모듈을 개발하고, 2014년 ILSVRC에 참가하기 위한 구조 결정을 마치고, GoogLeNet이라는 이름을 붙인다. 인셉션은 모듈 개념이기 때문에, CNN을 적용하고자 하는 목적이나 분야에 따라 그 조합을 다르게 가져갈 수도 있다. GoogLeNet의 경우는 파라미터가 있는 layer를 기준으로 총 22개의 layer를 갖는 말 그대로 deep network이 만들어진다. 그리고 실제로 망에 들어 있는 unit의 수를 합하면 약 100개의 unit이 된다. 2014년 이전에는 볼 수 없었던 방대한(?) 네트웍이 만들어진 셈이다.

 

GoogLeNet에는 아래 그림2과 같이, 총 9개의 인셉션 모듈이 적용이 되었다. 그림에서 빨간색 동그라미가 인셉션 모듈에 해당이 된다. 망이 워낙 방대하여 작은 그림으로 표현하기에 아쉬움이 있다.

 

그림2

 

위 그림2에서 파란색 유닛은 convolutional layer를 의미하고, 빨간색은 max-pooling 유닛을 뜻하며, 노란색 유닛은 Softmax layer이고, 녹색은 기타 function을 가리킨다. 인셉션 모듈을 나타내는 동그라미 위에 있는 숫자는 각 단계에서 얻어지는 feature-map의 수를 나타낸다.

 

표1. GoogLeNet의 각 layer의 구조


 
GoogLeNet의 각 layer의 구조는 위 표1과 같다. 위 표는 얼핏 보기에는 복잡해 보이지만, 조금만 살펴보면 그 내용을 정확하게 이해할 수 있다.

 

○ Patch size/stride: 커널의 크기와 stride 간격을 말한다. 최초의 convolution에 있는 7x7/2의 의미는 receptive field의 크기가 7x7인 filter를 2픽셀 간격으로 적용한다는 뜻이다.

 

○ Output size: 얻어지는 feature-map의 크기 및 개수를 나타낸다. 112x112x64의 의미는 224x224 크기의 이미지에 2픽셀 간격으로 7x7 filter를 적용하여 총 64개의 feature-map이 얻어졌다는 뜻이다.

 

○ Depth: 연속적인 convolution layer의 개수를 의미한다. 첫번째 convolution layer는 depth가 1이고, 두번째와 인셉션이 적용되어 있는 부분은 모두 2로 되어 있는 이유는 2개의 convolution을 연속적으로 적용하기 때문이다.

 

○ #1x1: 1x1 convolution을 의미하며, 그 행에 있는 숫자는 1x1 convolution을 수행한 뒤 얻어지는 feature-map의 개수를 말한다. 첫번째 인셉션 3(a)의 #1x1 위치에 있는 숫자가 64인데 이것은 이전 layer의 192개 feature-map을 입력으로 받아 64개의 feature-map이 얻어졌다는 뜻이다. 즉, 192차원이 64차원으로 줄어들게 된다.

 

○ #3x3 reduce: 이것은 3x3 convolution 앞쪽에 있는 1x1 convolution 을 의미하여 마찬가지로 인셉션 3(a)의 수를 보면 96이 있는데, 이것은 3x3 convolution을 수행하기 전에 192차원을 96차원으로 줄인 것을 의미한다.

 

○ #3x3: 1x1 convolution에 의해 차원이 줄어든 feature map에 3x3 convolution을 적용한다. 인셉션 3(a)의 숫자 128은 최종적으로 1x1 convolution과 3x3 convolution을 연속으로 적용하여 128개의 feature-map이 얻어졌다는 뜻이다.

 

○ #5x5 reduce: 해석 방법은 “#3x3 reduce”와 동일하다.

 

○ #5x5: 해석 방법은 “#3x3”과 동일하다. #5x5는 좀 더 넓은 영역에 걸쳐 있는 feature를 추출하기 위한 용도로 인셉션 모듈에 적용이 되었다.

 

○ Pool/proj: 이 부분은 max-pooling과 max-pooling 뒤에 오는 1x1 convolution을 적용한 것을 의미한다. 인셉션 3(a) 열의 숫자 32 는 max-pooling과 1x1 convolution을 거쳐 총 32개의 feature-map이 얻어졌다는 뜻이다.

 

○ Params: 해당 layer에 있는 free parameter의 개수를 나타내며, 입출력 feature-map의 數에 비례한다. 인셉션 3(a) 열에 있는 숫자 159K는 총 256개의 feature-map을 만들기 위해 159K의 free-parameter가 적용되었다는 뜻이다.

 

○ Ops: 연산의 수를 나타낸다. 연산의 수는 feature-map의 수와 입출력 feature-map의 크기에 비례한다. 인셉션 3(a)의 단계에서는 총 128M의 연산을 수행한다.

 

위 설명에 따라 표에 있는 각각의 숫자들의 의미를 해석해 보면, GoogLeNet의 구조를 좀 더 친숙하게 이해할 수 있다.
인셉션 3(a)에는 256이라는 빨간색 숫자가 적혀 있는데, 이것은 인셉션 3(a)를 통해 총 256개의 feature-map이 만들어졌다는 뜻이며, 이것은 1x1 convolution을 통해 64개, 1x1과 3x3 연속 convolution을 통해 128개, 1x1과 5x5 연속 convolution을 통해 32개, max-pooling과 1x1 convolution을 통해 32개를 적용하여 도합 256개의 feature-map을 얻을 수 있게 되었다는 뜻이다.

 

3x3보다는 5x5 convolution을 통해 얻는 feature-map의 개수가 작은 이유는 5x5 convolution이 훨씬 연산량을 많이 필요로 하기 때문이며, 입력 이미지의 크기가 이미 28x28로 줄어든 상황에서는 3x3으로 얻을 수 있는 feature가 5x5로 얻을 수 있는 feature보다 많기 때문일 것이다.

 

만약에 3x3이나 5x5 convolution 앞에 1x1 convolution이 없다면 어떻게 되었을까? 3x3 convolution의 경우는 1x1 convolution을 통해 192개의 feature-map이 96개로 줄었기 때문에 50% 정도 연산량이 줄었으며, 5x5의 경우는 192개가 16개로 줄었기 때문에, 약 91.7% 정도 연산량이 줄어들게 되었다. 특히 5x5에서 연산량이 크게 줄었기 때문에, 1x1 convolution을 통한 차원 절감의 효과를 크게 누릴 수 있다.

 

이번 호에서는 GoogLeNet의 구조에 대하여 설명을 하였다. GoogLeNet은 익숙한 기존 CNN 구조와 다른 점이 많아 상세한 설명을 하려면, 지면이 많이 소요된다. 다음 Class에서는 GoogLeNet에 적용된 Auxiliary classifier 및 Inception –V2, Inception-V3 구조 등에 대하여 살펴볼 예정이다.

 

라온피플



















주요파트너/추천기업