논문/Image&Video Recognition

[논문 - Inception v2, v3] Rethinking the Inception Architecture for Computer Vision

바보1 2023. 8. 14. 19:44

논문

 

https://paperswithcode.com/paper/rethinking-the-inception-architecture-for

 

Papers with Code - Rethinking the Inception Architecture for Computer Vision

#8 best model for Retinal OCT Disease Classification on OCT2017 (Acc metric)

paperswithcode.com

 

앞의 글을 읽으시면 이해에 도움이 됩니다.

2023.08.07 - [여러 공부/논문 리뷰] - [논문 - GoogLeNet] Going deeper with convolutions

 

[논문 - GoogLeNet] Going deeper with convolutions

논문 https://arxiv.org/abs/1409.4842 Going Deeper with Convolutions We propose a deep convolutional neural network architecture codenamed "Inception", which was responsible for setting the new state of the art for classification and detection in the Imag

hi-guten-tag.tistory.com

 


0. Abstract

 

 

  • 본 논문은 Computer Vision 모델의 경량화와 효율성을 위한 논문입니다.
  • 증가된 모델 사이즈와 계산 비용은 즉각적인 품질의 향상으로 이루어졌지만, 모바일 등의 상황에서 사용할 수 있는 계산 효율성과 적은 파라미터 수는 여전히 개선해야 할 사항입니다.
  • 해당 논문에서는 convolution을 분해하고, 적극적인 regularization을 통해 최대한 효율적으로 계산을 추가합니다.

1. Introduction

 

 

  • VGG는 아키텍처의 특징이 흥미를 돋기는 하지만, 이것은 많은 계산량을 필요로 합니다.
  • 그에 반해 Inception은 엄격한 메모리와 계산 복잡도의 제한 속에서 실행할 수 있도록 디자인되었기 때문에 좋다고 하네요.
  • 그럼에도 불구하고 Inception Architecture는 복잡해서 네트워크를 변경하기 어렵게 만듭니다.
  • 저자는 모델을 무식하게 증가시켜서도 안 되고, 명확한 설명과 서술이 있어야 된다고 말합니다.
  • 따라서 해당 논문에서는 convolution network가 효율적으로 사이즈를 키울 수 있도록 보편적인 원리와 최적화 아이디어를 제공합니다.
  • 이 아이디어는 Inception에만 적용할 수 있는 것이 아니지만, Inception의 포괄적인 구조가 이러한 원리를 통합하기에 충분히 유연하기 때문에 원리를 더욱더 잘 관찰할 수 있다고 합니다.

