[Paper Review] Xception: Deep Learning with Depthwise Separable Convolutions

Introduction

  Convolutional Neural Network의 역사는 다음과 같다. 
LeNet -> AlexNet -> VGG -> Inception architecture(Inception V1, Inception V2, Inception V3, Inception-ResNet).
 Inception의 conventional form은 아래의 그림과 같다.


위와 같은 block을 연속적으로 쌓는게 Inception 모델이라고 볼 수 있다.

The Inception Hypothesis

 일반적인 Convolutional layer는 3차원의 filter(dimensions of width, height, channel)를 사용하여 채널 간의 상관관계와 공간방향의 상관관계를 둘다 파악하려고 한다.
 Inception Module의 핵심 아이디어는 이를 분리하는 데에 있다. 즉, 채널 간의 상관관계를 포착하는 1x1 Convolution과 공간방향의 상관관계를 파악하는 Convolution을 따로 둔것이다.

 그림 1 의 Inception module을 좀 더 간단히 한 module은 아래와 같다.


즉, Avg Pooling 하는 tower를 제외 시키고 1x1 conv후에 3x3 conv를 한번만 하도록 하는 모듈이다.
이를 reformulate하면 다음과 같이 1x1 convolution을 한번 한 후(output channel은 desired output channel) output channel을 split하여 각각의 tower마다 3x3 convolution을 하는 구조로 바꿀 수 있다.

The continuum between convolutions and separable convolutions

 Inception module의 hypothesis를 조금 더 strong 하게 적용하여, 채널간의 상관관계를 1x1 convolution을 통해 포착하고 각 output channel 1개 마다 spatial correlation을 파악하는 convolution을 해보는 것은 어떨까? 하고 만든게 아래의 그림이다.

이는 Depthwise separable convolution과 비슷하나, 다음과 같은 차이점이 존재한다.

1. operation 순서: depthwise separable convolution은그 결과로, Inception V3 와 비슷한 숫자의 파라미터를 가지고  channel-wise spatial convolution을 먼저 수행한 후 1x1 convolution을 하는 반면 Inception은 그 반대이다.

2. Non-linearity의 존재 유무: Inception에서는 2개의 operation 모두 그의 output을 ReLU에 통과 시키지만 depthwise separable convolution은 통과시키지 않는다.

Stacking module이라는 특성 때문에 첫번째 차이점은 그렇게 큰 중요성을 띄지는 않는다. 그러나 두번째 차이점은 의미가 있을 수 있다. 이에 대해서는 뒤에서 설명하겠다.
 본 논문에서는 Inception module을 depthwise separable convolution으로 대체하는 것을 제안한다.

The Xception architecture

 본 논문에서 제안하는 CNN architecture는 depthwise separable convolution에 기반하고 있다. 이는 다음과 같은 Strong Hypothesis에 기반하고 있다.
"Feature map에서 채널간의 상관관계와 공간방향의 상관관계를 완전히 분리시켜서 mapping 할 수 있다."
 이러한 Strong Hypothesis는 Inception 모델이 기반하고 있는 hypothesis보다 조금 더 strong 하고 strict하므로 Xception: Extreme Inception이라고 이름 지었다고 한다.
 Xception Network의 전체 구조는 아래와 같다.

Xception에는 Feature extract를 위하여 36개의 convolutional layer가 존재한다. Classification 문제를 위해서는 logistic regression layer가 마지막에 존재해야 되고, 선택적으로 logistic regression layer 이전에 fully connected layer를 넣을 수도 있고 안 넣을수도 있다.
 즉, 요약하면 Xception은 stack of depthwise separable convolution with residual connections라고 생각하면 되겠다.

Experimental evaluation

 본 논문에서는 Xception을 Inception V3 와 비교하고자 한다. 그 이유는, Inception V3과 비슷한 숫자의 parameters를 가지고 있어서 parameter수로 인한 performance 차이는 없다고 가정할 수 있기 때문이다. 두 가지 dataset에 대해서 classification task를 진행하였는데, 1000 class를 가지고 있는 ImageNet과 17000개 클래스를 가지고 있는 JFT dataset이 있다.

The JFT dataset

 JFT dataset은 구글 내부의 데이터셋으로 3억 5천개의 고해상도 이미지로 구성되어 있다. 본 논문에서는 JFT로 학습시키고, 이를 evaluate하기 위하여 FastEval14K 데이터셋을 사용하였다고 한다.
FastEval14K는 14000개의 이미지로 구성되어 있으며 6000개의 클래스가 존재한다. 이 데이터셋에 대해서는 top 100개의 예측에 대해서 MAP를 계산(MAP@100)하였다.

Optimization configuration

 데이터셋 마다 다른 Optimization을 사용하였다.
 ImageNet: 

 - SGD optimizer
 - Momentum: 0.9
 - initial learning rate: 0.045
 - Learning rate decay: decay of rate 0.94 every 2 epochs

