Deep Learning study

Inception ( Going Deeper with Convolutions : GoogLeNet ) & Xception ( Deep Learning with Depthwise Separable Convolutions) 본문

AI/papers

Inception ( Going Deeper with Convolutions : GoogLeNet ) & Xception ( Deep Learning with Depthwise Separable Convolutions)

HwaniL.choi 2019. 8. 4. 14:00
반응형

오늘 볼 논문들은 두가지 입니다 !

 

사실상 이전의 글을 보셨다면 지금 보는 논문들은 크게 어려울것 없습니다. 그런의미에서 간단하게만 살펴봅시다.

 

Inception

 

GoogLeNet이라고 알려진 유명한 논문입니다.

먼저 모델을 deep하게 만들수록 모델의 표현능력 또는 수용력이 증가함으로써 성능이 올라간다는것은 어떻게보면 실험적으로 잘 알려진 사실입니다. 그렇지만 단순히 깊게 만드는데에는 한계가 있습니다.

 

  1. 모델의 사이즈가 커진다는 것은 당연하게도 parameter의 수가 커지는것을 의미합니다. 이것은 한정된 labeled data를 가질 수 밖에 없는 우리에게 overfitting이 일어나게 만듭니다.
  2. 우리가 가진 계산(computation)능력과 메모리등의 자원은 항상 제한적입니다.

다시말해 우리는 한정된 자원 안에서 모델을 만들어야 한다는 것입니다.

 

그래서 이 논문에서 고안한 방법이 1x1 convolution을 적극적으로 활용하는 것입니다. 이전글에서 미리 한 번 말했지만, 이 논문에서 설명하는 두 가지의 목적에대해서 알아보도록합시다.

 

  1. computational bottleneck을 없애기위해서 dimension reduction 모듈로써 사용합니다. dimension을 줄여줌으로써 네트워크 사이즈를 조절할 수 있습니다.
  2. 이렇게 dimension reduction을 통해서 많은 수의 param을 줄였기때문에 네트워크의 깊이(depth)와 너비(width)또한 증가시킬 수 있습니다.

 (사실 많은 feature들이 비슷한 형태를 띠고있다고 합니다. 따라서 이러한 dimension reduction을 통해 실질적으로 중요한 정보를 압축해 낸다고 볼 수도 있겠죠.)

 

이제 이러한 아이디어로 만들어진 모듈이 바로 위의 그림입니다.

위의 그림의 (b)처럼 dimension reduction을 통해 channel수를 줄 인 후 3x3이나 5x5 conv를 수행하게 되면 많은 부분의 계산양을 줄여주게 됩니다 !

또한 한 가지 더 주목할만한 점이 있다면, input에 대한 conv를 서로 다른 크기의 filter를 사용하여으로 수행한 후 concat을 해준다는 것입니다. 논문에서 이것에대해 뭐라 설명해놓긴 했지만(the design fol-lows the practical intuition that visual information shouldbe processed at various scales and then aggregated so thatthe next stage can abstract features from the different scalessimultaneously.) , 무슨말을 하려하는진 알겠으나 딱히 와닿지는 않는것 같습니다.

좀 이해하기 쉽게 말하면 가까운 local의 correlation과 멀리떨어진 correlation들을 합쳐보자는 의미입니다.(correlation statistics에 상응하는 부분이죠.)

 

이렇게 해서 대략적인 inception은 끝이납니다. 다시한번 더 말하지만, '1x1 conv를 사용해 많은 계산량을 줄였고 그로인해서 더 깊고 넓은 네트워크를 구현 해보니 성능이 잘 나오더라!' 정도가 큰 맥락이므로 이정도면 충분하다고 생각합니다. 

또 나온지 좀 된 논문이기도 해서 어떻게 생겨먹고 어떤 방법인지 정도만 알아두면 좋을것 같습니다. ㅎㅎ

 

 

 

Xception

 

