이어서 QAT에 대해 더 알아보도록 하겠습니다.
먼저 QAT를 Batch normalization과 Skip 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]
[Quantization aware training: Experiments]
Mobilenet의 결과입니다.
QAT를 적용하여 quantization된 8bit 모델이 퀄컴사의 스냅드래곤에서
모두 같은 성능대비 빠른 inference가 가능한것을 확인할 수 있습니다.
이러한 성능은 Object detection에서도 비슷하게 나타납니다.
위의 실험은 MobilenetSSD로 COCO data를 학습시키고 벤치마킹한 결과입니다.
mAP지표는 큰 차이는 없지만 속도 측면에서 향상된 모습을 볼 수 있습니다.
[Conclusion]
지금까지 QAT에 대해 알아봤습니다.
quantization효과를 학습하는 과정에서 미리 그 효과를 반영하여 학습 후에 quantization을 진행하여도 성능하락이 없도록 만드는 깔끔하고 간단한 방법인것 같습니다.
NVIDIA, Qualcomm, Google과 같은 기업에서 제공해주는 딥러닝 학습 프레임워크에 모두 QAT를 사용할 수 있는 API가 있을 정도로 많이 사용되는 방법이니 직접 코드를 찾아보셔도 좋을것 같습니다.
댓글 없음:
댓글 쓰기