이번 포스트에서는 convolution 의 기능을 유지하면서 소요되는 파라미터 수와 연산량을 줄이기 위한 다양한 convolution 기법들에 대해 살펴보도록 하겠습니다. 먼저 W,H,C,K,M을 각각 입력의 너비, 높이, 채널, 커널 사이즈, 출력 채널 수로 정의하고 stride가 1인 일반적인 상황을 가정하여 입력, 출력 사이즈가 동일하다고 전제합니다.
Standard convolution
일반적인 convolution 수행을 위해 몇 개의 파라미터가 필요할까요? 먼저 커널의 사이즈가 K이고 입력 채널 수가 C이므로 하나의 커널이 가지는 파라미터 수는 K2⋅C가 됩니다. 이 하나의 커널이 출력의 하나의 채널을 형성하므로 총 K2⋅C⋅M개의 파라미터가 필요하겠네요. 연산량은 어떨까요? 먼저 하나의 필터에 대해 K2⋅C⋅M 만큼의 곱하기가 수행되고 (더하기는 무시합니다.) 입력의 크기만큼 연산이 수행되니 K2⋅C⋅H⋅W⋅M 연산량이 소요됩니다.
Grouped convolution
Grouped convolution 은 Figure 1과 같이 채널을 몇 개의 그룹으로 (g) 나누어 각 그룹 별로 독립적으로 convolution 을 수행하는 방식입니다. 파라미터 수를 먼저 계산해보면 각 그룹당 채널의 수는 C/g 가 될 것이고 출력 채널도 각 그룹에서 M/g만큼 생성되니 한 그룹당 커널의 파라미터 수는 K2⋅(C/g)⋅(M/g)가 될 것이며 g개의 그룹이니 총 파라미터 수는 K2⋅C⋅M/g가 됩니다. 연산량은 여기에서 입출력 크기 H,W를 곱해주면 K2⋅C⋅M⋅H⋅W/g가 되겠죠.

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

Point-wise convolution
Point-wise convolution 은 xCeption 모델에서 제안된 방법으로 커널 사이즈를 1x1 로 고정하여 공간 정보를 제외하고 채널에 대해서만 fully-connected 를 적용하는 방법으로 1x1 convolution 이라고도 불립니다. 따라서 보통 출력의 크기를 변화시키지 않고 출력의 채널 수를 조절하는 역할을 하게 되는데요, 파라미터 수는 standard convolution 에서 K=1인 경우이므로 C⋅M이 되고 연산량은 C⋅M⋅H⋅W가 됩니다.
Depth-wise separable convolution
Depth-wise separable convolution 은 기존의 convolution 이 공간, 채널 방향을 한꺼번에 고려했다면, depth-wise convolution, point-wise convolution 으로 분해하여 공간, 채널 방향에 대해 개별적으로 convolution 을 적용하는 방법입니다. 따라서 Figure 3과 같이 depth-wise convolution 을 먼저 수행하여 각 채널 별로 공간 정보를 추출하고 이후 1x1 convolution 을 수행하여 채널의 수를 조절하게 됩니다.

Depth-wise separable convolution 은 depth-wise convolution + 1x1 convolution 이므로 두 방식의 파라미터 수를 더한 것이 총 파라미터 수가 되어 K2⋅C+C⋅M=C(K2+M)이 됩니다. 연산량은 여기에서 입력 크기를 곱해준 C⋅H⋅W⋅(K2+M)이 됩니다. 따라서 기존 convolution 대비 연산량 감소 효과를 계산해보면 다음과 같습니다. 보통 K보다 M이 훨씬 크기 때문에 일반적으로 연산량이 K2배 정도 줄였다고 생각할 수 있습니다.
C⋅H⋅W(K2+M)K2⋅H⋅W⋅C⋅M=1M+1K2
특히, depth-wise separable convolution 은 경량화를 위한 MobileNet v1 모델에서 집중적으로 사용하는데, 기존의 3x3 convolution 블락을 Figure 4와 같이 대체하여 사용하며, 성능 감수가 거의 없이 파라미터 수와 연산량을 기하급수적으로 줄였습니다. 기존 convolution 은 공간, 채널 (spatial and cross-channel) 정보를 한 번에 계산했다면 depth-wise separable convolution 은 공간 정보는 depth-wise, 채널 정보는 1x1 convolution 으로 분해한 것으로 이는 공간, 채널을 별도로 매핑하는 것이 더 효율적이다라는 "Inception" 가정에서 유도되었습니다.

'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 |