[논문리뷰] ShuffleNet - An Extremely Efficient Convolutional Neural Network for Mobile

hyo._.op·2026년 7월 22일

논문리뷰

목록 보기
4/16

Overview

논문명: ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices
학회(출판연도): CVPR (2018)
연구분야: 딥러닝 기반 컴퓨터 비전 백본 네트워크


Abstract(초록)

✓ ShuffleNet

  • 10~150 MFLOPs 수준처럼 연산 자원이 매우 제한적인 모바일 기기에 특화 설계

    • Pointwise group convolution

    • Channel shuffle

      ⇒ 정확도를 높이고 연산량 줄임

✓ 왜 10~150MFLOPs 수준이 연산이 제한적?

  • 최신 대형 CNN 모델(VGG-16, ResNet-50 등)은 수십~수백억 FLOPs를 소모함
    • VGG-16: 약 15,500 MFOPs(15.3GFLOPs)
    • ResNet-50: 약 4 GFLOPs
  • 반면, 10~150 MFLOPs는 이런 모델의 1/100 ~ 1/1000 수준에 불과

⇒ 이렇게 적은 연산량은 스마트폰, 드론, IoT 기기처럼 저전력&저성능 CPU나 GPU의 실시간 처리를 할 수 있도록 맞춘 설계


1. Introduction(서론)

<기존> - 더 깊고 더 큰 합성곱 신경망(CNN)을 구축하자!

  • 가장 정확도가 높은 CNN: 수백 개의 층 + 수 천개의 채널 → 수십억 FLOPs 수준의 연산 필요

✓ 층(Layer)

  • 신경망을 구성하는 연산 단위.

    • 입력 → 합성곱 → 활성화 → 풀링 같은 단계 각각이 하나의 층이 될 수 있음
  • 깊이(depth): 층의 개수가 많아질수록 네트워크 깊이가 깊어짐

    ex. ResNet-50 → 약 50개의 주요 층

✓ 채널(Channel)

  • 한 층에서 처리하는 특징맵(feature map)의 개수

    ex. RGB이미지 → 3개의 채널(R,G,B)

  • 합성곱 층에서는 채널필터의 개수와 동일

    → 네트워크가 깊어질수록 채널 수가 늘어나는 경향이 있어서 더 많은 패턴을 병렬 추출 가능하다.

✓ 필터, 특징맵, 채널간의 관계

: 필터(Filter, Kernel) → 특징맵(Feature Map) → 채널(Channel)

  • 필터(Filter, Kernel)

    • 입력 데이터에서 특정 패턴을 감지하는 작은 가중치 행렬

      → 합성곱 연산을 통해 경계, 질감, 모양 등의 특징 추출

    • 하나의 필터 → 입력과 합성곱 → 하나의 특징맵

  • 특징맵(Feature Map)

    • 필터가 입력에 대해 합성곱 연산을 한 결과
    • 해당 필터가 감지한 패턴의 공간적 분포 나타냄
    • CNN 한 층의 출력은 여러 개의 특징맵으로 구성됨
  • 채널(Channel)

    • 한 층의 출력에서 특징맵들의 집합을 의미하는 “깊이” 방향의 개수

⇒ 필터: 패턴을 찾는 도구

⇒ 특징맵: 찾은 패턴의 지도

⇒ 채널: 이런 지도들의 묶음

<ShuffleNet의 목표> - 모바일같은 저전력 환경(10~150 MFLOPs)에서 최고 성능을 달성해보자!

<기존>

1) 가지치기(pruning) 2) 압축(compression) 3) 저비트 표현(low-bit representation) 집중

✓ 가지치기(pruning)

  • 네트워크에서 중요도가 낮은 연결(가중치)나 필터를 제거하여 모델을 가볍게!

    ⇒ 파라미터 수와 연산량(FLOPs) 감소로 추론 속도 향상 및 메모리 절약 가능

✓ 압축(compression)

  • 학습된 모델을 저장&배포하기 쉽게 크기 줄이기

    ⇒ 저장 공간 절약, 메모리 대역폭 사용량 감소

✓ 저비트 표현(low-bit representation)

  • 가중치나 활성화값을 32비트(부동소수점) 대신 16비트, 8비트, 심하면 1~4비트로 표현

    ⇒ 모델 크기 축소 + 연산 속도 향상

