[Paper Review] ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices

Abstract

 본 논문에서는 제한된 computational budget(약 10~150  MFLOPS)를 가지고 이를 효율적으로 사용할 수 있는 CNN architecture인 ShuffleNet을 제안한다.
 ShuffleNet은 pointwise group convolution과 channel shuffle라는 두가지 새로운 operation을 제안한다.

Introduction

 Xception과 ResNext와 같은 state-of-the-art 모델들은 매우 작은 network에 사용되기에는 너무 비효율적이다. 그 이유는, 1x1 convolution의 computational cost가 너무 크기 때문이다. 본 논문에서는 이를 줄이기 위해서 pointwise group convolution을 제안한다. 또한 Group convolution으로 인한 부작용을 줄이기 위해서, channel shuffle 이라는 operation을 통해서 channel 별로 information이 교환될 수 있도록 한다. 
 이러한 두 가지 operation을 통해서 shuffleNet은 제한된 computation complexity 안에서 더 많은 feature map channel이 생성 될 수 있도록 한다. 이는 더 많은 information을 담을 수 있기에 좋을 뿐더러 매우 작은 network에 있어서 중요하다. 


Channel Shuffle for Group Convolutions

 ResNext와 Xception과 같은 모델은 depthwise separable convolution, group convolution을 사용한다. 본 논문의 저자들은 위 모델들이 1x1 convolution은 group convolution으로 진행하지 않는다는 사실에 주목했고 특히 ResNext 에서는 각 unit의 flops 중 93.4%는 1x1 convolution이 차지한 다는 사실을 발견했다. 따라서 매우 높은 computational cost를 가진 1x1 convolution을 매우 작은 네트워크에서는 효율적으로 사용할 수 없다는 문제에 착안하여 1x1 convolution에도 group convolution을 적용하게 되었다.
 나눠진 group에서 각각 1x1 convolution을 진행하므로 computational cost는 확실히 줄어든다. 예를 들어 생각해보면 input channel이 32, output channel이 64, output size: k라고하면 일반적인 1x1 convolution flops는 k * k * 32 * 64인데, group = 4 인 1x1 group convolution은 k * k * 8 * 16 * 4 이다.
 하지만 이와같은 group convolution은 한가지 단점이 존재한다. 위 그림 (a)에서 볼 수 있듯, output channel은 모든 input channel으로부터 계산되어 나오는 것이 아니라 일부 group으로부터 계산되어 나온다. 이는 channel group간의 information flow를 저하시켜서 representation ability를 떨어뜨린다.
 따라서 (b)와 같이 다른 group의 subgroup으로 부터의 channel들을 고려하여 convolution할 수 있다면 input과 output channel이 완전히 related될 것이다. 다른 group의 subgroup을 고려하는 것은 (c)와 같은 channel shuffle operation을 통해 구현될 수 있다.

ShuffleNet Unit

 
 
 (b)에서 두번째 pointwise group convolution의 목적은 shortcut path와 channel수를 맞춰주기 위함이다. 이 때, 두번째 pointwise group convolution에서 channel shuffle을 적용하여도 성능 차이는 미미했으므로 사용하지 않았다. 
  (c)에서와 같이 output size가 2배 줄어들어야 할 경우에는 stride=2 인 3x3 average pooling shortcut path를 추가하였으며 residual path와 shortcut path를 add하는 것이 아니라 concat하였다.

Network Architecture

  Network architecture은 위와 같다. ShuffleNet unit이 stage 3개에 걸쳐서 stack되어 있고 매 stage의 첫번째 block은 stride가 2이다. Output channel은 stage마다 두배가 된다. 
  ShuffleNet unit에서 g는 pointwise convolution의 connection sparsity를 나타낸다. 즉, output channel에 있어서 얼마나 많은 group의 channel을 고려할 것인지를 나타낸다.
  위 표에서 볼 수 있듯이 g가 커지면 비슷한 flops내에서 output channel을 더 많이 가질 수 있다. 

