2022년 2월 18일 금요일

② Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference




이어서 QAT에 대해 더 알아보도록 하겠습니다.
먼저 QAT를 Batch normalizationSkip connection에 어떻게 적용하는지 보도록 하겠습니다.



[Quantization aware training: Batch normalization folding] 

Conv2d+Batch normalization+Activation 형태의 block을 사용하는 모델들이 대중화되었습니다. 이렇게 Batch normalization을 적용할 때 더 빠른 inference를 위해 weights들을 결합(fusing)하는 최적화를 하게 됩니다.
(해당 내용들은 https://lyzqm.blogspot.com/2021/12/foldingfusing-batch-normalization.html 에 정리해놨으니 참고바랍니다.)

QAT를 적용할 때는 fusing된 weights들에 fake quantization을 적용하고 마찬가지로 activation output에대해서도 적용합니다.




[Quantization aware training: Skip connection] 

   

Resnet에서 사용하는 Skip connection도 QAT를 적용할 때도 기존 방식과 유사합니다.
convolution을 거친 output에 fake quantization을 적용하는것 이외에는 다른것이 없습니다.




[Quantization aware training: Experiments]

Mobilenet의 결과입니다. 
QAT를 적용하여 quantization된 8bit 모델이 퀄컴사의 스냅드래곤에서 
모두 같은 성능대비 빠른 inference가 가능한것을 확인할 수 있습니다.




이러한 성능은 Object detection에서도 비슷하게 나타납니다. 
위의 실험은 MobilenetSSD로 COCO data를 학습시키고 벤치마킹한 결과입니다.
mAP지표는 큰 차이는 없지만 속도 측면에서 향상된 모습을 볼 수 있습니다.



[Conclusion] 
지금까지 QAT에 대해 알아봤습니다. 
quantization효과를 학습하는 과정에서 미리 그 효과를 반영하여 학습 후에 quantization을 진행하여도 성능하락이 없도록 만드는 깔끔하고 간단한 방법인것 같습니다.
NVIDIA, Qualcomm, Google과 같은 기업에서 제공해주는 딥러닝 학습 프레임워크에 모두 QAT를 사용할 수 있는 API가 있을 정도로 많이 사용되는 방법이니 직접 코드를 찾아보셔도 좋을것 같습니다.




댓글 없음:

댓글 쓰기