본문 바로가기
머신러닝

[ML] Depthwise Separable Convolution

by weareyoung24 2022. 9. 16.

오늘은 Depthwise separable convolution에 대해 알아보도록 하겠습니다.

 

Standard Convolution

아래 그림은 일반적인 convolution 연산을 나타냅니다.

Standard convolution

Input shape는 \( H_i \times W_i \times C_i \) 입니다.

커널, 필터 shape는 \(k \times k \times C_i \) 로 총 \(C_o\)개 커널이 있으며

Output shape는 \( H_o \times W_o \times C_o \) 입니다.

여기서 총 연산은 아래와 같습니다.

  • 커널 당 \( H_o \times W_o \times k^2 \times C_i \)
  • 커널 총 개수를 고려하면 \( H_o \times W_o \times k^2 \times C_i \times C_o \)

총 연산량을 줄여 더 가벼운 모델을 만드는게 Depthwise separable convolution 기법입니다.


Depthwise Separable Convolution

Depthwise convolution, pointwise convolution 총 2개의 stage로 나뉩니다.

 

Depthwise Convolution

앞서 본 standard convolution에서는 커널이 모든 채널에 대해 연산을 했습니다.

이를 한 개 채널에 대해서만 연산을 진행하도록 하겠습니다.

Depthwise convolution

앞선 그림과의 차이는 커널의 차원이 \( C_i \)에서 1로 바뀐 점입니다.

1개 커널이 1개 채널에 대해서만 convolution 연산을 하고 이를 총 \( C_i \)번 합니다.

그러면 output 역시 standard convolution과 다르게 채널이 \( C_o \)개에서 \( C_i \)개로 변경됩니다.

여기서 총 연산은 아래와 같습니다.

  • 커널 당 \( H_o \times W_o \times k^2 \)
  • 커널 총 개수를 고려하면 \( H_o \times W_o \times k^2 \times C_i \)

Pointwise convolution

\( 1 \times 1 \) convolution 연산을 적용하는것이 핵심인 stage입니다.

Pointwise convolution

Depthwise convolution 결과에 \( 1 \times 1 \) convolution 연산을 적용합니다.

이때 커널의 채널은 \( C_i \)이고 총 \( C_o \)개의 커널이 있습니다.

결과적으로 연산 결과 output은 \( H_o \times W_o \times C_o \)의 shape를 갖게 되고 이는 standard convolution과 같습니다.

여기서 총 연산은 아래와 같습니다.

  • 커널 당 \( H_o \times W_o \times C_i \)
  • 커널 총 개수를 고려하면 \( H_o \times W_o \times C_i \times C_o \)

총 연산량

Depthwise separable convolution의 총 연산량은 depthwise convolution + pointwise convolution이 됩니다.

\( H_o \times W_o \times k^2 \times C_i + H_o \times W_o \times C_i \times C_o \)

\( H_o \times W_o \times C_i \times (k^2 + C_o) \)


연산량 비교

Standard convolution과 depthwise separable convolution의 연산량을 비교해보겠습니다.

비교에는 MobileNetV1과 동일한 조건 아래 진행하겠습니다.

  • \(H_i = W_i = D_F\)
  • \(H_o = W_o = D_G\)
  • \(C_i = M, C_o = N\)

 \( \frac{Depthwise Separable}{Standard} = \frac{D_F^2 \times M \times (k^2 + N) }{D_F^2 \times k^2 \times M \times N} \)

 

 \( \frac{Depthwise Separable}{Standard} = \frac{1}{N} + \frac{1}{k^2} \)

 

여기에 k=3, N = 1024를 넣어보겠습니다.

 

 \( \frac{Depthwise Separable}{Standard} = 0.112 \)

 

결과적으로 해당 조건 아래서 depthwise separable convolution의 연산량이 9배 정도 줄어든 것을 볼 수 있습니다.

'머신러닝' 카테고리의 다른 글

[Dataset] Tiny ImageNet  (0) 2022.10.01
[ML] MobileNetV2 with TensorFlow  (0) 2022.09.28
[ML] Grad-CAM Visualization  (0) 2022.09.16
Raspberry Pi 4B Tensorflow 설치법  (0) 2022.09.01
Tensorflow 설치 방법 및 주의사항  (0) 2022.06.16

댓글