Введение в преобразователь, квантованную оптимизацию и интерпретатор TensorFlow Lite для запуска моделей Tensorflow Lite на границе

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

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

В таком сценарии можно использовать TensorFlow Lite.

Особенности модели глубокого обучения для вывода на грани

  1. Легкость. Пограничные устройства имеют ограниченные ресурсы с точки зрения хранилища и вычислительной мощности. Модели глубокого обучения являются ресурсоемкими, поэтому модели, которые мы развертываем на периферийных устройствах, должны быть легкими с меньшими двоичными размерами.
  2. Низкая задержка: модели глубокого обучения на периферии должны делать выводы быстрее независимо от подключения к сети. Поскольку выводы делаются на устройстве Edge, обратный путь от устройства к серверу будет исключен, что сделает выводы быстрее.
  3. Безопасность: Модель развертывается на пограничном устройстве, выводы делаются на устройстве, никакие данные не покидают устройство и не передаются по сети, поэтому нет никакого беспокойства о конфиденциальности данных.
  4. Оптимальное энергопотребление: сети требуется много энергии, а пограничные устройства могут не быть подключены к сети, и, следовательно, потребление энергии невелико.
  5. Предварительная подготовка: модели можно обучать локально или в облаке для различных задач глубокого обучения, таких как классификация изображений, обнаружение объектов, распознавание речи и т. д., и их можно легко развернуть для выполнения выводов на границе.

Tensorflow Lite предлагает все функции, необходимые для выполнения выводов на Edge.

Но что такое TensorFlow Lite?

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

Модель специального формата может быть развернута на периферийных устройствах, таких как мобильные устройства, с использованием встроенных устройств на базе Android, iOS или Linux, таких как Raspberry Pi или микроконтроллеры, чтобы сделать вывод на пограничном сервере.

Как работает Tensorflow Lite (TF Lite)?

Выбрать и обучить модель

допустим, вы хотите выполнить задачу по классификации изображений. Первым делом определитесь с Моделью под задачу. Ваши варианты

  • Создать индивидуальную модель
  • Используйте предварительно обученную модель, такую ​​как InceptionNet, MobileNet, NASNetLarge и т. Д.
  • Примените трансферное обучение к предварительно обученной модели

Преобразуйте модель с помощью конвертера

После обучения модели вы конвертируете модель в версию Tensorflow Lite. Модель TF lite - это модель специального формата, эффективная с точки зрения точности, а также облегченная версия, которая будет занимать меньше места. Эти особенности делают модели TF Lite подходящими для работы на мобильных и встраиваемых устройствах.

Процесс преобразования TensorFlow Lite

В процессе преобразования модели Tensorflow в модель Tensorflow Lite размер файла уменьшается. У нас есть выбор: пойти на дальнейшее уменьшение размера файла с компромиссом со скоростью выполнения модели.

Конвертер Tensorflow Lite конвертирует модель Tensorflow в файл плоского буфера Tensorflow Lite (.tflite).

Плоский буферный файл Tensorflow Lite развертывается на клиенте, которым в нашем случае может быть мобильное устройство, работающее на iOS или Android, или встроенное устройство.

Как преобразовать модель TensorFlow в модель TFlite?

После того, как вы обучили Модель, вам нужно будет сохранить Модель.

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

Конвертер поддерживает модель, сохраненную с использованием

  • tf.keras.Model: создайте и скомпилируйте модель с помощью Keras, а затем преобразуйте модель с помощью TFLite.
#Save the keras model after compiling
model.save('model_keras.h5')
model_keras= tf.keras.models.load_model('model_keras.h5')
# Converting a tf.Keras model to a TensorFlow Lite model.
converter = tf.lite.TFLiteConverter.from_keras_model(model_keras)
tflite_model = converter.convert()
  • SavedModel: SavedModel содержит полную программу TensorFlow, включая веса и вычисления.
#save your model in the SavedModel format
export_dir = 'saved_model/1'
tf.saved_model.save(model, export_dir)
# Converting a SavedModel to a TensorFlow Lite model.
converter = lite.TFLiteConverter.from_saved_model(export_dir)
tflite_model = converter.convert()

каталог_экспорта следует соглашению, согласно которому последний компонент пути - это номер версии модели.

