CV/논문

ShuffleNet

알맹리 2021. 4. 8. 01:02

1. Introduction

제한된 계산에서 최고의 정확도를 추구하고 일반적인 모바일 플랫폼에 중점을 둔다.

보통의 standard network architecure는 프루닝, 압축, 낮은 비트에 중점을 두지만 우리는 원하는 계산 범위를 위해서 특별히 설계된 효율적인 standard architecture를 찾는 걸 목표로 한다. 

 

Xception, ResNeXt같은 애들은 밀도 높은 1x1 convolution이 있어서 비용이 많이 들고 작은 네트워크에서 효율이 떨어진다. 그래서 효율을 높이기 위해 pointwise group convolution을 사용하고, 이를 사용하면서 발생하는 부작용을 극복하기 위해 channel shuffle로 feature channel 사이에 정보가 흐르도록 도와준다. 이 두가지를 기반으로 ShuffleNet이라는 효율적인 아키텍처를 구축! ShuffleNet은 많은 feature map channel을 사용하기 때문에 더 많은 정보를 알 수 있고 작은 네트워크에서도 좋은 성능! 

 

  • pointwise group convolution & channel shuffle 이용
  • 정확도는 유지하면서 계산 비용은 낮춤
  • ImageNet classification & MS COCO object detection에서 좋은 성능
  • MobileNet보다 오류가 낮고 AlexNet보다 속도가 13배 빠르다

 

2. Related Works

  • Efficient Model Designs
  • Group Convolution
  • Channel Shuffle Operation
  • Model Acceleration

 

3. Approach

3.1. Channel Shuffle for Group Convolutions

channel shuffle을 통해 multiple group convoluation layer로 더 강력한 구조를 구축할 수 있다. 

(a)는 2개의 stack convolution layer. (a)에서는 input을 받고 채널별로 그룹으로 나누고 그룹별로 convolution 수행하기 때문에 특정 그룹의 output은 해당 그룹 내의 input에만 관련된다. 이렇게 그룹마다 독립적으로 네트워크를 학습시키는 거 말고 그룹을 섞는 과정이 필요하다. 

그래서 각 그룹 내의 feature map을 더 작은 그룹으로 나눠서 섞는 Channel shuffle을 이용해 input과 채널이 잘 연결될 수 있다고 말한다. 그림의 (b)에서는 서브그룹으로 나누는 걸 보여주고 있고 (c)는 output이 n채널을 갖는 g개 그룹을 가진 convolution이라고 가정했을 때, 채널을 (g, n) 차원으로 reshape하고 transpose한 다음 flatten하면 위와 같이 구현할 수 있다. 

 

3.2. ShuffleNet Unit

(a)는 residual block. (a)의 residual branch에서 3x3 레이어의 경우 3x3 conv를 적용한다. 그 다음 (b)처럼 ShuffleNet Unit을 구성하기 위해 첫번째 1x1 conv에 pointwise group convolution를 적용하고 channel shuffle을 수행한다. 두번째 pointwise group convolution의 목적은 채널의 차원을 short path와 매치시키는 것이라서 2번째 pointwise group conv 다음부터는 추가적인 channel shuffle을 하지 않는다. 

ShuffleNet에 스트라이드를 적용하는 경우에는 (c)처럼 두가지 과정을 수행한다. (1) short path에 3x3 평균 풀링을 추가하고 (2) channel concatenation으로 채널의 차원을 수를 맞춘다. 

 

channel shuffle과 pointwise group convolution 덕분에 ShuffleNet은 연산량을 줄여 효율적으로 계산할 수 있고 더 넓은 feature map을 사용할 수 있어서 채널 수가 적은 소규모 네트워크에서 유리하다. 

 

3.3. Network Architecture

ShuffleNet Unit을 기반으로 구축된 전체 ShuffleNet architecture

각 단계의 첫번째 building block은 stride = 2로 설정해 output 채널 수를 늘려간다. 각 unit의 bottlenet layer의 채널 개수는 output 채널의 1/4로 설정한다.

unit에서 그룹 개수 g는 출력 채널을 조정하는 역할을 한다. g가 클수록 더 많은 output 채널(conv filter)이 생성돼 더 많은 정보를 인코딩할 수 있지만 input 채널이 제한되어 개별 conv filter의 성능이 저하될 수도 있다. 그룹 많으면 feature 많음!

실험에서 그룹 개수의 영향을 알아보기 위해 complexity가 비슷하도록 채널 수에 scale factor s를 적용한다. "ShuffleNet 1x" 대신 "ShuffleNet sx"로 나타내고 이는 1x의 필터 수를 s배로 확장한 것이고 s^2만큼의 complexity를 의미한다. 

 

4. Experiments

실험은 ImageNet 2012 classification dataset을 사용해 classification error로 모델 성능 측정.

 

4.1. Ablation Study - pointwise group conv, channel shuffle

채널 수를 scaling한 ShuffleNet 비교. 

그룹 수가 많아질수록 성능이 좋아지고 더 작은 모델일수록 그룹 개수별 성능의 차이가 커진다.

> 작은 모델일수록 채널 수가 중요하다.

 

채널 shuffle 유무 비교.

channel shuffle은 여러 그룹이 서로 모두 관계를 가지게 하기 위해 수행한다. 

channel shuffle을 하면 안한거보다 모두 높은 성능을 보임을 확인할 수 있고, channel shuffle을 하면서 그룹 수가 큰 경우에도 상당한 차이가 있음을 볼 수 있다. 

 

4.2. Comaprison with Other Structue Units - VGG16, GoogleNet, AlexNet, SqueezeNet

암튼 더 좋음

 

4.3. Comparison with MobileNets and Other Frameworks

MobileNet과 비교. ShuffleNet이 더 좋음 ~.~ 

다른 애들과 비교해도 ShuffleNet이 더 좋음~

 

4.4. Generalization Ability

MS COCO object detection으로 MobileNet이랑 ShuffleNet 성능 비교. 안봐도 걍 ShuffleNet이 좋다는 이야기

 

4.5. Actual Speedup Evaluation

ARM 플랫폼을 사용하는 모바일 장치에서 ShuffleNet의 실제 추론 속도 평가.

이론상으론 그룹이 많을수록 성능이 더 좋아야 하지만 실제로는 g = 3일때 정확도랑 계산 시간이 적절하다!

이론적으로 complexity가 4배 줄어들때마다 속도가 2.6배 향상되어야 하지만 이론과 현실은 다른 법... 이론적으론 AlexNet보다 18배 빠르지만 실제로는 13배정도 빨랐음. 암튼 개빠름 ~~

'CV > 논문' 카테고리의 다른 글

[ViT] An Image is Worth 16X16 Words: Transformers for Image Recognition at Scale  (0) 2021.05.20
EfficientNet  (0) 2021.04.15
MobileNets 논문  (0) 2021.03.25