2. General Design Principles

 

 

  • 아래에서 서술하는 원리의 효율성은 이론이고, 향후 추가적인 연구 증거가 정확도와 유효성을 평가하기 위해 반드시 필요하다고 합니다.
  • 다만 아래 원리에서 크게 벗어나는 편차는 네트워크의 약화로 이어지고, 편차를 통제하는 환경에서는 일반적으로 향상된 결과를 보였다고 합니다.

 

  1. Avoid representational bottlnecks, especially early in the network
    • Feed-forward 네트워크는 입력층부터 분류기, 혹은 회귀층까지 이어지는 싸이클이 없는 그래프라 할 수 있습니다.
    • 이것은 정보의 흐름의 방향을 명확히 제시합니다. -> 싸이클이 없는 그래프이므로.
    • 입력과 출력 사이에 틈이 생긴다면, 해당 틈으로 얼마나 정보가 새는지 확인할 수 있습니다. 따라서 극단적인 압축을 통한 병목은 반드시 피해야 합니다.
    • 일반적으로 representation 사이즈는 입력부터 출력까지 서서히 줄어들어야 합니다.
    • 이론적으로 정보의 내용물은 단순히 representation의 차원으로 평가할 수 없는데, 이는 구조의 상관관계 같은 중요한 요소를 무시하기 때문입니다. 
    • 차원은 오직 정보의 내용물의 추정치를 간략하게 제공할 뿐입니다.
    • 이 말은 feature map을 급격히 줄이지 말라는 의미로 보입니다.
    • 예를 들어 100 * 100인 이미지를 30 * 30으로 급격히 줄이면 이는 반드시 정보의 손실이 존재할 것입니다.
    • 또한 차원 수가 늘어나는 것은 이미지의 '특징'을 여러가지로 구분하는 것이지, 절대적으로 이미지 내의 상관관계를 나타내는 것이 아니기 때문입니다.
    • 따라서 표현력에서 병목 현상을 만들지 말라는 뜻으로 이해됩니다.
  2. Higher dimensional representations ar easier to process locally within a network
    • 고차원의 표현력은 네트워크 안에서 지역적으로 처리하기 쉽다는 의미이다.
    • convolution network의 층마다 활성도를 증가시킬수록 특징을 더욱 덜 얽히고 설키게 만든다.
    • 이는 결과적으로 학습을 빠르게 한다.
    • 고차원의 표현력들을 대상으로 활성도를 증가시킬수록 고수준에 대한 정보를 더 쉽게 뽑아낼 수 있다고 파악했습니다.
  3. Spatial aggregation can be done over lower dimensional embeddings without much or any loss in representational power
    • 저 차원 임베딩에서 공간 집합은 표현력의 손실이 적다는 의미입니다.
    • 예를 들어 3 * 3 conv를 적용하기 전에, 심각한 역효과를 생각하지 않고 공간 집합 전에 입력 표현의 차원을 줄일 수 있습니다.
    • 저자는 만약 출력 값들이 공간 집합 맥락에서 사용된다면 상관관계가 높은 근접한 유닛들이 차원 축소 때 정보 손실이 상당히 적기 때문이라고 가정합니다.
    • 이러한 신호가 쉽게 압축이 가능하다면 차원 축소는 심지어 학습을 더 빠르게 만들어줍니다.
    • 이 말은 출력 값들이 공간 집합으로 사용된다면, 상관관계가 높은 유닛들은 차원 축소를 하더라도 다른 유닛이 이를 커버할 수 있기 때문에 적은 정보 손실로도 차원 축소가 가능한 것으로 보입니다.
  4. Balance the width and depth of the network
    • 네트워크의 최적의 성능은 스테이지의 필터 수와 네트워크의 깊이의 균형으로 가능합니다.
    • 넓이와 깊이 둘 다 증가시키는 것은 고성능 네트워크를 만들 수 있습니다.
    • 하지만 최적의 향상은 둘 다 평행하게 증가했을 때 달성됩니다.
    • 따라서 계산 비용을 넓이와 깊이에 균형있도록 배포해야 합니다.

 

  • 위의 원리가 좋아보이기는하나, 네트워크 품질 향상을 위해 사용하는 것은 간단치 않습니다.
  • 이 아이디어는 오로지 모호한 상황에서 현명하게 사용해야 합니다.

3. Factorizing Convolutions with Large Filter Size

3.1 Factorization into smaller convolutions

 

 

  • 5 * 5, 7 * 7과 같은 넓은 공간적 필터를 가지는 convolution들은 계산 비용측면에서 불균형적으로 비싼 경향이 있다.
  • 5 * 5는 3 * 3 필터에 비해 25 / 9만큼 비싸다.
  • 물론 넓은 필터가 초기 층에서 멀리 떨어진 유닛의 활성화 간의 신호들의 의존성을 더 잘 찾아내므로, 필터의 기하학적 사이즈를 줄이는 것은 표현력의 큰 손실로 다가올 수 있다.
  • 하지만 논문에서는 같은 인풋 사이즈와 같은 아웃풋 깊이를 가지며, 또 5 * 5보다 적은 파라미터를 가지는 multi-layer 네트워크로 5 * 5를 대체할 수 있지 않겠냐라고 하고 있다.

  • 위의 그림을 보면 작은 fully-connected network가 5 * 5 타일 위를 슬라이딩하는 것처럼 보인다.
  • 1개의 유닛이 아래의 9개의 유닛과 연결되어 있고, 9개의 층은 아래의 25개의 유닛과 연결되어 있으므로 이를 FC로 표현한 것으로 보입니다.
  • 논문에서는 5 * 5 필터를, 3 * 3으로 이루어진 두 개의 층으로 변환합니다.
  • 또한 이 2개의 3 * 3 필터를, 첫 번째 필터는 3 * 3 convonlution이고, 두 번째 3 * 3은 최상층과 연결된 FC 층이라고 표현합니다.

기존의 모듈
변경한 모듈

  • 변경된 모듈은 2번 섹션의 3번 원리에 의해 변경했다고 합니다.
  • 1 * 1로 차원 축소를 했음에도 불구하고, 각 유닛들이 서로 다른 가지들이 상관 관계가 높기 때문에 표현력의 손실이 크게 잃어나지 않기 때문이라고 이해했습니다.

 