SavedModel - это мета-график, сохраненный в каталог_экспорта, который преобразуется в модель TFLite с помощью lite.TFLiteConverter.

  • Конкретные функции. В TF 2.0 по умолчанию включено активное выполнение, что влияет на производительность и возможность развертывания. Чтобы решить проблему с производительностью, мы можем использовать tf.function для создания графиков. Графики содержат структуру модели со всеми вычислительными операциями, переменными и весами Модели.

Экспортируйте модель как конкретную функцию, а затем преобразуйте конкретную функцию в модель TF Lite.

# export model as concrete function
func = tf.function(model).get_concrete_function(
    tf.TensorSpec(model.inputs[0].shape, model.inputs[0].dtype))
#Returns a serialized graphdef representation of the concrte function
func.graph.as_graph_def()
# converting the concrete function to Tf Lite 
converter =  tf.lite.TFLiteConverter.from_concrete_functions([func])
tflite_model = converter.convert()

Оптимизировать модель

Зачем оптимизировать модель?

Модели в Edge должны быть легкими

  • Занимайте меньше места на устройствах Edge.
  • Более быстрое время загрузки в сетях с меньшей пропускной способностью
  • Занимайте меньше памяти для модели, чтобы делать выводы быстрее

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

Оптимизация уменьшает размер модели или уменьшает задержку. Существует компромисс между размером модели и ее точностью.

Как достигается оптимизация в TensorFlow Lite?

Tensorflow Lite обеспечивает оптимизацию с помощью

  • Квантование
  • Обрезка веса

Квантование

Когда мы сохраняем модель TensorFlow, она хранится в виде графиков, содержащих вычислительную операцию, функции активации, веса и смещения. Функция активации, веса и смещения - это 32-битные числа с плавающей запятой.

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

Квантование может применяться к весу и активациям.

  • Веса с 32-разрядными числами с плавающей запятой можно преобразовать в 16-разрядные числа с плавающей запятой, 8-разрядные числа с плавающей запятой или целые числа, что уменьшит размер модели.
  • Как веса, так и активации можно квантовать путем преобразования в целое число, что обеспечит низкую задержку, меньший размер и пониженное энергопотребление.

Снижение веса

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

Обрезка веса обрезает параметры модели, что в меньшей степени влияет на ее характеристики.

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

Развертывание модели TF Lite и вывод

Модель TF lite можно развернуть на мобильных устройствах, таких как Android и iOS, на периферийных устройствах, таких как Raspberry и микроконтроллеры.

Чтобы сделать вывод из устройств Edge, вам необходимо:

  • Инициализируйте интерпретатор и загрузите интерпретатор с моделью
  • Выделите тензор и получите входные и выходные тензоры
  • Предварительно обработайте изображение, прочитав его в тензор
  • Сделайте вывод о входном тензоре с помощью интерпретатора, вызвав его.
  • Получите результат изображения, сопоставив результат вывода
# Load TFLite model and allocate tensors.
interpreter = tf.lite.Interpreter(model_content=tflite_model)
interpreter.allocate_tensors()
#get input and output tensors
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
# Read the image and decode to a tensor
img = cv2.imread(image_path)
img = cv2.resize(img,(WIDTH,HEIGHT))
#Preprocess the image to required size and cast
input_shape = input_details[0]['shape']
input_tensor= np.array(np.expand_dims(img,0), dtype=np.float32)
#set the tensor to point to the input data to be inferred
input_index = interpreter.get_input_details()[0]["index"]
interpreter.set_tensor(input_index, input_tensor)
#Run the inference
interpreter.invoke()
output_details = interpreter.get_output_details()[0]

Есть ли другой способ уменьшить задержку?

Tensorflow lite использует делегатов для повышения производительности модели TF Lite на Edge. Делегат TF lite - это способ передать части выполнения графа другому аппаратному ускорителю, например графическому процессору или DSP (цифровой сигнальный процессор).

TF lite использует несколько аппаратных ускорителей для обеспечения скорости, точности и оптимизации энергопотребления, что важно для выполнения логических выводов на Edge.

Вывод. Модели TF lite - это легкие модели, которые можно развернуть для вывода с малой задержкой на пограничных устройствах, таких как мобильные телефоны, Raspberry Pi и микроконтроллеры. Делегат TF lite можно использовать в дальнейшем для повышения скорости, точности и энергопотребления при использовании с аппаратными ускорителями.

Использованная литература:



Https://www.tensorflow.org/model_optimization/guide/pruning



Https://www.tensorflow.org/lite/performance/model_optimization