Cree y convierta modelos

Los microcontroladores tienen RAM y almacenamiento limitados, lo que impone restricciones en los tamaños de los modelos de aprendizaje automático. Además, TensorFlow Lite para microcontroladores actualmente admite un subconjunto limitado de operaciones, por lo que no todas las arquitecturas de modelos son posibles.

Este documento explica el proceso de convertir un modelo de TensorFlow para que se ejecute en microcontroladores. También describe las operaciones admitidas y brinda orientación sobre el diseño y la capacitación de un modelo para que se ajuste a una memoria limitada.

Para ver un ejemplo ejecutable de un extremo a otro de la creación y conversión de un modelo, consulte el siguiente Colab, que forma parte del ejemplo de Hello World :

train_hello_world_model.ipynb

Conversión de modelo

Para convertir un modelo de TensorFlow entrenado para que se ejecute en microcontroladores, debe usar la API de Python del convertidor de TensorFlow Lite . Esto convertirá el modelo en un FlatBuffer , reduciendo el tamaño del modelo y modificándolo para usar las operaciones de TensorFlow Lite.

Para obtener el tamaño de modelo más pequeño posible, debe considerar usar la cuantificación posterior al entrenamiento .

Convertir a una matriz C

Muchas plataformas de microcontroladores no tienen soporte de sistema de archivos nativo. La forma más fácil de usar un modelo de su programa es incluirlo como una matriz C y compilarlo en su programa.

El siguiente comando de Unix generará un archivo fuente C que contiene el modelo TensorFlow Lite como una matriz char :

xxd -i converted_model.tflite > model_data.cc

La salida será similar a la siguiente:

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;

Una vez que haya generado el archivo, puede incluirlo en su programa. Es importante cambiar la declaración de la matriz a const para mejorar la eficiencia de la memoria en las plataformas integradas.

Para ver un ejemplo de cómo incluir y usar un modelo en su programa, consulte evaluate_test.cc en el ejemplo de Hello World .

Modelo de arquitectura y entrenamiento.

Al diseñar un modelo para su uso en microcontroladores, es importante tener en cuenta el tamaño del modelo, la carga de trabajo y las operaciones que se utilizan.

Tamaño del modelo

Un modelo debe ser lo suficientemente pequeño para caber en la memoria de su dispositivo de destino junto con el resto de su programa, tanto como binario como en tiempo de ejecución.

Para crear un modelo más pequeño, puede usar menos capas y más pequeñas en su arquitectura. Sin embargo, es más probable que los modelos pequeños sufran desajustes. Esto significa que, para muchos problemas, tiene sentido intentar usar el modelo más grande que quepa en la memoria. Sin embargo, el uso de modelos más grandes también aumentará la carga de trabajo del procesador.

Carga de trabajo

El tamaño y la complejidad del modelo tienen un impacto en la carga de trabajo. Los modelos grandes y complejos pueden resultar en un ciclo de trabajo más alto, lo que significa que el procesador de su dispositivo pasa más tiempo trabajando y menos tiempo inactivo. Esto aumentará el consumo de energía y la producción de calor, lo que podría ser un problema dependiendo de su aplicación.

Soporte de operaciones

TensorFlow Lite para microcontroladores actualmente admite un subconjunto limitado de operaciones de TensorFlow, lo que afecta las arquitecturas modelo que es posible ejecutar. Estamos trabajando en ampliar el soporte de operaciones, tanto en términos de implementaciones de referencia como de optimizaciones para arquitecturas específicas.

Las operaciones soportadas se pueden ver en el archivo micro_mutable_ops_resolver.h