Создание и преобразование моделей

Микроконтроллеры имеют ограниченные объемы оперативной памяти и хранилища, что накладывает ограничения на размеры моделей машинного обучения. Кроме того, TensorFlow Lite для микроконтроллеров в настоящее время поддерживает ограниченное подмножество операций, поэтому возможны не все архитектуры моделей.

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

Для сквозного, работоспособного примера построения и преобразования модели см. следующий Colab, который является частью примера Hello World :

train_hello_world_model.ipynb

Преобразование модели

Чтобы преобразовать обученную модель TensorFlow для работы на микроконтроллерах, следует использовать Python API преобразователя TensorFlow Lite . Это преобразует модель в FlatBuffer , уменьшит размер модели и изменит ее для использования операций TensorFlow Lite.

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

Преобразовать в массив C

Многие платформы микроконтроллеров не имеют встроенной поддержки файловой системы. Самый простой способ использовать модель из вашей программы — включить ее в виде массива C и скомпилировать в вашу программу.

Следующая команда unix создаст исходный файл C, содержащий модель TensorFlow Lite в виде массива char :

xxd -i converted_model.tflite > model_data.cc

Вывод будет выглядеть примерно так:

unsigned char converted_model_tflite[] = {
  0x18, 0x00, 0x00, 0x00, 0x54, 0x46, 0x4c, 0x33, 0x00, 0x00, 0x0e, 0x00,
  // <Lines omitted>
};
unsigned int converted_model_tflite_len = 18200;

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

Пример того, как включить и использовать модель в вашей программе, см. в model.cc в примере Hello World .

Архитектура модели и обучение

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

Размер модели

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

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

Нагрузка

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

Поддержка эксплуатации

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

Поддерживаемые операции можно посмотреть в файле all_ops_resolver.cc