JFT:

 - RMSprop optimizer
 - Momentum: 0.9
 - intial learning rate: 0.001
 - Learning rate decay: decay of rate 0.9 every 3,000,000 samples

 Xception과 Inception 모델 둘다 같은 데이터셋에 대해서는 같은 Optimization 설정을 사용하였다. 알아둬야 할게, 이 설정은 Inception에 optimal한 설정이였다. 

Regularization configuration

- Weight decay: Inception model은 4e-5, Xception은 1e-5를 사용하였고 두개의 데이터셋에 대해서 동일하게 적용하였다.

- Dropout: ImageNet 데이터셋에 대해서는 두 모델 다 logistic layer전에 dropout layer(0.5 rate)를 두었다. JFT 데이터셋에 대해서는 데이터셋이 엄청나게 크기 때문에 오버피팅이 잘 일어나지 않을거라 생각하고 Dropout을 사용하지 않았다.

- Auxilary loss tower: Inception v3 에서는 loss 값을 network 앞단에 역전파 해주는 auxilary loss tower를 뒀었는데 Xception에서는 채택하지 않았다.

Training Infrastructure

 ImageNet에 대해서는 classification 정확성 향상을 위하여 synchronous gradient descent를 사용하였고 JFT에서는 training 속도를 빠르게 하기 위하여 asynchronous gradient descent를 사용하였다. ImageNet에서는 학습하는데 3일이 걸렸고 JFT에서는 1달이 걸렸다. JFT에서는 완전히 수렴하려면 3달이 걸릴 것으로 예상되었다.

* Sync/async gradient descent에 관한 설명 링크
what is synchronous/asynchronous gradient descent ?

Comparison with Inception V3

 1. Classification performance
아래의 그림은 ImageNet에 대해서 evaluate한 결과를 나타낸다. Inception V3, Xception 모델 둘다 fully connected layer를 포함하지 않았다.

아래의 그림은 FastEval14K 에 대해서 evaluate한 결과를 나타낸다.
위의 결과에서 보면 Inception V3의 MAP 지수가 Xception에 비해 낮은 것을 볼 수있는데, 이는 좋게말하면 "ImageNet에 최적화된 optimization 설정을 사용하였으므로 overfit의 가능성이 있다" 지만 안좋게 말하면 "Xception도 JFT dataset에 대한 optimziation 설정을 사용하지 않았는데도 성능이 좋았다" 인것 같다.

아래의 그림은 ImageNet에서의 각 모델의 Validation accuracy 그래프를 나타낸 것이다.


아래의 그림은 JFT에서의 각 모델의 MAP 그래프를 나타낸 것이다. 두 모델다 FC layer를 사용하지 않았다.

2. Size and Speed

 위 그림에서 두 모델다 fully connected layer는 없다. 이 때, 두 모델은 서로 비슷한 파라미터 개수를 가지고 있지만 Xception이 processing time이 조금 더 느린 것을 볼 수 있는데, 이는 optimization 설정을 바꿔보면서 Xception에 최적화 된 설정을 찾아보면 더 빨라질 수 있을 것이라고 기대된다. 그럼에도 불구하고 성능이 Xception이 더 좋은 이유는 Parameter수가 아닌 model parameter의 효율적인 사용에 기인한다고 한다.

Effect of the residual connections

 위의 결과에서 보면 Residual connection 쓴 것이 학습 수렴 속도도 빠르고 결과적으로 classification performance도 좋은 것을 볼 수있다. 하지만 Non-residual network에서는 Residual Network에 최적화된 optimization configuration을 사용하였기 때문에 신뢰성이 조금 떨어질 수 있고 더 좋은 optimziation을 찾으면 성능이 올라갈 수 있다고 한다.
 또한 VGG-style의 Network에 모든 convolutional layer를 depthwise conovlution으로 대체한 Network가 Inception V3 의 성능을 뛰어넘은 것을 보면 Residual connection의 영향은 조금 미미하다? 라고 볼 수 있다.

Effect of an intermediate activation after pointwise convolutions

 위의 그래프에서 보면, 특이한 결과를 볼 수있다. Depthwise operation 과 Pointwise operation 사이에 RELU를 넣었더니 더 결과가 안좋은 것이다! 이는 Inception Module 와는 정 반대의 현상이다. 즉, Inception Module에서는 중간에 RELU를 넣으면 결과가 더 좋은데, Xception에서는 오히려 악화되는 것이다. 그 이유가, 
"It may be that the depth of the intermediate feature spaces on which spatial convolutions are applied is critical to the usefulness of the non-linearity: for deep feature spaces (e.g. those found in Inception modules) the non-linearity is helpful, but for shallow ones (e.g. the 1-channel deep feature spaces of depthwise separable convolutions) it becomes harmful, possibly due to a loss of information."
라고 논문에서 설명하고 있는데, 이해가 잘 되지 않는다...ㅠ



댓글