[논문리뷰 | CV] Going deeper with convolutions (2014) Summary

9e0na·2023년 5월 10일
1

[논문리뷰]

목록 보기
2/40
post-thumbnail

Title

  • Going deeper with convolutions(2014)
  • GoogLeNet


Abstract

  • 이 아키텍처의 가장 큰 특징은 네트워크 내부의 컴퓨팅 리소스 활용도를 개선했다는 것이다.

  • Hebbian principle 와 he intuition of multi-scale processing을 기반으로 품질을 최적화하였다.

  • 22개 Layer를 가진 심층 네트워크이다.


1. Introduction

  • GoogLeNet은 2년 전 우승한 AlexNet 아키텍처보다 12배 적은 파라미터를 사용하면서도 더 많은 파라미터를 사용한다.

  • 모바일 & 임베디드 시스템의 지속적인 성장에 따라 메모리 사용량이 매우 중요해졌다.

  • 이 아키텍처의 이점은 ILSVRC 2014 분류 및 탐지 과제에서 실험적으로 검증되었고, 최신 기술을 훨씬 능가하는 성능을 보인다.


2. Related Word

  • 이 기본 설계의 변형은 이미지 분류 문헌에서 널리 사용되고 있으며, MNIST, CIFAR 특히 ImageNet 분류 과제에서 가장 좋은 결과를 얻었다.

  • 1x1 Conv는 계산 병목 현상을 제거하기 위한 차원 축소 모듈로 자주 사용하고 있다.

  • 객체 감지를 위한 선도적인 접근 방식은 R-CNN이다.

  • 더 나은 분류를 위한 앙상블 접근법 등 향상된 기능을 적용했다.


3. Motivation and High Level Considerations

  • 딥러닝의 성능을 높이는 방법은 Layer를 깊게(depth) 그리고 Width를 증가시키는(channel) 것이다.

  • 하지만 이렇게 네트워크가 증가하게 되면 Overfitting과 Gradient Vanishing이 발생될 수 있다.

  • 또한, 네트워크의 크기가 증가하면 컴퓨팅 리소스 사용이 급격히 증가한다는 것이다.

  • 그래서 GoogLeNet에서는 Layer을 깊게 쌓되, 효율적으로 깊게 쌓자는 것이 핵심이다.

  • Inception 아키텍처의 초기 성공은 향후 이 방향으로의 흥미로운 작업에 대한 확고한 동기를 부여한다.


4. Architectural Details

  • 위의 그림은 전체적인 Architectural이며, 1번-4번으로 나누어서 이야기하겠다.

4.1 기본적인 CNN 구조 활용

  • 낮은 Layer에서는 효율적인 메모리 사용을 위해 기본 CNN 구조를 활용하였다.

  • Conv -> Pooling -> Conv -> Pooling


4.2 inception module 9개

  • 왼쪽 그림을 90도로 세우면 오른쪽 그림과 같이 된다. inception module을 자세하게 살펴보면 밑에 다음과 가다.

1. 다양한 Conv Layer의 병렬 사용

  • 1x1, 3x3, 5x5 Layer 등 다양한 Layer로 처리하기 때문에 다양한 정보를 학습시킬 수 있다.

  • 병렬적인 처리로 인해 기존의 정보를 많이 학습시킬 수 있다.

2. 3x3 max-pooling

  • Conv network에 꼭 해야 되는 기법이라고 생각하면 좋다.

  • 3x3 max-pooling은 Inception module 내부에서는 진행하지 않고 밖에서 진행된다. 여러개의 Inception module 들을 적용할 때 개별 inception 모듈 적용 후 max pooling을 적용한다.

  • Concatenate는 Inception module 내에서 수행되고 inception module내에서 Feature map의 크기가 동일하게 맞춰진 후 Concatenate 하게 된다.