✓ 왜 기존의 CNN 연구가 여기에 초점을 맞췄을까?

P: CNN은 정확도를 높이려고 점점 층 수 증가 + 채널 수 증가

→ 수십억 FLOPs, 수백MB 모델 크기
→ 스마트폰, 드론, 로봇 같은 저성능&저전력 기기에서 실행 불가

S: 이미 잘 학습된 기존 큰 모델을 쓰되, “효율적으로 줄이자”

→ 가지치기, 압축, 저비트 표현 기법 같은 모델 경량화 기법이 연구 초점!

연산범위에 맞춰 효율적인 기본 아키텍처 자체를 새로 설계하자!

  • P: Xception, ResNeXt 같은 최신 구조도 작은 네트워크 안에서는 효율이 떨어짐

    밀집 1x1 합성곱(dense 1x1 convolutions) 때문(비용이 큼)

  • S

    • 포인트와이즈 그룹 합성곱(pointwise group convolution)

      • 1x1 합성곱을 그룹으로 나눠 계산 → 연산량 감소

      ✓ 포인트와이드 그룹 합성곱

      • 일반 1x1 합성곱: 모든 입력 채널과 모든 출력 채널 연결

      • 그룹 합성곱: 채널을 g개의 그룹으로 나눠서, 각 그룹 안에서만 연산

        → 연산량의 약 g배 절감

        ⇒ P: 그룹끼리 정보가 안 섞임 → 표현력 저하

    • 채널 셔플(channel shuffle)

      • 그룹 합성곱 때문에 줄어드는 채널 간 정보 흐름 문제 해결

      • 채널 순서를 섞어서 그룹 간 정보가 섞이게 끔

        ⇒ 같은 연산 예산 내에서 더 많은 채널 → 더 많은 정보 인코딩 가능

        ⇒ MobileNet보다 40MFLOPs 수준에서 Top-1 오류율 7.8% 낮음

        ⇒ 실제 ARM칩(하드웨어)에서 AlexNet보다 13배 빠름, 정확도는 비슷

      ✓ 채널 셔플(channel shuffle)

      • 그룹 합성곱 후, 채널을 섞어서 재배치

      • 다음 그룹 합성곱에서 다른 그룹의 채널을 입력으로 받게

        ⇒ 정보가 그룹 간 흐르게 되어 성능 회복!

      ✓ 1x1 합성곱 연산을 그룹화 → 연산 절감

      채널 셔플 → 정보 흐름 유지

      이렇게 절감한 연산량으로 채널 수를 늘려서 작은 모델에서 성능을 키울 수 있는듯

      ✓ ShuffleNet처럼 연산예산이 제한된 경우, 채널수 늘리는 것이 성능 극대화?

      • 채널: 이미지 특징을 담은 필터의 개수

        즉, 채널이 많을 수록

        • 더 다양한 패턴, 형태, 색상 정보 병렬 추출 가능
        • 표현력이 증가 됨

        BUT, 무작정 늘릴 수는 없음 → 채널 늘리면 FLOPs도 급증!(속도저하)

      ⇒ ShuffleNet의 경우

      절감한 연산량을 채널수 늘리는데 재투자해서

      작은 네트워크에서 부족한 표현력을 보완하여 성능을 키우겠다는 뜻!


효율적인 모델 설계(Efficient Model Designs)

<최근> 고품질의 심층신경망 임베디드 장치에서 실행하려는 수요⬆️ → 효율적 모델 설계 필요성⬆️

  • GoogLeNet: 단순 계층 쌓기 대신 복잡도를 낮추며 깊이 증가 Inception모듈
  • SqueezeNet: 정확도 유지 + 파라미터와 연산량 절감
  • ResNet: 효율적인 bottelneck구조로 성능 향상
    • Bottleneck: 중간에 채널수를 줄였다가 다시 늘리는 구조
  • SENet: 연산량 소폭 증가로 성능 향
  • NASNet(모바일): 강화학습+모델 검색으로 구조 탐색, ShuffleNet과 비슷한 성능

Group Convolution(그룹 합성곱)

<도입> AlexNet - 2개의 GPU로 모델을 분산하기 위해 사용

<효율성 입증> ResNet

✓ Depthwise Separable Convolution ← Inception 시리즈의 분리 합성곱 아이디어를 일반화

