본문 바로가기

Machine Learning Models/Covolutions

Convolution 의 종류

반응형

이번 포스트에서는 convolution 의 기능을 유지하면서 소요되는 파라미터 수와 연산량을 줄이기 위한 다양한 convolution 기법들에 대해 살펴보도록 하겠습니다. 먼저 $W, H, C, K, M$을 각각 입력의 너비, 높이, 채널, 커널 사이즈, 출력 채널 수로 정의하고 stride가 1인 일반적인 상황을 가정하여 입력, 출력 사이즈가 동일하다고 전제합니다.

Standard convolution

일반적인 convolution 수행을 위해 몇 개의 파라미터가 필요할까요? 먼저 커널의 사이즈가 $K$이고 입력 채널 수가 $C$이므로 하나의 커널이 가지는 파라미터 수는 $K^2\cdot C$가 됩니다. 이 하나의 커널이 출력의 하나의 채널을 형성하므로 총 $K^2\cdot C\cdot M$개의 파라미터가 필요하겠네요. 연산량은 어떨까요? 먼저 하나의 필터에 대해 $K^2\cdot C\cdot M$ 만큼의 곱하기가 수행되고 (더하기는 무시합니다.) 입력의 크기만큼 연산이 수행되니 $K^2\cdot C\cdot H\cdot W\cdot M$ 연산량이 소요됩니다. 

Grouped convolution

Grouped convolution 은 Figure 1과 같이 채널을 몇 개의 그룹으로 ($g$) 나누어 각 그룹 별로 독립적으로 convolution 을 수행하는 방식입니다. 파라미터 수를 먼저 계산해보면 각 그룹당 채널의 수는 $C/g$ 가 될 것이고 출력 채널도 각 그룹에서 $M/g$만큼 생성되니 한 그룹당 커널의 파라미터 수는 $K^2\cdot (C/g)\cdot (M/g)$가 될 것이며 $g$개의 그룹이니 총 파라미터 수는 $K^2\cdot C \cdot M /g$가 됩니다. 연산량은 여기에서 입출력 크기 $H, W$를 곱해주면 $K^2 \cdot C\cdot M\cdot H\cdot W /g$가 되겠죠.

Figure 1

Depth-wise convolution

Depth-wise convolution 은 각 채널 별로 spatial feature 를 추출하기 위한 방법으로 Figure 2와 같이 각 채널 별로 커널이 존재하게 됩니다. 따라서 depth-wise convolution 에 대해서는 입력, 출력의 채널 수가 같게 되는데요. 먼저 파라미터 수를 계산해보면 grouped convolution 에서 $g=C=M$인 경우이므로 $K^2\cdot C$가 됩니다. 연산량은 마찬가지로 입출력 크기를 곱해주면 $K^2\cdot C\cdot H\cdot W$가 되겠죠.

Figure 2

Point-wise convolution

Point-wise convolution 은 xCeption 모델에서 제안된 방법으로 커널 사이즈를 1x1 로 고정하여 공간 정보를 제외하고 채널에 대해서만 fully-connected 를 적용하는 방법으로 1x1 convolution 이라고도 불립니다. 따라서 보통 출력의 크기를 변화시키지 않고 출력의 채널 수를 조절하는 역할을 하게 되는데요, 파라미터 수는 standard convolution 에서 $K=1$인 경우이므로 $C\cdot M$이 되고 연산량은 $C\cdot M\cdot H\cdot W$가 됩니다.

Depth-wise separable convolution

Depth-wise separable convolution 은 기존의 convolution 이 공간, 채널 방향을 한꺼번에 고려했다면, depth-wise convolution, point-wise convolution 으로 분해하여 공간, 채널 방향에 대해 개별적으로 convolution 을 적용하는 방법입니다. 따라서 Figure 3과 같이 depth-wise convolution 을 먼저 수행하여 각 채널 별로 공간 정보를 추출하고 이후 1x1 convolution 을 수행하여 채널의 수를 조절하게 됩니다.

Figure 3

Depth-wise separable convolution 은 depth-wise convolution + 1x1 convolution 이므로 두 방식의 파라미터 수를 더한 것이 총 파라미터 수가 되어 $K^2\cdot C + C\cdot M=C(K^2 + M)$이 됩니다. 연산량은 여기에서 입력 크기를 곱해준 $C\cdot H\cdot W\cdot (K^2+M)$이 됩니다. 따라서 기존 convolution 대비 연산량 감소 효과를 계산해보면 다음과 같습니다. 보통 $K$보다 $M$이 훨씬 크기 때문에 일반적으로 연산량이 $K^2$배 정도 줄였다고 생각할 수 있습니다.

$\frac{C\cdot H\cdot W (K^2+M)}{K^2\cdot H\cdot W\cdot C\cdot M}=\frac{1}{M}+\frac{1}{K^2}$

특히, depth-wise separable convolution 은 경량화를 위한 MobileNet v1 모델에서 집중적으로 사용하는데, 기존의 3x3 convolution 블락을 Figure 4와 같이 대체하여 사용하며, 성능 감수가 거의 없이 파라미터 수와 연산량을 기하급수적으로 줄였습니다. 기존 convolution 은 공간, 채널 (spatial and cross-channel) 정보를 한 번에 계산했다면 depth-wise separable convolution 은 공간 정보는 depth-wise, 채널 정보는 1x1 convolution 으로 분해한 것으로 이는 공간, 채널을 별도로 매핑하는 것이 더 효율적이다라는 "Inception" 가정에서 유도되었습니다.

Figure 4

반응형

'Machine Learning Models > Covolutions' 카테고리의 다른 글

MobileNet (2)  (0) 2021.05.29
MobileNet (1)  (0) 2021.05.28
Slimmable Neural Networks  (0) 2021.03.14
Learning Efficient Convolutional Networks through Network Slimming  (0) 2021.03.13
Pruning Filters for Efficient Convnets  (0) 2021.03.11