본문 바로가기
Deep Learning

[딥러닝 모델 경량화] 다양한 종류의 Convolution

by 룰루셩 2020. 8. 1.

[딥러닝 모델 경량화] 다양한 종류의 Convolution 

 

요즘 효율적인 합성곱을 이용하여 모델을 경량화시키는 부분을 공부하고 있습니다. 

Xception 논문을 읽는데 이런 모르는 개념들이 있어서 찾아보게 되었습니다. 

Xception, MobileNet, ShuffleNet 등 다양한 모델들에 사용되는 다양한 convolution들을 정리해보겠습니다.   

(김동이 님의 발표환'하나'의 Deep learning! 블로그를 통해 주로 공부하였습니다.)

 

살펴볼 convolution들은 다음과 같습니다.

 

º Normal Convolution

º Grouped Convolution

º Point-wise Convolution

º Depth-wise Convolution

º Depthwise separable Convolution

 

먼저 몇가지 기호를 정의하도록 하겠습니다.

 

º W: input의 width

º H: input의 height

º C: input의 channel

º K: kernel(filter)의 크기 (즉, filter는 (K, K)가 된다.)

º M: output의 channel (filter 개수)

 

bias는 없다고 가정하겠습니다.


 

1. Normal Convolution

그림1 Normal convolution [6]

일반적으로 사용되는 convolution입니다.

 

다음과 같이 예를 들어서 설명하도록 하겠습니다.

Input data의 크기가 (4,4,3)에 2x2 Filter 두 개인 convolution이라고 합시다. 

 

Input: (4,4,3)

Filter: (2,2), 2개

 

Feature Map이 연산되는 과정은 다음 그림과 같이 설명할 수 있습니다.

 

그림2 Standard Convolution에서 feature map이 추출되는 과정 [2]

 

파라미터의 수

먼저 위와 같이 한 필터에 대해 input의 각 channel을 필터와 합성곱 해주기 때문에 필터 크기와 input의 channel 개수를 곱해줍니다. CK2 가 됩니다. output을 M개의 channel로 만들어주려면 이러한  filter의 개수가 총 M개가 있어야 합니다.

따라서 input channel과 필터의 크기와 필터의 개수를 곱해준 CK2M이 파라미터의 수입니다.

 

연산량

하나의 필터당 필요한 연산의 수를 알아내면 연산량이 구해집니다. 

연산량은 CK2MHW가 됩니다. 

따라서 input의 크기뿐만 아니라 많은 요소들 (입력 채널의 수, 필터의 수, 커널의 크기)에 의해 연산량과 파라미터 수가 증가한다는 것을 알 수 있습니다. 

 

 

2. Grouped Convolution

그림3 grouped convolution [1]

 

그림4 Grouped Convolution [1]

input channel을 여러 개의 그룹으로 나누어 각 그룹에 대해 독립적인 convolution을 수행하는 방식입니다. 

그림4와 같이 각 그룹의 입력 채널들 사이에 독립적인 필터를 학습합니다. 

 

grouped convolution의 장점은 다음과 같습니다.

   

   1. 병렬 처리에 유리합니다.

   2. 더 낮은 파라미터 수와 연산량을 가집니다.

   3. 각 그룹에 높은 Correlation을 가지는 채널들이 학습될 수 있습니다.

 

파라미터의 수

각 input channel을 g개의 그룹으로 나누기 때문에 각 그룹당 channel의 수는 C/g가 됩니다. 그리고 filter도 그룹의 개수만큼 나눠서 각 그룹의 입력 채널들 사이에 나눠진 필터를 각각 독립적으로 학습시킵니다. 그래서 필터의 개수는 M/g개가 됩니다. 따라서 input channel과 필터의 크기와 필터의 개수를 곱해준 K2CgMg가 각 그룹당 파라미터 수입니다.

그룹이 총 g개가 있으므로 파라미터수는 K2CMg 가 됩니다. 

 

연산량

연산량은 CK2MHWg가 됩니다.

standard convolution(CK2MHW)의 1/g 연산량을 가지고 있습니다.

 