3. 차원 축소 1x1 Conv Layer

  • 연산량을 줄이기 위해 Bottle Neck과 같이 1x1 Conv Layer를 사용한다. 즉, 파라미터 수가 감소하게 되고 이러한 이점을 통해 모델을 더욱 깊게 구성할 수 있다.

  • GoogLeNet 이후 Xception, Squuze, Mobile 등 다양한 모델에서도 연산량 감소를 위해 이를 많이 사용하고 있다.

  • Semantic Segmentation 연구에서도 Channel or Spatial 특성 파악을 위해 1x1 Conv 방법 사용이 유의미하다는 것을 증명했다.

[1x1 Convolution의 장점]

1) Channel 수 조절

  • 대부분 Conv Layer을 사용해서 Model을 구성할 때, 그 특성에 맞게 직접 설정해야 한다. 하지만 1x1 Conv를 사용하면 사용자가 원하는만큼 Channel 수를 결정할 수 있다.
  • 파라미터 수가 급격하게 증가하는 것을 예방할 수 있기 때문에 Channel수를 특별한 케이스가 아니면 직접 조절할 수 있고, 사용자가 원하는 구조의 모델을 구성해볼 수 있다.


    2) 연산량 감소 (Efficient)

  • 위 그림처럼 Channel 수 조절은 연산량 감소에 직접적으로 영향을 주게 되어 모델을 깊게 쌓을 수 있도록 도움을 준다.
  • Channel수를 줄였다가 다시 늘이는 부분을 BottleNeck 구조라고 한다.
  • 위의 그림에 빨간색 글씨는 해당 과정에서 사용되는 전체 파라미터 개수를 의미한다. 밑에 그림은 Conv 1x1 연산을 통해 44백만개의 수가 필요하지만, 위에는 160백만개의 파라미터 수가 필요하다.
  • 따라서, 위 그림의 예시로 (28x28x64x5x5x128)을 해석한다면, 1️⃣ (5x5x128) 크기의 Conv 필터가 64개 사용되어 (28x28x64) 크기를 갖는 output이 나온다.


    3) 비선형성 (Non-linearity)
  • ReLU Activation을 사용하여 비선형성을 증가시켜준다. 복잡한 패턴을 더 잘 인식할 수 있게 된다.

4. Concat

  • 4개의 Feature Map들을 하나로 겹쳐주는 역할을 한다.

  • 형광색으로 된 부분을 보면, 각 분기의 결과는 크기를 하나로 통일하게 설계해야지만 concat이 가능하다.


4.3 Auxiliary Classification (보조 분류기)

  • 일반적인 모델 or VGG모델 같은 경우, 마지막 층에 softmax를 통해서 Loss를 구한 다음에 gradient 통해서 기울기를 업데이트 했다. 이때 Layer가 깊어질수록 학습이 잘 진행되지 않는 Gradient Vanishing 문제가 발생한다.

  • GoogLeNet에서는 보조분류기로 Layer 중간 중간에 softmax 층을 하나 출력을 더해서 역전파를 같이 수행한다. 즉, Layer 중간 중간 softmax를 출력하여 gradient 역전파를 진행한다.

  • 최종 값 x 0.3 / 보조분류기에서 나온 값 x 0.3 을 곱해서 가중치를 적용한다. test 시에는 제거한다.


4.4 Global Average Pooling (GAP)

  • 기존의 경우, 1차원으로 flatten 시킨 뒤, FC를 거쳐 1x1x1024의 벡터로 생성한다. 즉, 50,176x1,024의 연산이 필요하다. (50,176 = 7x7x1,024)

  • 각각의 Feature Map 하나 당 평균을 내기 때문에 파라미터 계산이 필요하지 않고 연산량을 줄였다.
  • 즉, 각각의 Feature Map 하나하나를 평균 내어 1,024개의 벡터를 연결해준다.

