Есть ли стандартный способ оптимизации моделей, чтобы они хорошо работали на разных мобильных устройствах? - PullRequest
0 голосов
/ 17 мая 2019

Я работаю над несколькими побочными проектами, которые включают развертывание моделей ML на грани. Одним из них является приложение для редактирования фотографий, которое включает в себя CNN для распознавания лиц, обнаружения объектов, классификации и передачи стилей. Другое - приложение НЛП, которое помогает в процессе написания, предлагая слова и дополнения предложений.

Когда у меня есть обученная модель, которая является точной, она оказывается очень медленной на одном или нескольких мобильных устройствах, на которых я тестирую (обычно на более низком Android). Я читал, что есть оптимизация, которую можно сделать, чтобы ускорить модели, но я не знаю как. Существует ли стандартный инструмент для оптимизации моделей для мобильных устройств и мобильных телефонов?

1 Ответ

0 голосов
/ 17 мая 2019

Я буду говорить о TensorFlow Lite, в частности, это платформа для запуска операций TensorFlow на Android и iOS.На их сайте упоминается несколько методов оптимизации, но я расскажу о тех, которые для меня важны.

Построение соответствующих моделей для платформ:

Первым шагом в оптимизации модели является ее построение с нуля, то есть TensorFlow.Нам нужно создать модель, которую можно использовать для экспорта в устройство с ограниченным объемом памяти.

Нам определенно необходимо обучить разные модели для разных машин.Модель, созданная для работы на высокопроизводительном TPU, никогда не будет эффективно работать на мобильном процессоре.

  • Создать модель с минимальным количеством слоев и операций.

  • Делайте это без ущерба для точности модели.

  • Для этого вам понадобится опыт работы с ML, а также какие операции лучше всего подходят для предварительной обработки данных.

  • Кроме того, дополнительная предварительная обработка входных данных значительно снижает сложность модели.

Квантование модели:

Мы преобразуем числа с высокой точностью или десятичные числа в числа с более низкой точностью.Это немного влияет на производительность модели, но значительно уменьшает размер модели, а затем удерживает меньше памяти.

Квантование после обучения - это общая методика, позволяющая уменьшить размер модели и в то же время обеспечить в 3 раза меньшую задержку снебольшое снижение точности модели.Квантование после обучения квантовает веса от плавающей запятой до 8-битной точности - от TF документов .

Вы можете увидеть пример TensorFlow Lite TFLiteConverter:

import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.optimizations = [tf.lite.Optimize.OPTIMIZE_FOR_SIZE]
tflite_quant_model = converter.convert()

Также вы должны попробовать использовать флаг post_training_quantize=, который значительно уменьшает размер модели.

Надеюсь, это поможет.

...