3.2 Spatial Factorization into Asymmetric Convolutions

 

 

17 * 17 사이즈에, n은 7로 선택해서 사용하였음.
8 * 8의 거친 그리드에서 고차원의 표현력을 증진시키기 위해 사용되었다고 합니다. 이것은 섹션 2의 2번 원리에 따른다고 하네요. 고차원에서 활성도를 증가시킨 것으로 보입니다.

  • 3.1의 결과는 3 * 3보다 큰 필터를 3 * 3 여러 개로 줄일 수 있다고 제안하므로, 3 * 3보다 큰 필터는 일반적으로 유용하지 못하다.
  • 하지만 3 * 3 또한 2 * 2 필터 2개로 분해할 수 있는데, 2 * 2로 사용하는 것보다 비대칭의 convolution을 사용하는 것이 더 좋다.
  • 예를 들어 3 * 3을 1 * 3과 3 * 1으로 분해하는 것은 2 * 2 두 개를 사용하는 것보다 더 싸다고 얘기합니다.
  • 따라서 n * n 필터를 1 * n, n * 1 필터로 분해한다고 합니다.
  • 다만 이 분해는 초기 층에서는 잘 작동하지 않습니다. 또한 12 ~ 20사이의 범위에 있는 특징 맵에서 잘 작동합니다.
  • 아마 초기에는 공간의 특징을 파악해야 하기 때문에, 초반에 사용하는 것은 좋지 않은 것 같습니다.
  • 상위 층에서는 공간의 특징보다는 채널간의 상호작용이 중요하기 때문에 상위 층에서 사용하는 게 아닐까 싶네요.
  • 섹션 2의 2번 원리에서 고차원의 활성도를 늘림으로써 좋은 특징을 뽑아내기 쉽다고 했는데, 여러 개의 활성화(3 * 3을 1 * 3, 3 * 1로 바꿈)를 함으로써 얽히고 설키지 않은 고수준의 특징을 뽑아내는 것으로 이해했습니다.

4. Utility of Auxiliary Classifiers

 

 

17 * 17 그리드 층 위에 사용했고, BN을 쓰니까 0.4% 성능이 올라갔다고 합니다.

  • 보조 분류기는 기울기 소실에 대응하여 수렴을 돕기 위해서 사용했습니다.
  • 하지만 학습 초기에는 수렴의 향상을 보이지 않는다고 하네요.
  • 보조 분류기가 없는 모델과 비교했을 때, 초반에는 비슷하다가 그래도 학습의 끝에서는 더 나은 결과를 보였다고 합니다.
  • 그리고 GooLeNet에는 보조 분류기를 두 개 사용했는데, 낮은 곳에 있는 보조 분류기를 삭제해도 네트워크의 최종 퀄리티에 큰 영향을 주지 못한다고 합니다.
  • 또한 이 보조 분류기가 저수준의 특징을 발전시킨다는 가설은 틀렸다고 합니다.
  • 대신에 저자는 이 보조 분류기가 regularizer로써 작동한다고 합니다.
  • 이것은 보조 분류기가 BN이나 dropout이 있을 때, 메인 분류기가 더 잘 작동하기 때문입니다.
  • 보조 분류기는 저수준의 특징 또는 중간 수준의 특징에 대해서 분류를 하는데, 메인 분류기가 올바른 정답을 내더라도 보조 분류기에서 다른 정답을 낼 수 있습니다.
  • 따라서 메인 분류기가 overfitting 되지 않도록, 보조 분류기에서 이를 방지해주는 것으로 보입니다.
  • 왜냐하면 보조 분류기는 중간 수준의 특징에서 분류를 하므로, 메인 분류기보다 잘못된 결과를 낼 가능성이 높기 때문입니다.