<최근> MobileNet이 Depthwise Separable Convolution 활용하여 경량 모델 중 최고 성능

⇒ ① 그룹합성곱 과 ② Depthwsie Separable Convolution을 새로운 형태로 일반화!

채널 셔플 연산(Channel Shuffle Operation)

<배경> “채널 셔플”이라는 개념이 이전에는 거의 다뤄지지 않았다.

<기존 사례>

  • cuda-convnet: 랜덤 채널 셔플 + 그룹 합성곱 형태
    • 목적: 구조 효율화X 랜덤 희소 합성곱 실험용O
  • 연구[41]: 2단계 합성곱에서 “채널 셔플” 사용
    • but, 채널 셔플 자체 효과나 초소형 모델 설계에 미치는 영향은 분석 안 함

⇒ ShuffleNet은 채널 셔플을 의도적으로 설계의 핵심요소로 도입하여,

  • 그룹 합성곱의 단점(그룹 간 정보 흐름 제한)을 해결하고
  • 초소형&저연산 네트워크 환경에서도 성능 향상에 기여 하겠다!

모델 가속(Model Acceleration)

  • 목표: 사전 학습된 모델의 정확도를 유지하면서 추론속도를 높이자!

    • 가지치기(Pruning):네트워크의 연결 [6, 7]이나 채널 [38]을 제거하여 불필요한 연산을 줄임
      • 중요하지 않은 연결(가중치)나 채널 잘라내서 연산량과 메모리 줄임
    • 양자화(Quantization): [31, 27, 39, 45, 44] 저비트 표현으로 계산량 절감
      • 숫자 정밀도를 줄여서 계산을 가볍게 하는 방법
    • 분해(Factorization): [22, 16, 18, 37] 계산을 더 단순하게 분해하여 속도 향상
      • 큰 연산을 작은 연산 여러 개로 쪼개서 효율을 높이자
    • 합성곱 최적화: FFT(푸리에변환) 기반 [25, 35] 또는 다른 알고리즘 [2]으로 연산 속도 개선
      • 합성곱 계산을 더 빠르게 하는 알고리즘 적용(구조X 속도만 개선)
    • 지식 증류(Distillation)
      • 큰 모델이 배운 지식을 작은 모델로 전달하는 기법

    ⇒ 신경망 모델을 가볍고 빠르게 만드는 대표적 기법


3. Approach

3.1 Channel Shuffle for Group convolutions

<현대>동일한 구조의 빌딩 블록을 반복해서 쌓는 형태

  • Xception & ResNeXt: Depthwise Separable Convolution 또는 Group Convolution 도입

    → 표현력과 계산 비용 사이에서 우수한 균형 달성

BUT!

P: 1x1 합성곱에서의 연산 비용 충분히 고려X

[ResNeXt] 3x3 계층에서만 그룹 합성곱 적용

Residual Unit에서 Pointwise Convolution(1x1 Conv)이 전체 연산량의 93.4% 차지

[소형 네트워크] 연산량을 맞추기 위해 채널 수 제한 → Pointwise Conv이 병목되어 정확도 하락

S: 1x1 계층에도 채널 희소 연결(channel sparse connection) → “그룹 합성곱” 적용하자!

→ 각 합성곱 연산이 자신과 대응되는 입력 채널 그룹에서만 작동하므로 연산 비용⬇️

P: 합성곱을 여러층 쌓게 되면, 그룹 간 정보 흐름 차단

→ 표현력 약화

S: 채널 간 흐름 복원 → 다음 그룹 합성곱 층이 이전 층의 다른 그룹으로부터 입력 받을 수 있도록!

3.2 ShuffleNet Unit

✓ (c)에서 왜 다운 샘플링?

  • [CNN] 보통 Stage가 바뀔 때 공간 크기를 절반으로 줄이고 채널 수를 늘리는 패턴
    • 계산량 절감: 해상도를 줄이면 이후 레이어에서 연산량이 줄어듦
    • 수용영역 확대: 한 픽셀이 더 많은 영역의 정보를 포괄
    • 추상화 수준 상승: 점점 더 고수준 특징 학습 가능

✓ (c)에서 왜 Add 대신 Concat?(합집합 - 크기는 같은 채널수가 다를때 사용)

  • stride =2 를 쓰면
    • 출력 채널수를 늘리면서 해상도를 줄임

