SQUEEZENET: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size
Authors: Forrest N. Iandola, Song Han, Matthew W. Moskewicz, Khalid Ashraf, William J. Dally, Kurt Keutzer
- SqueezeNet은 AlexNet과 동일한 성능을 가지면서 parameter의 수를 50배나 줄이고, weight size를 0.5MB이하로 줄인 굉장히 light한 네트워크이며, 모바일이나 임베디드 환경에서 적합하게 설계되었다. 이는 당시 제안된 네트워크들이 accuracy를 높이는 것에 목표를 두어 네트워크가 굉장히 무겁게 설계되었고, 실제로 간단한 CNN architecture인 AlexNet 또한 라즈베리파이나 스마트폰에 업로드하기 무거웠다는 사실을 확인했다. 따라서 SqueezeNet은 적은 파라미터수와 메모리로, 모바일 환경이나 vision application에 적합하게 적용될 수 있다.
- SqueezeNet은 8개의 fire module를 가지고 있으며 input과 output에서 각각 1개의 conv을 사용한다. Fully connect layer는 많은 양의 파라미터를 포함하기 때문에 사용하지 않았다. 대신 global average pooling을 weight값 없이 model size를 줄이며 overfitting도 방지 하였다.
- 더불어 3x3 conv layer를 모두 1x1 conv layer로 대체하며, 계산 복잡성을 9배 줄였다.
- 또한 네트워크 초기 부분에 DownSampling을 하게 되면 연산량이 줄어들어 속도가 빨라지지만, 그만큼 정보손실이 크기 때문에 accuracy가 감소되어 SqueezeNet은 DownSampling을 늦게 한다.
- Fire module은 squeeze layer와 expand layer로 구성되며(아래 그림 좌측), squeeze layer에서는 1x1 conv을 통해 채널을 압축하고, 그 다음 Expand layer를 통해 1x1 conv와 3x3 conv를 통해 다시 팽창시킨다. 그래서 input에서 128 channel이 들어오면 처음 squeeze layer을 통해 128-> 16channel로 squeeze하고, 다시 1x1 conv에서 16->64 channel로 3x3 conv에서 16->64 channel로 만들어 이 2개의 결과를 concat하여 초기 input channel인 128과 동일하게 ouput channel을 만든다. 이러한 방식을 통하여 weight의 사이즈를 줄이면서 성능은 AlexNet과 동일하거나, 그 이상인 네트워크를 만들어 낼 수 있었다.
댓글