본문 바로가기
논문 읽기/TinyML

[SQUEEZENET] ALEXNET-LEVEL ACCURACY WITH50X FEWER PARAMETERS AND <0.5MB MODEL SIZE

by 럭키한 행복 회로 2024. 11. 4.

논문 제목 : [SQUEEZENET] ALEXNET-LEVEL ACCURACY WITH50X FEWER PARAMETERS AND <0.5MB MODEL SIZE

논문 링크 : https://arxiv.org/abs/1602.07360

 

이번에 읽을 논문은 TinyML의 시조격인 SqueezeNet이다.

기존 AlexNet을 대폭 축소한 모델을 발표해서 경량화의 중요성을 보여준다.

[후기]

SqueezeNet + Simple Bypass + Deep Compression까지 했다면 가볍고 더 정확도 높은 모델을 만들었을텐데 아쉽게도 그런 언급은 없다.

Squeeze Layer 발상 자체가 신박하다.


1. Introduction And Motivation

  • 작은 모델은 통신 오버헤드(연산에 필요한 시간, 메모리 등)가 작아 효율적 학습이 가능
  • 새로운 모델 배포 시 용이
  • FPGA(10MB 이하의 메모리, off-chip 메모리 없음)에서도 구동 가능

 

3. SqueezeNet : Preserving Accuracy with Few Parameters

여기서는 Fire module이라는 새로운 building block을 사용해서 SqueezeNet을 구성했다.

 

3.1 Architectural Design Strategies

1) 3x3 filter를 1x1로 대체해서 parameter 수를 1/9로 줄이기

2) 3x3 filter에 들어오는 input channel 수 줄이기

Parameter는 input channel * number of filters * (3*3) 이므로 3*3만 줄여서 될 게 아니라 input channnel도 줄인다.

이는 queeze layer를 사용해서 줄인다.

3) Downsampling을 늦게 해서 conv layer가 large activation map을 가지도록 한다

stride > 1을 네트워크 뒷부분에 집중시키고, 앞부분은 stride=1로 유지해서 최대한 큰 activation map을 유지한다.

 

1), 2)는 압축을, 3)은 정확도를 높이기 위함이다.

 

3.2 The Fire Module

Fire Module은 squeeze conv layer(1x1로만 구성)와 expand layer(1x1, 3x3 섞임)로 구성된다.

여기서 $s_{1x1}$은 squeeze layer의 1x1 filter 수를, $e_{1x1}, e_{3x3}$는 각각 expand layer의 1x1, 3x3 filter 수를 의미한다.

여기서 $s_{1x1} < (e_{1x1}+e_{3x3})$가 되도록 설정해서 3x3 filter로 들어가는 input channel 수를 제한한다.

 

3.3 The SqueezeNet Architecture

 

SqueezeNet의 구성도는 위 사진과 같다.

단독 conv layer 1개, 그리고 fire module 8개, 마지막으로 conv layer.

Fire module 내부 filter 수는 점차 증가시켰다(activation은 ReLU 사용).

중간 중간 max-pooling을 하되, 최대한 strategy 3에 맞게 했다.

Fire module 9 뒤에는 dropout(ratio 50%)를 진행했다.

FC layer는 사용하지 않았다.

 

4. Evaluation of SqueezeNet

기존 연구 목표는 AlexNet을 압축하는 것이므로, ALexNet을 사용해서 비교 및 평가를 진행했다.

+) 여기서 보면 알겠지만 after pruning을 보면 fire module의 경우 절반 이상 parameter가 줄었다.
그래서 total parameter는 무려 1/3으로 줄어든 것을 볼 수 있다.

기존 연구들은 축소에는 성공했지만 accuracy가 감소했다(SVD 기반, Network Pruning, Deep Compression..).

그러나 SqueezeNet은 50X 감소에 더불어서 top-1, top-5 accuracy가 AlexNet과 비슷하거나 더 뛰어나다.

압축 없이 SqueezeNet만 써도 최신 연구에 비해 1.4배 작았다.

거기에 33% sparsity, 8 bit quantization, deep compression을 곁들여 압축하면 엄청나게 작아진다.

그럼에도 동등한 정확도를 달성헀다.

여기서 Deep Compression은 큰 CNN 뿐만 아니라, 이미 작은 SqueezeNet도 압축할 수 있음을 보여준다.

 

5. CNN Microarchitecture Design Space Exploration

CNN  미시구조(per-module layer dimensions and configurations)를 살펴보자.

이 챕터의 목표는 정확도 높이기가 아니라, 각 요소가 어떤 영향을 주는지를 살펴보는 것이다.

 

5.1 CNN Microarchitecture Metaparameters

우리는  $s_{1x1}, e_{1x1}, e_{3x3}$를 가지고 있고, fire module은 총 8개이므로 hyperparameter는 24개나 된다.

따라서 이를 효율적으로 다루기 위해 아래와 같은 metaparameter를 고안했다.

  • $base_e$ : expand filter 개수
  • $incre_e$ : 매 freq마다 expand filter를 늘리는 개수

따라서 fire module i에서 $e_i = base_e + (incr_e * \lfloor{\frac{i}{freq}} \rfloor)$가 된다.

  • $pct_{3x3}$ : [0, 1] 범위, 1x1, 3x3 filter 중 3x3 filter의 비율, 모든 fire module이 공유

따라서 $e_{i, 3x3}=e_i * pct_{3x3}, e_{i,1x1}=e_i*(1-pct_{3x3})$가 된다.

  • SR : squeeze ratio, [0, 1] 범위이며 $s_{i,1x1}=SR*e_i$로 s를 조절한다, 모든 fire module이 공유

이 실험에서는 $base_e=128, incr_e=128, pct_{3x3}=0.5, freq=2, SR=0.125$를 사용했다.

 

5.2 Squeeze Ratio

SR의 영향을 알아보기 위해 [0.125, 1.0] 범위로 조절하며 실험했다.

그 결과 SR=0.75에서 최대 정확도를 달성하고, 그 이상에서는 더 나아지지 않았다.

(즉 $s_{i,1x1}$를 $e_i$에 가깝게 만든다 = squeeze를 덜한다, 이때 정확도는 높아지지만 75% 위로는 차이 x)

 

5.3 Trading off 1x1 and 3x3 filters

이 실험은 공간 해상도(다시 말해 1x1 filter를 많이 쓰면 large activation map이 나오므로 그걸 얼마나 줄일 수 있나?)의 중요성을 알아보기 위한 실험이다.

$pct_{3x3}$를 1%부터 99%까지 조절하며 실험했다.

그 결과, 딱 50%일 때 정확도가 최대이며, 이후로는 별반 차이가 없었다.

 

6. CNN Macroarchitecture Design Space Exploration

이 챕터는 거시적 레벨의 구조 변화가 어떤 영향을 줄지 실험하는 것이다.

크게 3가지 구조로 실험했다.

기본 SqueezeNet

SqueezeNet + Fire module 간 간단한 bypass connection

SqueezeNet + Fire module 간 복잡한 bypass connection

간단한 bypass는 추가적인 parameter가 없지만, 복잡한 bypass는 1x1 층이 새로 생기므로 parameter가 추가된다.

그 결과, 놀랍게도 복잡한 연결보다 간단한 연결이 더 우수하고, 더 가벼웠다.

야호!