그러나 Grouped convolution은 단점도 가지고 있습니다.

   1. 그룹의 수는 Hyper parameter입니다. (그룹 수에 따라서 성능이 변화합니다.)

   2. 과도하게 그룹을 나누면 각 레이어가 충분한 수의 채널을 입력으로 가질 수 없게 됩니다.

      ≫ 앙상블 학습과 별 차이가 없어집니다. 이는 비슷한 네트워크를 앙상블 하는 것과 같은 효과를 가진다고 보면 됩니다.

 

 

3. Depth-wise Convolution

그림 5 Depth-wise Convolution [6]

채널마다 따로 필터를 학습하는 것입니다. 

일반적인 convolution filter는 입력의 모든 채널의 영향을 받게 되므로 완벽히 특정 채널만의 Spatial feature를 추출하는 것이 불가능합니다. 

Depth-wise convolution은 각 단일 채널에 대해서만 수행되는 필터들을 사용합니다. 그렇기에 필터 수는 입력 채널의 수와 동일합니다. 

결과적으로 입력 채널 수만큼 그룹을 나눈 Grouped Convolution과 같습니다.

 

파라미터의 수

각 input channel을 C개의 그룹으로 나누기 때문에 각 그룹당 channel의 수는 C/C=1가 됩니다. 그리고 filter의 수는 input channel의 수와 같기 때문에 C개입니다.  파라미터수는 K2C 가 됩니다. 

 

연산량

연산량은 CK2HW가 됩니다.

 

 

4. Point-wise Convolution (1 x 1 convolution)

그림6 Point-wise Convolution [6]

Point-wise convolution은 커널 크기(filter크기)가 1x1로 고정된 convolution layer를 말합니다.

input에 대한 Spatial Feature는 추출하지 않은 상태로, 각 채널에 대한 연산만 수행합니다. 따라서 output의 크기는 변하지 않고, channel의 수는 자유롭게 조절할 수 있습니다. 

하나의 필터는 각 입력 채널별로 하나의 가중치만을 가집니다. 이 가중치는 해당 채널의 모든 영역에 동일하게 적용됩니다. 즉, 입력 채널들에 대한 Linear Combination과 같습니다.

 

보통 dimensional reduction을 위해 많이 쓰입니다. 이것은 channel의 수를 줄이는 것을 의미하는데 연산량을 많이 줄여줄 수 있어 중요한 역할을 하게 됩니다.

 

파라미터의 수

standard convoluton에서 K=1인 경우와 같습니다.

따라서 총파라미터의 수는 CM이 됩니다.

 

연산량

K=1인 경우이기 때문에 CMHW가 됩니다.

 

 

 

5. Depth-wise Separable Convolution

그림7 Depth-wise Separable Convolution [1]

Depth-wise Convolution과 Point-wise Convolution을 조합해 사용하는 방식입니다. 

 

기존의 Convolution에서 전체의 channel 방향과 spatial 한 방향 모두를 한꺼번에 고려했다면, 이방식은 Xception에서 제안한 방법으로, 그 둘을 완전히 분리하겠다는 아이디어입니다.

 

이렇게 두 방법으로 분리를 하게 되어도 channel과 spatial한 방향 모두 보기 때문에, 기존의 convolution과 유사하게 동작하지만 파라미터의 수와 연산량은 훨씬 적습니다.

 

각 Channel 별 Spatial Convolution을 한 이후에 Feature별 Linear combination을 해주는 것이라고 보면 됩니다.

 

파라미터의 수

단순히 Depth-wise convolution 후에 Point-wise Convolution을 수행하는 방식이므로 두 방식의 파라미터를 더해주기만 하면 됩니다. 따라서 총 파라미터의 수는 K2C+CM=C(K2+M)이 됩니다.

 

연산량

이 또한 두 방식의 연산량을 더해주기만 하면 됩니다.

K2CHW+CMHW=CHW(K2+M)

 


 

이렇게 다섯 가지의 Convolution을 정리해봤습니다.

다음에는 이 Convolution들이 사용되는 모델들에 대해서 알아보도록 하겠습니다!

 

 

 

출처:

[1] https://www.youtube.com/watch?v=ijvZsH4TlZc

[2] http://taewan.kim/post/cnn/

[3] https://zzsza.github.io/data/2018/02/23/introduction-convolution/

[4] https://hichoe95.tistory.com/48?category=783893

[5] https://newsight.tistory.com/310

[6] http://machinethink.net/blog/googles-mobile-net-architecture-on-iphone/

댓글