5. Eficient Grid Size Reduction

 

 

  • 제목만 봐도 2번 섹션의 1번 원리를 사용한 것으로 파악할 수 있습니다.
  • k개의 채널을 가지는 d * d 그리드를 2k개의 채널을 가지는 (d/2) * (d/2) 그리드로 변경한다고 가정합시다.
  • 우선 스트라이드가 1인 convolution을 적용한 후, 풀링을 합니다. -> 연산 비용이 2 * d^2 * k ^2가 됩니다.
    • convolution이 1 * 1 필터라 가정했을 때, k개의 차원에 d^2만큼의 연산을 하고, 이를 2k만큼 반복하므로 그렇습니다.
  • 만약 convolution을 pooling으로 대체하면 -> 연산 비용이 2 * (d/2)^2 * k^2가 됩니다.
    • 이 과정에서는 k개의 차원에 d/2만큼의 연산을 하고, 이를 2k만큼 반복합니다.

  • 좌측의 경우는 표현의 축소가 급격히 이루어지므로 1번 원칙을 위배합니다.
  • 반대로 우측은 연산량이 좌측에 비해 3배나 높습니다.

  • 따라서 위의 그림과 같은 제안을 합니다.
  • 표현의 병목현상을 없애고, 풀링과 stride 2인 convolution을 병행하게 사용하여 결합합니다.
  • 기존의 GooLeNet에서는 표현을 축소하기 위해 하나의 Inception이 끝난 후 max pooling을 합니다.
  • 따라서 해당 논문에서는 공간 집합 후의 max pooling 연산이 표현력을 과도하게 축소하기 때문에(1번 원리) 위와 같은 제안을 한 것 같습니다.

6. Inception-v2

 

 

  • 초기의 7 * 7을 3 * 3 세 개로 변경했습니다.
  • 그리고 인셉션 모듈 안에서만 제로-패딩을 했다고 합니다.

  • 이후 위의 모듈 3개를 사용했습니다.

  • 그 다음은 해당 모듈을 5개 사용했습니다.
  • 여기에 추가로 보조 분류기도 들어갑니다.
  • 초기 층에서는 잘 작동을 하지 않아서, 중간 층으로 넣은 것으로 보입니다.

  • 그리고 해당 모듈을 2개를 넣었는데, 고차원의 표현력을 뽑아내기 위함으로 보입니다.

7. Model Regularization via Label Smoothing

 

 

  • 이 부분은 정답 라벨이 [0, 1, 0, 0]보다는 [0.1, 0.7, 0.1, 0.1]로 되는 것이 좋다는 내용입니다.
  • 제가 알기로 왜인지는 명확히 밝혀지지 않았는데, 고민해본 결과 모델이 한 가지 상황(라벨이 1인 경우)에만 집중하는 것보다 다양한 상황에 집중함으로써 일반화 성능이 좋아지지 않을까 라고 조심스럽게 생각했습니다.

8. Training Methodolgy

 

 

  • gradient clipping 기법을 사용했다.
  • 나머지는 논문 참조

9. Performance on Lower Resolution Input

 

 

  • 저해상도에도 잘 작동했다..라고 보시면 될 것 같습니다.

10. Experimental Results and Comparisons

 

 

  • 맨 아래의 Inception-v2 + BN-auxiliary를 Inception-v3라고 합니다.
  • 참고로 표의 4번째 행부터 쭉 내려가면서 추가되는 특성 (RMSPror, Label Smoo ...)은 모두 아래 행으로 내려가면서 누적되어 사용됩니다.
  • 따라서 Inception-v3는 RMSProp + Label Smoothing + Factorized 7 * 7, BN-auxiliary를 사용합니다.

11. Conclusions

 

 

  • convolution을 분해하고, 적극적인 차원 감소 덕분에 적은 계산 비용으로 높은 퀄리티를 유지할 수 있었다.
  • 낮은 파라미터의 조합과 추가적인 regularization, 보조 분류기의 BN, label-smoothing이 상대적으로 적은 양의 학습 세트로도 좋은 퀄리티를 학습할 수 있었다.

마무리

 

 

일단 원리를 이해하기가...많이 힘들었습니다.

꾸역꾸역 이해했지만, 맞는지도 모르겠네요. 제 의견은 비판하면서 읽으시길..

뭔가 더 복잡해진 것 같은데 기분 탓인가요.

아무튼 원리들이 생각보다 유용할 것 같습니다.

다만 n * 1, 1 * n으로 분해하는 것은 왜 좋은지 딱 와닿지가 않네요.

파라미터 축소를 위한 사용이라면 이해되지만, 성능이 좋을지는 잘 모르겠습니다.

 

아무튼 긴 글 읽어주셔서 감사합니다.

잘못되거나 제가 이해한 것이 틀리다면 편하게 지적해 주시면 감사하겠습니다.