논문 읽기/Classification

[논문 읽기] ShuffleNet(2018) 리뷰, An Extremely Efficient Convolutional Neural Network for Mobile Devices

AI 꿈나무 2021. 3. 22. 21:00
반응형

 안녕하세요! 이번에 읽어볼 논문은 ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices 입니다.

 

 ShuffleNet은 경량화에 집중한 모델입니다. 또 다른 경량화 모델인 MobileNetV1을 능가합니다. 그리고 AlexNet과 비교하여 동일한 정확도로 13배나 더 빠릅니다. MobileNetV1와 Xception에서 연산량을 줄이기 위해 사용하는 Depthwise separable convolution을 기억하시나요? Xception은 Depthwise separable convolution으로 연산량을 감소한 만큼 깊이를 증가시켰었죠. 반대로 MobileNet은 Depthwise separable convolution을 모델 경량화에 집중하여 사용합니다.

 

 ShuffleNet도 마찬가지로 Depthwise separable convolution을 사용합니다. 그리고 ResNext에서 제안된 Group Convolution을 사용합니다. 여기에 추가적으로 ShuffleNet은 pointwise group convolution과 channel shuffle을 제안합니다. pointwise group convolution은 1x1 pointwise convolution의 연산량을 감소시키기 위해 제안되었고, channel shuffle은 3x3 group convolution에서 발생하는 문제점을 해결하기 위한 방법입니다.

 

 Group Convolution과 Depthwise separable convolution에 대한 내용은 아래 포스팅에서 확인하실 수 있습니다.

 

 

[논문 읽기] MobileNet(2017) 리뷰, Efficient Convolutional Neural Networks for Mobile Vision Applications

 이번에 읽어볼 논문은 MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Application 입니다.  MobileNet은 Depthwise separable convolution을 활용하여 모델을 경량화했습니다. Xcept..

deep-learning-study.tistory.com

 

 

[논문 읽기] ResNext(2017) 리뷰, Aggregated Residual Transformations for Deep Neural Networks

 이번에 읽어볼 논문은 Aggregated Residual Transformations for Deep Neural Networks 입니다.  ResNext는 ILSVRC 2016 대회에서 2등을 차지한 모델입니다. 1등 팀인 Trimps-Soushen은 Inception-v3, Inceptio..

deep-learning-study.tistory.com

 

 이제, ShuffleNet에서 제안하는 Pointwise Group ConvolutionChannel Shuffle이 무엇인지 살펴보겠습니다.

Pointwise Group Convolution

 Pointwise Group Convolution은 1x1 Pointwise Convolution의 연산량을 감소시키기 위해서 제안되었습니다. 아래 그림이 1x1 pointwise group convolution입니다. 첫 번째 1x1 Conv에서 입력 채널을 그룹으로 나눠서 연산을 하네요. 

 

 

  3x3 group convolution을 활용하는 ResNext에서는 1x1 pointwise convolution의 연산량이 93.4%를 차지합니다. 이 방법으로 연산량을 감소시킬 수 있다고 하네요.

 

Channel Shuffle

 Pointwise Group Convolution을 사용하면, 3x3 conv가 입력 채널 그룹에 대해서만 연산을 수행하고, 그에 관련된 정보만 출력합니다. 채널 간의 정보 교환을 막기 때문에 많은 정보를 이용할 수 없습니다. 따라서 표현력이 약해지게 됩니다. 이 문제를 해결하기위해 Channel Shuffle을 제안합니다.

 

 Channel Shuffle은 3x3 convolution이 서로 다른 그룹에서 입력값을 받도록 합니다. 아래 그림을 살펴보겠습니다. 모든 입력 채널 그룹이 3x3 conv로 전달되네요. 따라서 3x3 conv는 모든 입력 그룹에 해당하는 정보를 활용하여 출력값을 생성합니다.

 

Channel Shuffle

 

 위 그림은 ShuffleNet에서 구현하는 Channel Shuffle을 나타낸 그림입니다. 1x1 conv layer에서 m개의 채널을 g그룹으로 분할해 하나의 그룹에 n개의 채널을 포함한다고 가정하겠습니다. 1x1 conv는 gxn개의 채널을 출력하고, 이 출력값은 (g, n)으로 reshape 합니다. 이것을 transposing 하고 flattening하여 다음 레이어의 인풋으로 전달합니다.

 

 아래 표는 shuffle을 사용했을 때와 안했을 때의 성능 차이를 비교한 표 입니다.

 

ShuffleNet Unit

 ShuffleNet은 동일한 구조의 ShuffleNet Unit을 쌓아서 구성된 모델입니다.

 (a)는 Depthwise convolution을 사용하는 BottleNeck 구조입니다.

 (b)와 (c)는 ShuffleNet에서 사용하는 unit 입니다. (c)는 down sampling을 할때 사용되며, 3x3 DWConv에서 stride=2를 사용하여 피쳐맵 크기를 반으로 감소합니다. 보통 피쳐맵 크기를 감소할 때, 채널수를 두 배로 해줍니다. SuffleNet에서는 conv 연산으로 채널 수를 확장하지 않고, short cut과 concatenation 하여 채널 수를 확장합니다. short connetion에서도 입력값의 크기를 감소하기 위해 stride=2인 3x3 AVG Pool을 사용합니다.

 

 channel shuffle을 사용하여 다양한 그룹의 채널 정보를 활용해, 3x3 group convolution 문제점을 해결했습니다. 그리고 1x1 pointwise group convolution을 활용해서 연산량에서도 이점을 갖습니다. 따라서 제한된 연산량 내에서 더 많은 피쳐맵을 활용할 수 있습니다.

 

ShuffleNet Archtecture

 다음은 ShuffleNet 구조입니다. ShuffleNet unit이 3개의 stage에 묶여있네요. 다음 stage로 넘어갈 때마다 채널 수가 2배가 됩니다. 그리고, bottleneck 채널을 출력 채널 수의 1/4로 설정합니다. 

 

Performance


참고자료

[1] arxiv.org/abs/1707.01083

[2] towardsdatascience.com/review-shufflenet-v1-light-weight-model-image-classification-5b253dfe982f

반응형