Experiments

Ablation Study
- Pointwise Group Convolutions
 
위 표는 여러 가지 shuffleNet 모델에 대해서 g에 따른 classification error를 나타냅니다. ShuffleNet 1x는 표 1의 architecture를 나타낸다.  ShuffleNet 0.5x는 각 channel 수를 0.5배 한 것이다. 
 결과를 보면, 작은 모델에서는 g값이 커짐에 따라 성능이 확실히 좋아지는 것을 볼 수 있다. 이는 채널 수가 작아짐에도 불구하고 g
값이 커지면 output channel 수를 더 높일 수 있으므로 표현력이 좋아지기 때문이라고 설명하고 있다.
 그러나 1x, 0.5x 모델을 보면 g값을 너무 높여버리면(g=8)  성능이 오히려 줄거나 성능 차이가 미미한 것을 볼 수 있는데 이는 g값이 큼에 따라 각 group의 input channel 수가 줄어들게 되므로 representation capability가 줄어들기 떄문이라고 설명한다.
 따라서 g와 channel 수간의 trade off가 존재한다고 볼 수있다.

- Channel shuffle vs No Shuffle

 위 그림은 다양한 shuffleNet모델에 따른 no shuffle vs shuffle 를 비교한 표이다. g값이 8인 경우 no shuffle에 비해서 성능차이가 매우 큰 것을 볼 수 있다. 

Comparison with Other Structure Units

  VGG, ResNet, GoogleNet, ResNext, Xception과 같은 computational cost가 매우 큰 네트워크와 비교를 하였다. Stage 2~4에 있는 shuffleNet Unit은 각 model의 building block으로 대체하였다. 

 모델 별로 FLOPs를 동일하게 조정하였을 때, ShuffleNet이 성능이 가장 좋은 것을 볼 수 있다. 즉, 제한된 computation cost를 효율적으로 쓴다는 것이다. 
 튜닝하지 않은 VGG-16, GoogleNet, AlexNet 과 같은 매우 큰 네트워크와 ShuffleNet을 비교한 표는 아래와 같다.

 ShuffleNet은 성능은 비슷하면서, FLOPS는 엄청 작은 것을 볼 수 있다.

 위 표는 MobileNet과 성능 비교를 한 것이다. 첫번째 줄에서 보면 ShuffleNet 2x 가 1.0 MobileNet-224 보다 MFLOPs 수도 적고, 성능도 더 좋은것을 볼 수 있다. SE는 Squeeze and Excitation block을 적용한 것을 말한다. SE를 썼을 때 MFLOPs는 조금 증가하여 실제 inference runtime은 많이 길어지지 않을 것으로 보이나 실제로는 25~40%정도 느렸다고 한다.
 MobileNet은 레이어를 28개 쌓았고, ShuffleNet은 50개를 사용하므로 layer 수의 차이가 이러한 결과를 낳았지 않았나 하는 의문에 대해서는 맨 마지막 줄 ShuffleNet 0.5x (shallow, g=3)을 보면 된다. 이는 layer를 26개로 맞추었는데 0.25MobileNet-224 보다 훨씬 성능이 좋은 것을 볼 수 있다.

  Actual Speedup Evaluation




 g 값이 크면 클 수록 성능이 좋아지기는 하지만, inference runtime이 커서 비효율적인 부분이 크므로 g=3이 가장 적절하다고 판단했다. Inference 시에는 3개의 다른 input resolution을 사용하였다. 이론적으로는 4x 빨라야 하는데 memory access나 다른 overhead를 고려했을 때 2.6x 배만큼만 빨라지는 현상이 있었으나 AlexNet의 경우보다 13배 더 빠르면서 comparable한 결과를 얻었다고 한다.

댓글

  1. 1x1 group conv weight 파라미터수: c1(input channel) / g * c2(output channel) /g * g
    1x1 conv weight 파라미터 수 : c1 * c2

    답글삭제

댓글 쓰기