본문 바로가기
AI프로그래밍 리뷰/인공지능

Depthwise Separable convolution이 기존의 convolution 보다 연산량이 적은 이유

by 펄서까투리 2021. 8. 25.

# 세줄 요약 #

  1. Depthwise separable convolution 은 각 채널별로 나누어 각각의 feature map에 대해 1-channel convolution을 연산하는 depthwise 단계와 채널별로 구해진 feature map을 1x1 kernal convolution으로 하나의 channel로 합성시키는 separable 단계로 이루어져 있다.
  2. 일반적인 convolution의 연산량은 다음의 식으로 계산한다: (kernel size)^2 * (input channel number) * (input_size)^2 * (output channel number) * (output size)^2
  3. Depthwise separable convolution의 경우 depthwise 단계에서 input channel number = 1로 소거되고, separable 단계에서 kernel size = 1로 소거되면서 전체적인 연산량이 감소한다.

 

# 상세 리뷰 #

1. Depthwise Separable convolution 소개 [MobileNet V1]

Fig. Depthwise separable convolution 구조 [Ref. https://medium.com/@zurister/depth-wise-convolution-and-depth-wise-separable-convolution-37346565d4ec]

  • Depthwise Separable convolution Algorithm
    • Stage 1. Depthwise Convolution: 채널 전체를 Conv 연산하지 않고, 각각의 feature map에 대해 1-channel Conv 연산을 수행한 후 Concatenate 형태로 각각의 결과 feature map들을 채널별로 쌓아준다.
    • Stage 2. Separable Convolution: 채널별로 구해진 feature map을 1x1 kernal Conv 연산으로 하나의 channel로 합성시킨다.
  • 두 연산 모두 연산량을 감소시키는 효과를 준다.
    • 두 단계로 나누어져 있음에도 두 연산량을 더한 것이 전체 채널에 대해 한번에 수행하는 기존의 Conv 연산보다 연산량이 적다.
  • MobileNet V1 논문(arXiv:1704.04861 [cs.CV])에서 처음 소개
    • MobileNet은 그 목적이 모바일 기기에서 학습이 가능한 신경망 모델을 만드는 것
    • 따라서, 연산량 감소를 최우선 목표로 하고 개발된 신경망 모델이다.
  • 위의 예시는 224 x 224 x 3 shape를 가진 imagenet 데이터셋을 사용했을 때의 예제이다.
    • 따라서 Depthwise 단계에서 channel 수가 꼭 3일 필요는 없으며, 다양한 채널수로 늘린 다음에 각각에 대해 1-channel Conv 연산을 수행하면 된다.
    • 마찬가지로 Separable 단계 또한 결과 영상의 Channel이 꼭 1일 필요는 없으며, 다양한 채널수로 바꾸어도 된다.
      • Depthwise 단계에서 각각 연산된 feature map들이 하나의 영상으로 Stack(쌓아지다)된 후 1x1 kernel convolution으로 채널 수만 바꿔주는 것이다.

 

2. 연산량 비교 계산

2-1. 기존 Conv 연산량 계산

Fig. 기존 Convolution 연산 구조도. [Ref. https://youtu.be/T7o3xvJLuHk]

  • 연산량 계산식: Dk^2 * M * Df^2 * N * Dg^2
    • Dk = kernel size
    • Df = input size
    • Dg = output size
    • M = input channel
    • N = output channel
  • kernel 크기에 input 채널을 곱한 만큼(Dk * Dk * M)의 Convolution filter가 input 영상 크기(Df^2)에 연산을 수행하여 output 영상의 크기(Dg^2)와 output 영상의 채널(N)만큼의 결과가 나와야한다.

 

2-2. Depthwise Conv 연산량 계산

Fig. Depthwise Convolution 연산 구조도. [Ref. https://youtu.be/T7o3xvJLuHk]

  • 연산량 계산식: Dk^2 * 1 * Df^2 * M * Dg^2
    • M = 1 : Depthwise Conv 연산은 각각의 채널별로 나누어 1 channel에 대해서만 독립적으로 Conv 연산을 수행하기에 input channel 값(M)이 1이 된다.
    • N = M: Depthwise Conv의 결과 영상은 인풋 영상의 채널 수만큼 각각 연산을 수행한 결과를 concatenate로 쌓아서 합쳤기에 output channel의 크기(N)는 input channel의 크기(M)와 같다.

 

2-3. Separable Conv 연산량 계산

Fig. Depthwise Convolution 연산 구조도. [Ref. https://youtu.be/T7o3xvJLuHk]

  • 연산량 계산식: 1 * M * Df^2 * N * Dg^2
    • Dk = 1 : Separable Conv 연산은 1x1 kernel convolution을 수행하기에 kernel size(Dk)는 1로 소거된다.
    • Df = Dg : Separable Conv 연산은 1x1 kernel convolution을 수행하기에 input 영상(Df)과 output 영상(Dg)의 크기는 변화가 없다.

 

2-4. 기존 Conv 연산량 v.s. Depthwise Separable Conv 연산량

  • 기존 Conv 연산량 계산식:
    • = M* N * Dk^2 * Df^2 * Dg^2
  • Depthwise Separable Conv 연산량 계산식:
    • = (M * Dk^2 * Df^2 * Dg^2) + (M * N * Df^2 * Dg^2)
    • = M * Df^2 * Dg^2 * (Dk^2 + N)
  • 연산량 크기 비교

Fig. 연산량 비교

  • 만약 결과 영상의 Channel 수(N)가 256, Kernel size(Dk)가 3이라면, 기존 Convolution 대비 Deptwise Separable Convolution은 연산량이 약 11.5%로 감소되었음을 확인할 수 있다!

 

* Reference:

 

Depth-wise Convolution and Depth-wise Separable Convolution

Standard convolution layer of a neural network involve input*output*width*height parameters, where width and height are width and height of…

medium.com

 

[MobileNet v1] depthwise separable convolution

Intro CNN 에서의 연산량을 줄이기 위에서, Depthwise / Pointwise 를 이용한 Convoultion 기법이 ...

blog.naver.com

  • Howard, Andrew G., et al. "Mobilenets: Efficient convolutional neural networks for mobile vision applications." arXiv preprint arXiv:1704.04861 (2017).
728x90
728x90

댓글