Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OpenTalks.AI - Дмитрий Пагин, Ускорение сверточных сетей с помощью квантизации. Quantization aware training.

opentalks2
February 04, 2021

OpenTalks.AI - Дмитрий Пагин, Ускорение сверточных сетей с помощью квантизации. Quantization aware training.

opentalks2

February 04, 2021
Tweet

More Decks by opentalks2

Other Decks in Business

Transcript

  1. Условия • Облачная обработка с клиентского приложения • Видеокарты среднего

    сегмента - RTX 2060/2080 • Требуется минимум 30 fps скорости обработки
  2. 10 fps -> 12 fps -> 40 fps -> ???

    OpenTalksAI 2020 pruning физичность данных
  3. Quantization Quantization - приведение весов и вычислений к типам меньшей

    точности с целью ускорения инференса и уменьшения размера сети
  4. Quantization По умолчанию - float32 • float16 - округление •

    int8 - округление + нормирование (256! значений) • int4 … • binary ...
  5. Мы поверили • low-precision инференс в float16 даёт бесплатное(?) 2-кратное

    ускорение • low-precision инференс в int8 может ускорить до 4 раз, но часто ведет к западению метрик
  6. FPS: +100% (40 fps -> 80 fps) mAP75: -1.2% (0.95

    -> 0.938) Мы попробовали
  7. float32 float16 Потеря “нежных” фич: • тени • ночные ролики

    • авто с прицепами Quantization aware training. Зачем?
  8. float32 float16 Ухудшение для маленьких объектов: S (дисперсия координат для

    объектов < 100px в ширину) = 5.1 px Quantization aware training. Зачем?
  9. Quantization aware training benefits • гарантированное сохранение метрик при TensorRT

    float16 inference • 2x уменьшение размера модели • “gradient clipping” регуляризация -> лучшее обобщение
  10. Итоги • TensorRT low-precision must have -> 2x ускорение •

    TensorRT low-precision лучше использовать после quantization aware training
  11. 10 fps -> 12 fps -> 40 fps -> 80

    fps OpenTalksAI 2020 pruning физичность данных quantization
  12. Learning and Fine-tuning - 608x608 px - batchSize = 3

    - custom augmenters - Radam optimizer (instead warmup + reduce LR) - Hard negative mining for trucks
  13. Weights Pruning. Convs masking 1. Маскируем i-ую свертку 2. Прогоняем

    тестовый датасет и запоминаем метрику 3. Повторяем шаг 1 для всех сверток end: удаляем свертки, которые слабо влияют на итоговую метрику для средних и больших моделей ДОЛГО
  14. Weights Pruning. Low magnitude Гипотеза - свертки с малыми значениями

    весов, вносят малый вклад в итоговое принятие решения 5 -3 1 1 1 2 3 1 -4 0 1 -1 1 1 0 0 1 -1
  15. Weights Pruning. Low magnitude Гипотеза - свертки с малыми значениями

    весов, вносят малый вклад в итоговое принятие решения 5 -3 1 1 1 2 3 1 -4 0 1 -1 1 1 0 0 1 -1
  16. Weights Pruning. Процесс Шаг mAP75 Число параметров, млн Размер сети,

    мб От изначальной, % Время прогона, мс Условие вырезания 0 0.963 39 155 100 112 - 1 0.956 37 142 92 106 5% от всех 2 0.962 34 134 87 102 5% от всех 3 0.958 31 124 80 95 15% для слоев с 400+ сверток 4 0.934 29 116 75 90 10% для слоев с 100+ сверток
  17. Weights Pruning -25% convs = size: 155 mb mAp: 0.963

    inf: 112 ms size: 124 mb mAp: 0.958 inf: 90 ms Inference: +15% mAP75: -0,5%