5. GoogLeNet

  • 실험 결과, 아키텍처 파라미터의 영향이 상대적으로 크다는 것이 밝혀졌다.
  • 224x224 RGB 컬러 채널
  • 이 네트워크는 계산 효율성과 실용성을 염두에 두고 설계되었기 때문에 계산 리소스가 제한되어 있고 메모리가 적은 기기에서도 추론 실행 가능하다.
  • 네트워크의 깊이는 22 Layers (Pooling까지 포함하면 27 Layers)
  • 흥미로운 인사이트는 상대적으로 얕은 네트워크의 강력한 성능은 네트워크 중간 Layer에서 생성되는 특징이 매우 변별력 있어야 한다는 것이다.
  • 중간 Layer에 연결된 보조 분류기를 추가하면 분류기의 하위 단계에서 변별력을 높이고, 다시 전파되는 기울기 신호를 증가시켜 추가적인 규칙화를 제공한다.

  • 차원 감소 및 정류된 선형 활성화를 위한 128개의 필터가 포함된 1x1 conv
  • Dropout Layer는 출력 비율이 70%인 Layer
  • 1024개의 유닛과 정류된 선형 활성화로 완전히 연결된 Layer
  • Softmax 손실이 있는 선형 Layer를 분류자로 사용

6. Training Methodology

  • CPU 기반 구현만 사용했지만, GPU를 사용한다면 일주일 이내에 GoogLeNet 네트워크를 수렴하도록 훈련할 수 있을 것이다.
  • 훈련에는 stochastic gradient descent with 0.9 momnentum을 사용하였다.
  • 이미지의 크기가 8%에서 100% 사이에 고르게 분포된 다양한 크기의 패치 샘플링으로 인해 좋은 성능이 나왔다.
  • 이미지 영역과 가로 세로 비율이 3/4에서 4/3 사이에서 무작위로 선택한다.
  • Andrew Howard의 photometric distrotions 이것이 과적합을 어느 정도 방지하는 데 유용하다는 것을 발견했다.

7. ILSVRC 2014 Classification Challenge Setup and Results

  • 2014년 ILSVRC 대회 우승을 하였고, 검증 및 테스트 데이터 모두에서 6.67%의 오차율을 기록하였다.

8. ILSVRC 2014 Detection Challenge Setup and Results

  • Table4에서는 공식 점수와 각 팀의 공통 전략(외부 데이터, 앙상블 모델)을 보여준다.
  • Table 5에서는 단일 모델만을 사용한 결과를 비교하는데, 이때 최고 성능의 모델은 Deep Insight이지만, 앙상블을 사용하게 되면 GoogLeNet은 놀라운 성능 향상을 보인다.

9. Conclusions

  • Inception module로 인해 연산량을 상당히 줄였다.
  • 더 희박한 아키텍처로 전환하는 것이 일반적으로 실현 가능하고 유용한 아이디어라를 제공한다.

10. GoogLeNet 정리

1) 기본적인 CNN 구조 활용

  • 효율적인 메모리 사용을 위해 낮은 Layer에서는 기본 CNN 구조를 사용했다.

2) 9개의 inception module 사용

  • 차원 축소 1x1 Conv Layer 적용했다. 즉, 차원 축소 개념도 들어갔기 때문에 연산량도 줄었다.
  • 1x1, 3x3, 5x5를 병렬적으로 처리해서 기존의 정보를 많이 학습시켰다.

3) Auxiliary Classifier (보조 분류기)

  • 기울기 소실 문제를 막았다.

4) Global Average Pooling

  • 마지막 층에서 연산량을 줄이기 위해 Global Average Pooling을 통해 파라미터 계산을 줄였다.

🎯 Summary

2014년에는 GoogLeNet, VGG 등 다양한 아키텍처가 나왔다. 하지만 GoogLeNet은 우승 했음에도 불구하고 현재는 많이 사용하지 않는다. 그럼에도 인상 깊었던 점은 9개의 inception module을 사용함으로써 연산량을 줄이고 기존의 정보를 많이 학습 했다는 점이다. 1x1 conv Layer을 적용하면 왜 연산량이 줄여지는지 깊게 공부할 수 있었다.

이번 논문은 그래도 수월하게 리뷰했던거같다. 다음에는 GoogLeNet을 인퍼런스를 해봐야겠다.

📚 References

profile
데이터사이언티스트가 되기 위해 [a-zA-Z]까지 정리하는 거나입니다 😊

0개의 댓글