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

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

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

Комплексный и работоспособный пример построения и преобразования модели см. в примере Hello World .

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

Чтобы преобразовать обученную модель 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 для повышения эффективности использования памяти на встроенных платформах.

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

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

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

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

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

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

Нагрузка

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

Операционная поддержка

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

Поддерживаемые операции можно увидеть в файле micro_mutable_ops_resolver.h .

,

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

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

Комплексный и работоспособный пример построения и преобразования модели см. в примере Hello World .

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

Чтобы преобразовать обученную модель 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 для повышения эффективности использования памяти на встроенных платформах.

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

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

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

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

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

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

Нагрузка

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

Операционная поддержка

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

Поддерживаемые операции можно увидеть в файле micro_mutable_ops_resolver.h .