Введение в преобразователь, квантованную оптимизацию и интерпретатор TensorFlow Lite для запуска моделей Tensorflow Lite на границе
В этой статье мы поймем функции, необходимые для развертывания модели глубокого обучения на Edge, что такое TensorFlow Lite и как можно использовать различные компоненты TensorFlow Lite для вывода на Edge.
Вы пытаетесь развернуть свою модель глубокого обучения в области, где у них нет хорошего сетевого подключения, но все же требуется модель глубокого обучения для обеспечения высокой производительности.
В таком сценарии можно использовать TensorFlow Lite.
Особенности модели глубокого обучения для вывода на грани
- Легкость. Пограничные устройства имеют ограниченные ресурсы с точки зрения хранилища и вычислительной мощности. Модели глубокого обучения являются ресурсоемкими, поэтому модели, которые мы развертываем на периферийных устройствах, должны быть легкими с меньшими двоичными размерами.
- Низкая задержка: модели глубокого обучения на периферии должны делать выводы быстрее независимо от подключения к сети. Поскольку выводы делаются на устройстве Edge, обратный путь от устройства к серверу будет исключен, что сделает выводы быстрее.
- Безопасность: Модель развертывается на пограничном устройстве, выводы делаются на устройстве, никакие данные не покидают устройство и не передаются по сети, поэтому нет никакого беспокойства о конфиденциальности данных.
- Оптимальное энергопотребление: сети требуется много энергии, а пограничные устройства могут не быть подключены к сети, и, следовательно, потребление энергии невелико.
- Предварительная подготовка: модели можно обучать локально или в облаке для различных задач глубокого обучения, таких как классификация изображений, обнаружение объектов, распознавание речи и т. д., и их можно легко развернуть для выполнения выводов на границе.
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