Google I/O — это обертка! Наверстать упущенное в сеансах TensorFlow Просмотреть сеансы

Создавайте и конвертируйте модели

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

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

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

train_hello_world_model.ipynb

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

Чтобы преобразовать обученную модель TensorFlow для запуска на микроконтроллерах, вы должны использовать API TensorFlow Lite конвертер Python . Это позволит превратить модель в 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