⇒ 채널 수를 늘리면서 연결하기 위함

⇒ <기존> stride=2 블록에서는 채널을 늘리려면 1x1 Conv 같은 연산 해야함(FLOPs 증가)

⇒ stride=2블록은 Concat만 사용해서 채널 확장 → 연산량 거의 없이 채널 증가 가능

<챗지-ShuffleNet 실 사용 순서 예시>

네트워크 설계에서 stage 첫 블록 (c) → 나머지는 (b) / (a)는 비교 실험용으로만

✓ 연산 효율성

→ 뫄뫄한 수식으로 인해 같은 연산 예산 하에서 ShuffleNet은 더 넓은 특징맵 사용 가능

⇒ 작은 네트워크는 정보를 처리할 채널 수가 부족하므로 채널을 넓히는 건 성능향상에 있어 중요!

✓ Depthwise Conv의 사용전략

  • Shuffle Net 에서는 “병목 특징 맵(Bottleneck featuremap)”에만 적용

    • Depthwise Conv는 이론적으로는 매우 낮은 복잡도를 갖지만,
      실제 저전력 모바일 기기에서는 효율적으로 구현하기 어렵기 때문

      ⇒ 계산 대비 메모리 접근 비율이 나쁨

      → 불필요한 오버헤드를 최소화 하기 위함

3.3 Network Architecture

→ 이렇게 채널 수를 2배 늘리고

ShuffleNet Unit의 bottleneck 채널수출력 채널수의 1/4로 설정

✓ 왜 1/4 비율일까?

✓ Bottleneck 구조: 줄이기 → 처리 → 늘리기

  • 처음 1x1 Conv에서 채널 수를 줄이면 중간 연산(특히, 3x3 Conv 또는 Depthwise Conv)에 필요한 연산량이 비례해서 줄어듦

  • 마지막 1x1 Conv에서 다시 채널수 복원

  • 너무 많이 줄이면→ 연산량이 줄지만 정보손실도 커짐(정확도 하락)

  • 너무 적게 줄이면→ 정보는 남지만, 연산량 절감 효과 떨어짐

⇒ 그냥 경험적으로~ 좋다

✓ g(그룹 수)와 채널 수의 관계

  • ShuffleNet 유닛에서 그룹수는 Pointwise Convolution의 연결 희소성을 결정
    • 전체 연산량(약 140MFLOPs)가 대체로 일정하게 유지하도록 출력 채널 수 조정

그룹 수가 커질수록 같은 연산 내에서 “출력 채널 수(=합성곱필터수)가 많아진다.

더 많은 정보를 인코딩할 수 있게 하지만, 동시에 각 개별 합성곱 필터가 참조할 수 있는 입력 채널수가 제한되므로 성능저하로 이어질 수도 있음.

그냥 쉽게 생각하면,

  • 그룹 합성곱이라는게,

    입력 채널을 g개로 나누고 각 그룹별로 독립적으로 합성곱

  • g가 늘어나면 날수록 각 그룹의 입력 채널수는 당연히 줄겠지

    → 한 개의 필터가 처리하는 연산량이 줄어서 같은 연산량 예산에서 더 많은 출력 채널

    을 배치할 수 있었잖어~

⇒ 이렇게 g가 커질수록 한 개의 합성곱 필터가 볼 수 있는 입력 채널수가 제한되기 때문에

입력 특징 정보의 다양성이 줄어들 수 밖에.

⇒ g가 커져도 성능을 유지하려면 그룹 간 정보가 섞여야 함

⇒ Channel Shuffle은
이전 레이어 출력 채널을 재배치해서 다음 그룹 합성곱이 다른 그룹의 정보를 참조하게끔!

✓ 복잡도 조절법

→ 채널 수에 따라 스케일 팩터(scale factor) 적용

  • ShuffleNet sx : ShuffleNet 1x의 필터 수를 s배로 늘린 모델 의미

    → 전체 연산 복잡도: s^2

✓ 모델이 작을수록 그룹수를 늘리는게 효과적

  • 가로(같은 모델에서 g) → 그룹수를 늘리면 같은 연산량 내에서 채널수를 늘릴 수 있어서 성능이 좋아지기도 함
  • 세로(같은g에서 모델크기) → 채널수와 연산량이 줄어들면 정확도 떨어짐

