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

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

99390fdb3165e59dcda59ab1b162fa1f?s=47 opentalks2
February 04, 2021

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

99390fdb3165e59dcda59ab1b162fa1f?s=128

opentalks2

February 04, 2021
Tweet

Transcript

  1. Ускорение сверточных сетей с помощью квантизации. Quantization aware training. Dmitriy

    Pagin, ML and CV developer
  2. Задача

  3. Задача • Детектировать и трекать автомобили с камер и дронов

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

    сегмента - RTX 2060/2080 • Требуется минимум 30 fps скорости обработки
  5. Сложности • Высокая скорость • Маленькие размеры (~10px)

  6. > 70k cars on 4k images Dataset

  7. Baseline 10 fps из коробки на FullHD фреймах

  8. 10 fps -> 12 fps -> 40 fps -> ???

    OpenTalksAI 2020 pruning физичность данных
  9. Как сделать быстрее?

  10. Методы • Quantization • Quantization aware training

  11. Quantization

  12. Quantization Quantization - приведение весов и вычислений к типам меньшей

    точности с целью ускорения инференса и уменьшения размера сети
  13. Quantization

  14. Quantization По умолчанию - float32 • float16 - округление •

    int8 - округление + нормирование (256! значений) • int4 … • binary ...
  15. Quantization

  16. Quantization. INT8 error increasing

  17. Мы поверили • low-precision инференс в float16 даёт бесплатное(?) 2-кратное

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

    -> 0.938) Мы попробовали
  19. Мы попробовали Сложный ролик с тенями Добор датасета Дообучение Тест

    и замена модели
  20. float32 float16 Мы попробовали

  21. Quantization Aware Training

  22. float32 float16 Потеря “нежных” фич: • тени • ночные ролики

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

    объектов < 100px в ширину) = 5.1 px Quantization aware training. Зачем?
  24. without Quantization aware training with float32 float32 float32 float32 float16

    float16 float16 float16
  25. Quantization aware training benefits • гарантированное сохранение метрик при TensorRT

    float16 inference • 2x уменьшение размера модели • “gradient clipping” регуляризация -> лучшее обобщение
  26. Quantization aware training Сложный ролик с тенями Добор датасета Quantization

    aware дообучение Тест и замена модели
  27. float32 float16 Quantization aware training

  28. FPS: +100% (40 fps -> 80 fps) mAP75: -0.2% (0.95

    -> 0.948)
  29. Итоги • TensorRT low-precision must have -> 2x ускорение •

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

    fps OpenTalksAI 2020 pruning физичность данных quantization
  31. None
  32. Thanks! Questions? dm.pagin@gmail.com +7 952 335 65 70

  33. Appendix. Examples

  34. Appendix. Examples

  35. Appendix. Examples

  36. Learning and Fine-tuning - 608x608 px - batchSize = 3

    - custom augmenters - Radam optimizer (instead warmup + reduce LR) - Hard negative mining for trucks
  37. None
  38. Appendix. Radam

  39. Weights Pruning Pruning - уменьшение размера обученной сети без потери

    точности путем удаления слабых узлов
  40. Weights Pruning

  41. Weights Pruning

  42. Weights Pruning. Convs masking 1. Маскируем i-ую свертку 2. Прогоняем

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

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

    весов, вносят малый вклад в итоговое принятие решения 5 -3 1 1 1 2 3 1 -4 0 1 -1 1 1 0 0 1 -1
  45. Weights Pruning. Цикл

  46. 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+ сверток
  47. 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%