오늘은 Depthwise separable convolution에 대해 알아보도록 하겠습니다.
Standard Convolution
아래 그림은 일반적인 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에서는 커널이 모든 채널에 대해 연산을 했습니다.
이를 한 개 채널에 대해서만 연산을 진행하도록 하겠습니다.

앞선 그림과의 차이는 커널의 차원이 \( 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입니다.

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 |
댓글