z Deep Neural Network 경량화 (Inception, Xception)
본문 바로가기

Others

Deep Neural Network 경량화 (Inception, Xception)

728x90

참고 강의 : PR-034: Inception and Xception

Reference

참고 논문 :
Going deeper with convolutions, 2014
Xception: Deep Learning with Depthwise Separable Convolutions, 2017
참고 강의 : PR-034: Inception and Xception

Deep Neural Network 경량화

비슷한 수준의 성능을 유지한 채 더 적은 파라미터 수와 연산량을 가지느 모델을 만드는 것

Image recognition, object detection 분야의 급격한 발달은 하드웨어 덕이 아닌 새로운 아이디어, 알고리즘, 그리고 새로운 Network 등장의 결과입니다.

최근에는 임베디드 시스템 및 모바일에 DNN이 접목되는 경우가 많습니다. 때문에 accuracy 뿐만이 아닌 효율에 대해 고려해봐야 합니다.

다양한 Convolution

흔히 알고 있는 Normal convolution이 아닌 서로 다른 방법을 사용하는 여러 convolution들이 있습니다.

  • Grouped Convolution : input channel을 여러개 그룹으로 나누어 각 그룹에 대해 독립적인 convolution 수행

  • Pointwise Convolution (1x1 Convolution) : Dimension Reduction에 많이 사용된다. 1x1 Convolution 사용 시 channel 수 조절, 연산량 감소, 비선형성 추가와 같은 효과를 얻을 수 있다.

  • Depthwise Convolution : 채널마다 필터를 따로 학습하는 convolution

  • Depthwise Seperable Convolution : Depthwise convolution 후 pointwise convolution 수행.

Inception

Deep Learning에서의 성능을 올리는 가장 fundamental한 방법은 뭘까요?

Bigger Size Network !

하지만 Bigger Model에서 두가지 main 문제가 있습니다.

  • 더 많은 parameter의 수를 갖게 됩니다. 이는 Overfitting을 불러일으킵니다.
  • Computational Resource가 늘어납니다.

위의 두 문제에 대한 Solution으로 Sparsely Connect가 있습니다.
Sparesly connect 하기 위한 방법으로 이전 레이어의 output 중 연관성이 깊은 노드만 connect 하는 Correlation statistics가 있습니다.

하지만 현대의 컴퓨터에서느느 sparse matrix computation은 비효율적입니다.

그래서 optimal local construction을 찾는 Inception이 제시됩니다.

이미지에서의 correlation이란 무엇일까요? -> local(가까운 것 끼리) 연관성이 높음.
1x1, 3x3, 5x5 Convolution을 병렬로 수행하여 거리를 늘려가며 연관성을 봅니다. 그리고 그 당시 좋다고 여겨졌던 maxpooling도 병렬 중 한 부분으로 사용합니다.

여기에서 연산량을 줄여주기 위해서 3x3, 5x5 각각의 convolution 이전에 1x1 convolution을 넣어줍니다. (Pointwise)

5x5 -> 3x3, 3x3

5x5 convolution은 3x3 convolution을 2번 사용한 것과 동일하고 그리고 7x7 convolution은 3x3 convolution을 3번 사용한 것과 동일하다고 합니다.
게다가 5x5 convolution을 3x3 convolution 2개로 바꾼 경우에 28% 연산량 감소를 보였습니다. 또한 Activation function으로 인한 Non Linearity를 더 부여할 수 있습니다.

위와 같은 이유로 Inception module의 5x5 부분을 3x3 두개로 대체합니다.

Normal Conv vs Inception

기본적인 Convolution의 경우 채널 간의 correlation, spatial correlation을 한꺼번에 파악하는 반면에 Inception의 경우 channel correlation을 1x1 conv가 파악하고, spatial correlation을 나머지가 파악합니다.
논문에서는 역할의 분배에 대해 위와 같이 가설을 놓고 Xception에 대해 말합니다.

Xception

아니 그럼 가설이 맞다면 역할 분배를 더 많이하면 할수록 성능이 더 잘나오겠네?
네, 그래서 위처럼 더 많이 쪼개버립니다. extreme
실험 상 성능이 marginally 하게 더 높게 나옴을 알 수 있습니다. ImageNet에 대해 Inception과 Xception의 성능이 marginal 하게 차이가 나지만 Inception은 ImageNet에 Overfitting 된 느낌이 있는거에 비해 Xception은 다른 데이터셋에서도 좋은 성능을 보였다.

Depthwise Separable Convolution

위의 fig를 보시면 간략하게 표현된 Xception의 구조가 1x1, 3x3으로 decouple 되어있음을 알 수 있죠?
이는 위에서 언급했던 역할의 분배를 위함이고, 1x1 conv는 Pointwise, 3x3 conv는 Depthwise convolution으로 수행합니다.
따라서 위의 구조는 Depthwise Separable Convolution을 뒤집은 형태인 것을 알 수 있습니다.

728x90