이번에 읽어볼 논문은 Xception: Deep Learning with Depthwise Separable Convolutions 입니다.
Xception은 Inception 모듈에 대한 고찰로 탄생한 모델입니다. Xception은 완벽히 cross-channel correlations와 spatial correlations를 독립적으로 계산하기 위해 고안된 모델입니다. 이를 위해 세로운 Inception 모듈을 제안합니다. cross-channel correlation와 spatial correlation이 무엇인지 기존 Inception 모듈을 살펴보면서 알아보겠습니다.
1. Inception hypothesis
Inception 모듈에 대한 저자의 해석입니다. 흥미롭게 읽었네요.
아래 그림은 Inception v3에서 사용하는 일반적인 Inception 모듈 입니다.
그리고 이를 간소화하면 다음과 같이 나타낼 수 있습니다.
1x1 conv 이후에 3x3 conv 연산이 수행되는 구조입니다.
이를 저자는 cross-channel correlations와 spatial correlations를 독립적으로 수행한다고 합니다. 1x1 conv는 cross-channel correlation을 계산하고, 3x3은 spatial correlations를 수행하는 것입니다. Inception 모듈이 좋은 성능을 나타내는 이유는 cross-channel correlations와 spatial correlations를 잘 분해해서 계산했기 때문이라고 합니다.
Xception은 완벽히 cross-channel correlations와 spatial correlations를 독립적으로 계산하고 mapping하기 위해 고안된 모델입니다.
2. Depthwise Separable Convoltuion
다음에는 Inception 모듈과 작동방식이 비슷한 Depthwise Separable Convolution을 소개합니다. Depthwise Separable Convolution은 Depthwise Convolution 이후에 Pointwise Convolution을 수행합니다. 두 가지 그림을 가져왔습니다.
Depthwise Convolution은 입력 채널 각각에 독립적으로 3x3 conv를 수행합니다. 입력 채널이 5개이면 5개의 3x3 conv가 연산을 수행하여, 각각 입력값과 동일한 크기 피쳐맵을 생성합니다. 그리고 각 피쳐맵을 연결하여 5개 채널의 피쳐맵을 생성합니다. Pointwise Convolution은 모든 채널에 1x1 conv를 수행하여, 채널 수를 조절하는 역할을 합니다. 이렇게 연산을 수행하면 연산량이 감소합니다.
그리고 Xception은 Depthwise Separable Convolution을 수정해서 Inception 모듈 대신에 사용합니다.
3. Modified Depthwise Separable Convolution(Extreme Inception)
Xception은 Depthwise Separable Convolution을 수정해서 inception 모듈 대신에 사용합니다. 그리고 Extreme Inception이라고 부릅니다. 아래 구조를 활용하면 Inception 모듈보다 효과적으로 cross-channels correlations와 spatial correlations를 독립적으로 계산할 수 있습니다.
pointwise convolution 이후에 depthwise convolution을 사용합니다.
입력값에 1x1 conv를 수행하여 채널 수를 조절합니다. 그리고 채널 수는 n개의 segment로 나눠집니다. 이 n은 하이퍼파라미터 입니다. 예를 들어, 100개의 채널 수가 3~4개의 segment로 나눠집니다. 나눠진 segment 별로 depthwise convolution(3x3 conv)를 수행합니다. 각 출력값은 concatenate 됩니다.
modified depthwise separable convoltuion의 차이점은 두 가지 입니다.
(1) 연산의 순서가 다릅니다. 기존 depthwise separable convolution은 depthwise convolution(3x3 conv)를 먼저 수행하고 pointwise convoltion(1x1 conv)를 수행합니다. 수정된 버전은 pointwise convoltuion(1x1 conv)를 수행하고, depthwise convolution(3x3 conv)를 수행합니다.
(2) 비선형 함수의 존재 유무입니다. Inception 모듈은 1x1 conv 이후에 ReLU 비선형 함수를 수행합니다. 하지만 Xception에서 사용하는 모듈은 비선형 함수를 사용하지 않습니다. 아래는 실험 결과입니다.
놀랍네요.. 비선형함수를 사용하지 않을 때가 성능이 더 좋았습니다. 신경망이 깊을 때는 비선형 함수가 도움이 되지만, Xception 모듈같은 1개의 채널을 사용하는 depthwise separable를 수행할 때 비선형 함수가 성능을 해친다고 합니다. 저자는 정보 손실 때문이라고 추측합니다.
Xception architecture
Xception은 14개 모듈로 이루어져있고, 총 36개의 convolutional layer가 존재합니다. 그리고 residual connection을 사용합니다. 아래 그림을 보면 구조를 세부적으로 쪼개서 나타냅니다. 입력값은 Entry flow 거쳐서 midlle flow를 8번 거칩니다. 그리고 exit flow를 통과합니다.
참고자료