¡El Día de la Comunidad de ML es el 9 de noviembre! Únase a nosotros para recibir actualizaciones de TensorFlow, JAX, y más Más información

Construya y convierta modelos

Los microcontroladores tienen RAM y almacenamiento limitados, lo que limita el tamaño 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 conversión de un modelo de TensorFlow para que se ejecute en microcontroladores. También describe las operaciones admitidas y brinda alguna orientación sobre el diseño y entrenamiento de un modelo para que se ajuste a la memoria limitada.

Para un fin de extremo a, ejemplo ejecutable de la construcción y la conversión de un modelo, consulte la siguiente Colab que es parte del ejemplo Hello World:

train_hello_world_model.ipynb

Conversión de modelo

Para convertir un modelo TensorFlow capacitado para funcionar en microcontroladores, se debe utilizar la API TensorFlow Lite convertidor de Python . Esto convertirá el modelo en una FlatBuffer , reduciendo el tamaño del modelo, y modificarlo para utilizar las operaciones TensorFlow Lite.

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

Convierta a una matriz C

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

El siguiente comando UNIX generará un archivo fuente en C que contiene el modelo TensorFlow Lite como un char matriz:

xxd -i converted_model.tflite > model_data.cc

La salida se verá 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 matriz a const para una mejor eficiencia de la memoria en las plataformas embebidas.

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

Arquitectura y formación de modelos

Al diseñar un modelo para su uso en microcontroladores, es importante considerar 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 un desajuste. Esto significa que para muchos problemas, tiene sentido intentar utilizar el modelo más grande que quepa en la memoria. Sin embargo, el uso de modelos más grandes también conducirá a una mayor 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 según su aplicación.

Soporte de operaciones

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

Las operaciones apoyadas se pueden ver en el archivo all_ops_resolver.cc