이전의 Inception 논문이 1x1 convolution이 키워드였다면, 이번 논문은 Depth-wise separable convolution이 핵심입니다. 좀 더 풀어서 말해보자면 Inception은 연산량을 줄여 더 깊은 모델을 만들고자 했다고 하면 Xception은 이 모델의 prameter들을 더 효율적으로 사용하기위한 방법을 제시합니다.

 

먼저 Inception의 가설을 한 번 살펴봅시다. Inception의 가설은 channel wise correlation과 spatial correlation을 충분히 분리시킬 수 있다는 것이였습니다. 즉, channel방향과 spatial( height와 width가 되겠죠 ) 방향을 따로 분리해서 보겠다는 것이였습니다. 하지만 이 전의 Inception에서 사용한 것이 정말로 완벽하게 분리되어 mapping을 시키냐는 것 입니다.

 

그래서 나온것이 Xception입니다. 이것은 위의 가설을 좀 더 강하고 확실하게 적용해보자는 것입니다. channel wise correlation과 spatial correlation을 완전히 분리시켜 버리는 것이죠.

위의 그림은 Inception module을 간소화 한 그림입니다. 잘 보면 1x1 conv를 통해 channel wise correlation을 mapping하게 됩니다. 하지만 그 뒤에 이루어지는 일반적인 conv는 사실 spatial한 correlation과 channel wise한 correlation이 분리되었다고 보기 힘듭니다. 그래서 Inception 은 일반적인 conv와 depth wise conv의 사이에 있다고 보면 될것 같네요.

 

그럼 이것의 'extreme' 버전을 살펴보도록 합시다.

input에 대해 1x1 conv를 거친 후, 모든 channel들을 분리시켜 channel 당 3x3conv를 해 주는것입니다. 이렇게되면 두 방향(channel wise, spatial)에 대한 mapping을 완전히 분리가 되어지게 됩니다. 이렇게 생겨먹은 친구가 Xception 이 됩니다. 정말 단순하게도 그냥 Inception의 'extreme' 버전이 Xception이라고 생각하면 되겠네요 ! (그래서 이 구조의 이름도 Xception이라고 논문에 명시되어 있습니다 ㅋㅋ)

 

그렇지만 한 가지 짚고 넘어가야할게 있습니다. 위에서는 depthwise separable convolution이라고 설명은 했지만 사실 이 'extreme' 버전과 depthwise separable conv와는 두가지 차이점이 있습니다.

 

  1. 먼저 작동하는 순서가 다르죠. depthwise separable conv는 channel-wise spatial conv를 먼저하고 1x1 conv를 수행하게 되는데 여기서는 1x1 conv를 먼저 수행하게 됩니다.
  2. 그리고 depthwise separable conv에서는 non-linearity가 존재하지 않지만, Inception에서는 ReLU에의한 non-linearity가 적용됩니다.

사실 위와같은 module들이 계속 쌓이다(stacked)보면  1번에서 말한 내용은 그다지 중요하지 않습니다. 하지만 2번의 경우에는 문제가 될 수도 있다고 하네요 ! (이것은 논문 뒤의 실험 결과들에서 보여주게 됩니다. 따로 첨부는 하지 않고 링크로 남겨두겠습니다. 각자 읽어보는걸루...)

 

결론은 당연히 '이렇게 했더니 더 나은결과가 있었다 . ' 겠죠?

 

 

이정도로 오늘의 글을 마치겠습니다.

 

사실 내용도 많지 않고 정말 이 전 포스팅을 보셨다면 어려운내용도 딱히 없습니다. 그렇지만 조금 더 자세한 내용을 알고싶으시다면 논문을 읽어보셔도 좋고 , 아래 reference에 유재준님이 pr12에서 발표하신 동영상을 보셔도 괜찮을것 같아요 !

 

 

Reference

[1] Going Deeper with Convolutions

[2] Xception: Deep Learning with Depthwise Separable Convolutions

[3] PR12 Inception & Xception

 

반응형
Comments