ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Going deeper with convolutions 정리 및 코드 구현 by PyTorch & Tensorflow [GoogLeNet]
    AI/Computer Vision 2021. 9. 5. 17:47
    728x90
    Going deeper with convolutions 정리 및 코드 구현 by PyTorch & Tensorflow  [GoogLeNet]

     

     

     

    0. abstract

     

    GoogLeNet은 2014년 ILSVRC에서 VGGNet(VGG19)을 이기고 우승을 차지한 알고리즘이다. GoogLeNet은 19층의 VGG19보다 좀 더 깊은 22층으로 구성되어 있다. 

     

    이 모델의 주요 특징은 연산을 하는 데 소모되는 자원의 사용 효율이 개선되었다는 것이다. 즉, 정교한 설계 덕에 네트워크의 depth와 width를 늘려도 연산량이 증가하지 않고 유지된다는 뜻이다.

    이때, 성능을 최적화하기 위해 Hebbian principle과 multi-scale processing을 적용하였고, 이 구조를 GoogLeNet이라 부른다고 한다. GoogLeNet은 22개의 layer를 가진다.

     

     

    1. Introduction

     

    GoogleNet 이점 1) 파라미터 수 감소 2) 알고리즘 효율성 Good! 

     

    *Deep의 의미 1) Inception Module이란 새 개념의 등장 2) 실제 모델 구조(layer 수) 깊어짐

     

     

    2. Related Work

     

     

       1) Lenet5

     

          :제일 먼저 등장한 Std. Conv Layer + 여러 개의 FC Layer -> overfitting 막기 위해 dropout 쓰면서 레이어의 개수나 사이즈 증가 

     

       2) Inception

     

          : 기존의 Max Pooling layer- spatial 정보에 대한 loss 생겨도 localization good! 

             -> multiple scale을 다루기 위한 different filters -> GoogLeNet에 여러 번 적용

     

       3) Network in Network

     

          : 1x1 Conv Layer 추가

                                      (1) 차원 줄이기 (computational bottlenecks 줄이기)
                                       (2) 네트워크 크기 제한 -> 깊이뿐만 아니라 폭도 증가

       4) R-CNN

     

          : Object Detection 분야에서 사용

                                      (1) low level cue를 utilize한다 (cate 종류 상관 없이 물체 자체를!)

                                      (2) CNN Clf. 사용

     

     

     

    3. Motivation and High Level Considerations

     

       -> DNN 성능을 높이는 가장 핵심적인 방법 -> depth(레벨의 수)와 width(각 레벨의 Unit 수) 증가 -> 2가지 문제점 발생

     

           1)  파라미터 수 증가 -> Overfitting

           2) Computational resources 증가 

     

        -> 해결방안:  Conv Layer 내에서도 FC를 Sparsely Connected로 바꾸는 것! 그러나 Sparse한 것 계산에 비효율적

     

     

    -> Uniform한 구조/ 많은 필터들/ greater batch size -> dense한 computation에 효율!

        -> 그렇다면, 어떻게 노드 간의 연결 줄이면서(sparsely connected), 행렬 연산은 dense 연산하도록 처리하나?

               -> "Inception Module" 쓰자!


     

    4. Architecture Details

    a) Inception 구조의 주요 아이디어는 CNN에서 각 요소를 최적의 local sparce structure로 근사화하고, 이를 dense component로 바꾸는 방법을 찾는 것! 즉, 최적의 local 구성 요소를 찾고 이를 공간적으로 반복하면 된다.

     

       -> Sparse 매트릭스를 서로 묶어 (클러스터링 하여) 상대적으로 Dense한 Submatrix를 만든다는 것

     

     

    -> But 문제 발생!

    3 x 3 Convolutional filter 뿐만 아니라, 5 x 5 Convolutional filter도 사용할 경우, 연산량이 많아지는데 입력 feature map의 크기가 크거나 5 x 5 Convolutional filter의 수가 많아지면 연산량은 더욱 증가하게 된다.

     

     

    b) 위 문제를 해결하기 위해 1 x 1 Convolutional filter를 이용하여 차원을 축소하였다

     

       -> 3 x 3과 5 x 5 앞에 1 x 1을 두어 차원을 줄이는데, 이를 통해 여러 Scale을 확보하면서도 연산량을 낮출 수 있다.

     

    5. GoogLeNet

     

    * GoogLeNet이라는 이름은 LeNet으로부터 유래하였다.

     

    Inception module 내부를 포함한 모든 Convolution layer에는 ReLU가 적용되어 있다.

    또한 receptive field의 크기는 224 x 224로 RGB 컬러 채널을 가지며, mean subtraction을 적용한다.

     

     

    Part 1) 입력 이미지와 가까운 낮은 레이어가 위치해 있는 부분 -> stem 

       : 이 레이어는 다른 인셉션 모듈과 달리 순차적으로 패러미터들을 전파시킨다. stem이라는 이름은 후에 서술되는 v2,v3부터 언급되는데, 인셉션 모듈들만 사용한 모델 대신 stem 레이어를 넣었을 때 문제가 생긴다는 것으로 보아, 사라질 위기에 처해있다.

     

    Part 2) Inception module로서 다양한 특징을 추출하기 위해 1 x 1, 3 x 3, 5 x 5 Convolutional layer가 병렬적으로 연산을 수행

       : 이 레이어는 GoogLeNet을 만드는 데 있어서 가장 기초적인 블록이다.  ConV과 pooling layer들로 이루어져 있으며, 각 케이스마다 수행된 뒤 depth를 축으로 합쳐진다. conv1x1으로 패러미터를 축소시킬 경우 적은 패러미터로 효과적인 학습을 가능하게 한다.

     

    Part 3) auxiliary classifier가 적용된 부분

       : GoogLeNet의 구조가 깊어서 그런지 vanishing gradient 문제를 걱정하던 연구진들은 중간 레이어들에 나오는 feature들로 구분하면 마지막 레이어보다 bias가 높은 판단을 내릴 것이라고 가정한 뒤 auxilary classifier를 두어 loss function에 위 구분자들의 loss값을 일정 부분 포함시킨다. 그러나 테스트 과정에서는 쓰지 않는다.

     

    Part 4) 예측 결과가 나오는 모델의 끝 부분 -> Global Average Pooling

       : 최종 단계로서 이미지를 인식하는 부분을 담당한다. average pooling으로 파라미터를 줄인 뒤 softmax로 각 클래스일 확률을 구한다.

     

     

    첫번째로 네트워크의 얕은 부분, 입력과 가까운 부분에는 Inception 모듈을 사용하지 않았다는 것. 논문에 따르면 이 부분에는 Inception의 효과가 없었음.

     

    두 번째는 softmax를 통해 결과를 뽑아내는 부분이 맨 끝에만 있는 것이 아니라, 중간 중간에 있다는 것. 깊은 네트워크에서 Vanishing Gradient 문제 발생 ->  auxiliary classifier 통해 Loss를 맨 끝뿐만 아니라 중간 중간에서 구하기 때문에 gradient가 적절하게 역전파.

     

     

    728x90
Designed by Tistory.