모델 경량화 : Quantization
Last updated
Last updated
RKNN에서 모델을 줄이는 방법에는 여러 가지가 있는데, 그 중 가장 쉬운 것이 Quantization입니다. Quantization은 다음과 같은 측면에서 모델을 경량화할 수 있습니다.
모델 크기 감소 (16, 32비트 -> 8비트)
추론 속도 향상 (정수 연산 속도 > 부동소수점 연산 속도)
rknn-toolkit2에서는 3가지의 기본 Quantization algorithm을 제공합니다.
Normal quantization algorithm(default): 모델 feature에서 min/max를 가져와서 quantization layer의 minmax 범위를 정한다. 처리 속도는 빠르지만, 특성 분포가 고르지 않을 때는 효과가 떨어짐
MMSE quantization algorithm: Quantize된 레이어와 기존 모델의 MSE Loss를 최소화하여 quantization을 진행한다.
KL-divergence quantization algorithm: Quantize된 레이어와 기존 모델의 KL-div Loss를 최소화하여 quantization을 진행한다.
Layer quantization method: 같은 레이어 네트워크의 모든 채널을 quantize. 모든 채널이 동일한 quantization parameter를 공유한다.
Channel quantization method (default): 같은 레이어 네트워크의 각 채널을 독립적으로 quantize하여 각 채널마다 자체 quantization parameter를 가진다. 일반적으로 layer quantization보다 정확도가 높다.
따라서 결과를 살펴보며 적합한 양자화를 진행하면 빠르고 정확한 rknn 모델을 얻는 데 도움이 될 수 있습니다. 경험적으로 CNN계열 모델들은 양자화가 아주 잘 되었습니다. CNN 계열 연산들은 쉽고, 빠르고 정확하게 양자화되는 경향이 있습니다.
Quantization을 수행하려면 Calibration Dataset이 필요합니다. 사용하고자 하는 카메라가 찍은 사진들을 list.txt에 정리해 놓습니다.