✓ 너무 큰 g는 오히려 성능 하락 ex. ShuffleNet 0.5x

✓ 아주 작은 모델의 경우에는 그룹 수가 커질수록 성능이 꾸준히 향상


4. Experiments

[평가방법]

  • ImageNet 2012 분류 데이터셋에서 제안한 모델 평가

    [예외]

    • Weight Decay 값을 4 x 10^(-5) 로 설정

    • 학습률 정책 사용

    • 데이터 전처리에서 “스케일 증강” 약하게 적용

      ⇒ 작은 네트워크의 경우 “과소적합”에 더 취약하기 때문에 예외를 둠

⇒ 채널 셔플을 적용하면 모든 경우 오류율 감소 + 그룹수(g)가 클수록 효과가 더 큼!

4.1 Ablation Study

  • Ablation Study?

    → AI시스템에서 특정부분을 제거함으로써 그 부분이 전체적인 시스템 성능에 기여하는 바를 연구하는 것

    즉, 제안한 요소가 모델에 어떤 영향이 미치는지 확인하고 싶을때,

    이 요소를 포함한 모델 vs. 요소를 포함하지 않은 모델을 비교하는 것

4.1.1&2 Pointwise Group Convolutions & channel Shuffle 유무

  • g=1인 모델보다 g>1인 모델 성능이 좋더라~
  • 작은 모델일수록 그룹 합성곱의 이점을 더 많이 보더라~
    • 넓은 특징맵은 더 많은 정보를 인코딩할 수 있어 성능 향상에 기여
    • 작은 네트워크는 특징맵의 폭이 얇기 때문에 넓어지면 이점을 더 크게 누림!
  • 아주 작은 모델의 경우에는 넓은 특징맵이 주는 이점이 더 크더라~
  • 채널 셔플을 적용 한 경우, 분류 성능이 좋더라~
    • 그룹수가 큰 경우 더 큰 폭으로 개선됨 → 그룹 간 정보 교환이 중요하다!

4.2 Comparison with Other Structure Units

  • 같은 연산량에서 더 많은 채널 수 확보 → 정확도 향상
    • VGG-like, ResNet, Xception-like, ResNeXt 등 다양한 CNN 블록구조와 동일한 연산량 조건으로 성능 비교
  • MobileNet 대비 우수하더라~
  • Inception 계열보다도 효율적이더라~

4.3 Comparison with MobileNets and Other Frameworks

  • 모든 연산 복잡도 내에서 SuffleNet이 더 낮은 분류 오류율을 냄
  • ShuffleNet은 원래 150 MFLOPs 미만 소형 모델을 목표로 설계됐지만, 500MFLOPs이상에서도 더 좋더라

ShuffleNet은 50개의 계층(layers)로 구성된 반면, MobileNet은 28개의 계층만 가지고 있음

→ ShuffleNet의 stage2~4에서 블록 절반을 없앤 26계층 버전(SuffleNet 0.5 shallow (g=3)) 실험

: 그래도 MobileNet보다 성능이 좋더라

⇒ ShuffleNet의 성능이 “깊이”보다 “효율적인 구조 설계”에 기인한다는 것을 시사


→ ShuffleNet이 비슷한 정확도를 가지면서도 효율적이다


✓ 아키텍쳐 확장성

→ ShuffleNet은 단순한 구조 덕분에, 최신 기법을 쉽게 적용 가능하다

4.4 Generalization Ability (일반화)

  • 전이학습평가
    • 전이학습: 이미 대량의 데이터로 학습된 모델의 지식을 다른 관련 작업에 적용하는 과정
    • MS COCO 객체 탐지 과제에서 Faster R-CNN 프레임워크로 테스트

  • ShuffleNet 2x
    • MobileNet보다 해상도 좋다.
  • ShuffleNet 1x
    • 600해상도에서 MobileNet과 비슷한 성능 but 복잡도는 4배 낮다.

ShuffleNet이 단순한 구조를 가졌기 때문이다.

4.5 Actual Speedup Evaluation (속도평가)

  • ShuffleNet은 그룹수(g)가 큰 경우 성능이 더 좋긴 하지만, 구현에서의 효율성이 떨어짐

    g=3이 good!

0개의 댓글