아래 내용은 개인적으로 공부한 내용을 정리하기 위해 작성하였습니다. 혹시 보완해야할 점이나 잘못된 내용있을 경우 메일이나 댓글로 알려주시면 감사하겠습니다.
AlexNet 이후 발표된 네트워크들의 경향은 성능을 높이기 위해 깊고 복잡하게 만드는 것이었습니다. 하지만 이런 복잡한 모델은 모바일 환경에서 동작하기 위해서는 연산량, 모델의 크기, 동작시간에 대해 고려되지 않았습니다.
딥러닝 모델을 작게 만들기 위해서 시도되는 방법은 학습된 모델을 압축하는방법, 효율적인 네트워크 구조를 설계하는 방법 등이 있습니다. MobileNet은 2017년 Google에서 발표하였으며, 효율인 구조를 설계하여 경량화를 이뤄낸 네트워크입니다.
SqueezeNet과 같은 많은 경량화 모델은 latency(동작시간) 보다는 모델의 크기(용량)에만 집중하는 경향이 있었습니다. MobileNet은 동작시간과 모델 크기뿐만 아니라 동작시간도 작게하는데 집중했습니다.
모델의 크기와 동작시간을 줄이는 효율적인 네트워크 구성을 위해 MobileNet은 Xception 구조에서 제안된 Depthwise Separable Convolution을 활용합니다. 또 하드웨어의 특성에 맞추기 위해 모델 크기를 조절하기 위한 하이퍼파라미터를 제안했습니다.
MobileNet은 한번에 적을 경우 너무 길어지기 때문에 두 부분으로 나누어 작성할 예정입니다. 이번 글에서는 Depthwise Separable Convolution이 설명된 Xception의 아이디어에 대해 간단히 살펴보고, 다음 글에서는 MobileNet이 Depthwise Separable Convolution을 어떻게 활용해서 경량화된 구조를 만들었는지 살펴보겠습니다.
MobileNet은 Xception에서 제안된 Depthwise Separable Convolution을 활용해서 만들어진 네트워크입니다. MobileNet에 앞서 Depthwise Separable Convolution 구조를 이해하기 위해 Xception을 살펴보겠습니다.
Xception은 MobileNet과 마찬가지로 Google에서 발표한 네트워크 구조입니다. Xception은 GoogLeNet의 Inception 모듈에 대해 고찰한 내용을 발전시켜 설계한 네트워크 입니다. 그리고
2016년까지 네트워크 구조를 디자인하는 기본적인 틀은 Convolutional layer를 쌓아올려 특징을 추출하고 중간중간에 max-pooling을 활용해 정보를 압축하는 LeNet의 형태를 확장시킨 것이었습니다. 대표적으로 AlexNet과 VGGNet은 Convolution layer와 max-pooling의 누적으로 이뤄져 있어서 입력이 하나의 layer를 통과하는 구조를 가지고 있습니다.
그러던 중 발표된 GoogLeNet의 Inception 모듈은 아래 그림과 같이 하나의 입력이 여러 layer를 통과한 뒤 합쳐지는 조금은 독특한 구조를 가지고 있습니다. 좀 더 자세히 살펴보면 1개의 1x1, (1x1 + 3x3), (1x1 + 3x3 + 3x3) convolution layer로 이루어져 있음을 알 수 있습니다. (여기서 Avg pooling후 3x3 conv 하는것은 일단 무시하겠습니다.)
기본적인 Convolution layer는 2차원 공간(width, height)과 1차원 채널로 이뤄진 3차원 구조의 filter입니다. 그러므로 Conv layer를 학습할 땐 cross-channel correlation과 cross-spatial correlation, 즉 공간사이의 상관관계 분석과 채널사이의 상관관계 분석이 동시에 일어납니다.
그런데 Inception 모듈은 채널 정보가 4개로 나뉘어 각각의 conv layer에서 공간사이의 상관관계 분석이 이뤄진 후 마지막으로 채널정보가 합쳐지는 구조입니다.
여기서 우리는 Inception 모듈이 채널 사이의 상관관계와 공간사이의 상관관계를 분리해서 처리할 수 있다라고 가정하는것을 알 수 있습니다.
이 가정 아래서 Inception 모듈의 가정을 유지한채 형태를 아래 흐름으로 수정하면 보다 간단한 형태의 layer를 만들 수 있습니다.
① 먼저 avg pooling삭제, 두 개의 3x3 conv 중 하나를 삭제 등 Inception 모듈의 형태를 보다 간단한 형태로 수정합니다. ② 다음으로 모든 1x1 Conv layer를 하나로 묶습니다. 여기까지 진행했을 때 채널사이의 상관관계를 분석하는 1x1 conv layer와 공간사이의 상관관계를 분석하는 3x3 conv layer가 분리됨을 볼 수 있습니다. 또 분리된 채널별로 공간에 대한 상관관계를 분석하는것을 볼 수 있습니다.
그렇다면 여기서 채널을 최대한 나누어, ③ 극단적으로 한개의 채널마다 공간사이의 상관관계를 분류하면 공간과 채널에 대한 상관정보를 완벽하게 분리할 수 있습니다.
이렇게 GoogLeNet을 구성하는 Inception 모듈의 가정인 "공간과 채널사이의 상관관계를 완벽하게 분리할 수 있다"를 극단적으로 반영하면 마지막 형태와 같이 채널사이의 상관관계를 분류하는 1개의 1x1 conv layer와 각각의 채널에 대해 공간상관관계를 분석하는 3x3 conv layer들로 분류 가능합니다.
앞장에서 Inception 모듈의 가정을 극한으로 적용하여 공간과 채널사이의 상관관계를 완벽하게 분리한 형태의 모듈은 아래 그림과 같이 만들었습니다.(위에서 변환한 그림을 뒤집기만 한 그림입니다.)
Xception 논문에서는 이 형태를 바탕으로 공간정보와 채널정보를 완벽하게 분리한 Depthwise Separable Convolution을 제안합니다.
변형된 Inception 모듈과 제안된 Depthwise Separable Convolution은 기본적으로 유사한 형태를 가지지만, 두 가지 차이점이 있습니다.
첫 번째 차이점은 Depthwise convolution과 Pointwise convolution의 순서가 반대로 되어있습니다. Inception 모듈의 경우 1x1 conv layer를 활용해 pointwise convolution 부터 수행한 뒤 3x3 conv layer를 활용해 depthwise convolution을 수행합니다. 하지만 Depthwise Separable Convolution은 depthwise convolution을 먼저 수행한 뒤 pointwise convolution을 수행합니다.
두 번째 차이점은 Inception 모듈의 경우 pointwise/depthwise convolution을 각각 수행 후 ReLU등을 추가해 비선형성을 추가하지만, Depthwise separable convolution은 depthwise convolution과 pointwise convolution 사이에 ReLU가 없습니다.
논문에서 첫 번째 차이점인 순서의 변환은 큰 영향이 없다고 주장합니다. 하지만 두 번째 차이점인 중간에 ReLU 유무는 영향이 있다고 주장하며 이를 실험을 통해 증명합니다.
Xception 논문에서는 Depthwise Separable Convolution을 활용하여 높은 정확도를 위한 효율적인 네트워크인 Xception(Extreme inception)이란 구조를 제안합니다.
Xception은 14개의 모듈, 36개 convolution layer로 구성되었으며 첫 번째 conv layer와 마지막 conv layer를 제외하고는 모두 residual connection으로 연결된 구조입니다.
Xception을 ImageNet dataset과 Google의 내부 데이터인 JFT dataset에 대해 분석한 결과 이전에 발표된 모델들보다 xception 이 조금 더 좋은 성능을 보여줍니다.
제일 아래 결과에서 Inception v3와 파라미터 수는 거의 유사하지만, 각 단계에서 동작속도가 느려졌습니다. 논문에서는 그 이유로 depthwise separable convolution구조를 연산할 때 최적화가 덜 된것을 원인으로 추정했으며 미래에 개선될 것이라고 주장합니다.
실험결과에서는 주목할 점은 Xception이 유사한 수의 파라미터를 가지고 성능을 향상시켰다는 점 입니다. 논문에서는 이 결과를 Xception의 성능향상이 파라미터를 추가해서가 아닌 파라미터를 더 효율적으로 사용함으로 써 이뤄냈다는 의미로 해석했습니다.
또, 논문에서 주장한 depthwise convolution과 pointwise convolution 사이의 ReLU나 ELU 등 비선형 활성함수의 유무가 모델에 주는 영향을 분석했습니다. 실험결과 공간과 채널 분석 사이에 아무것도 없는것이 가장 좋은 성능을 보여주는것을 볼 수 있습니다. ReLU와 같은 비선형 활성함수는 깊은 feature space에서는 유용하지만 1개 채널 feature space와 같이 얕은 feature space에서는 정보의 손실을 야기하기 때문에 오히려 악영향을 끼친것으로 추정했습니다.
이번글에서는 Inception module의 아이디어를 발전시킨 Depthwise Separable Convolution 구조를 살펴봤습니다.
Xception은 MobileNet과는 다르게 경량화보다는 정확도를 높이기 위해 파라미터를 효율적으로 활용하는것에 집중한 네트워크입니다. 하지만 MobileNet은 Depthwise Separable Convolution의 연산효율에 집중하여 매우 경량화된 네트워크를 제안했습니다.
다음 글에서는 MobileNet이 Depthwise Separable Convolution을 어떻게 활용해 경량화된 네트워크를 설계했는지 알아보겠습니다.