GoogLeNet model Introduction

Date:


googLeNet(Going deeper with convolutions)

  • code name : Inception
  • ILSVRC 2014 1등 모델
  • 연구팀인원 대부분이 구글 사람
  • 특징은 1x1 conv 사용 및 layer 깊이를 늘림
  • Embedded나 Mobile에서도 사용 될 수 있도록 가볍게 만들기 위해 노력했다고 함


GoogLeNet 구조

  • stem
  • Inception(NIN, CCCP, Pooling)
  • Classifier

image


GoogLeNet 탄생 배경

🚨 기존 CNN의 문제점

  • CNN의 성능을 높이기 위해서는 크기를 키우면됨
  • Layer를 늘려서 깊이를 늘리던, Width를 키우는 방법(고품질의 이미지를 잘게 쪼게는 방식, 이 부분 이해가 안됨)
  • 하지만 두 가지 모두 Parameter를 키우기 때문에, overfitting 발생할 수 있고
  • 학습할 parameter가 많아지니 computing 자원이 많이 들어가게 됨

  • 위 두 가지 문제를 해결하기 위해 Fully Connected 구조에서 Sparsely Connected 구조로 바꾸려는 시도가 있음

image

  • LeNet에서도 sampling을 통한 연산으로 이런 부분을 해결하려고 함

image

하지만, 오늘날 컴퓨터는 sparse data 구조를 만들때 비효율적임,


💡GoogLeNet의 시작

  • Inception은 이런 sparse 구조를 실험하기 위해 만들기 시작했다고함

image

  • 그래서 제안된것이 여러 사이즈의 convolution 연산을 사용하여 상대적으로 작은 영역부터 큰 역영에 대한 object 정보를 유지할 수 있게 됨

💡 알쓸신잡

  1. 1x1 Convolution(Conv1x1) : 연산도 간단하고 픽셀마다의 피쳐를 계산해서 최대한 정보를 보존
  2. MaxPooling : 연산량을 대폭 줄여주어 cost도 절약되고 overfitting도 줄여줌
  3. nxn Convolution

위 세 가지를 어떻게 합치면 좋을까?

image

image

Image출처


inception

  • Googlenet을 만드는 기초적인 블럭
  • feature map을 효과적으로 추출할 수 있도록 1 x 1, 3 x 3, 5 x 5 convolution 연산
  • Conv연산, Pooling으로 이뤄지고, 각 연산 후 Depth방향으로 붙여줌
  • Conv연산 시, 높이와 폭을 맞추기 위해 Padding도 진행됨
  • Conv 연산 후 ReLU를 통해 비선형적 특징을 더 추가해줌

image


NIN(Network In Network)

  • LeNet CNN의 표준 구조로, Conv후 FC layer가 뒤따라오는 형태로 되어있음
  • NIN은 전체 network안에 micro network으로 구성됨

image

  • NIN 논문에서는 이런 Network 안에 Network에 대해서 설명하고 있음 (이 논문에서 inception이라는 말이 나오는데 이것은 영화 Inception을 모티브로 했다고 함, 영화 Inception 중 “we need to go deeper”라는 대사가 있음)
  • NIN은 신경망의 표현력을 높이기 위해 제안된 방법론(1x1 convolution추가, ReLU activation 사용)


CCCP (Cascaded Cross Channel Pooling)

  • Channel를 가로질러(Cross) Pooling 연산을 진행하는 방법
  • 이 방법이 1x1 Convolution과 닮아 있음

image


1x1 convolution

  • 병목현상을 제거
  • 네트워크 크기 제한(paramater 감소)

image

-> 이 방법을 사용함으로써 Channel(dimension) reduction으로 Parameter를 줄이고, 이렇게 줄어든 Parameter를 filter크기와 layer 깊이를 늘리는데 사용함


Classifier

Auxiliary Classifier

  • googLeNet 논문에서 정확한 설명은 빠져있는 내용
  • Layer가 깊어질 수 록 gradient vanishing가 발생하고, 끝에서는 학습이 제대로 이뤄지지 않거나 overfitting현상이 발생할 수 있음
  • googlenet 중간에 Classifier를 두어 역전파를 생성하여, 최종 역전파와 합쳐서 Gradient vanishing 최소화 시키기 위한 것으로 보임
  • 학습시에만 사용하고 이후에는 사용하지 않음
  • 학습을 도와주기 위한 도우미 역할

image

  • 파란색 점선은 Classifier가 없는 경우, 빨간색 선이 Classifier가 있는 경우로 gradient값이 다시 증가해서, 더 안정적인 학습결과를 얻을 수 있게 됨


Output Classifier

  • 마지막 단계로서 이미지를 인식하는 부분
  • average pooling과 softmax연산으로 분류함
  • Googlenet에서의 average pooling은 GAP(global Average Pooling)을 의미함
  • Gap를 활용하여 따른 가중치에 대한 필요가 없이 바로 연산이 가능함

image


Data augmentation

  • 한 개의 사이즈가 아니라 여러 사이즈의 image를 활용하여 training시킴
  • 가로, 세로 비율을 3:4, 4:3 사이로 유지하면 본래 사이즈의 8~100%를 포함하여 다양한 Patch를 사용
  • photometric distortion 사용하여 학습데이터를 늘림


📌reference


💡 수정 필요한 내용은 댓글이나 메일로 알려주시면 감사하겠습니다!💡 

Tags:

Categories:

Updated:

댓글