Cree y convierta modelos

Los microcontroladores tienen RAM y almacenamiento limitados, lo que impone limitaciones en 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 ejecutarlo en microcontroladores. También describe las operaciones admitidas y brinda orientación sobre cómo diseñar y entrenar un modelo para que se ajuste a una memoria limitada.

Para ver un ejemplo ejecutable de un extremo a otro sobre cómo crear y convertir un modelo, consulte el ejemplo de Hello World .

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 FlatBuffer , reducirá el tamaño del modelo y lo modificará para usar operaciones de TensorFlow Lite.

Para obtener el tamaño de modelo más pequeño posible, debería considerar utilizar la cuantificación posterior al entrenamiento .

Convertir a una matriz C

Muchas plataformas de microcontroladores no tienen soporte para sistemas de archivos nativos. 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 de Unix generará un archivo fuente C que contiene el modelo de TensorFlow Lite como una matriz char :

xxd -i converted_model.tflite > model_data.cc

El resultado será similar al 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 plataformas integradas.

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

Arquitectura de modelos y entrenamiento.

Al diseñar un modelo para usar 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 como 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 utilizar menos capas y más pequeñas en su arquitectura. Sin embargo, los modelos pequeños tienen más probabilidades de sufrir un ajuste insuficiente. 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 generará 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 dar como resultado 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 modelo que es posible ejecutar. Estamos trabajando en ampliar el soporte operativo, 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

,

Los microcontroladores tienen RAM y almacenamiento limitados, lo que impone limitaciones en 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 ejecutarlo en microcontroladores. También describe las operaciones admitidas y brinda orientación sobre cómo diseñar y entrenar un modelo para que se ajuste a una memoria limitada.

Para ver un ejemplo ejecutable de un extremo a otro sobre cómo crear y convertir un modelo, consulte el ejemplo de Hello World .

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 FlatBuffer , reducirá el tamaño del modelo y lo modificará para usar operaciones de TensorFlow Lite.

Para obtener el tamaño de modelo más pequeño posible, debería considerar utilizar la cuantificación posterior al entrenamiento .

Convertir a una matriz C

Muchas plataformas de microcontroladores no tienen soporte para sistemas de archivos nativos. 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 de Unix generará un archivo fuente C que contiene el modelo de TensorFlow Lite como una matriz char :

xxd -i converted_model.tflite > model_data.cc

El resultado será similar al 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 plataformas integradas.

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

Arquitectura de modelos y entrenamiento.

Al diseñar un modelo para usar 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 como 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 utilizar menos capas y más pequeñas en su arquitectura. Sin embargo, los modelos pequeños tienen más probabilidades de sufrir un ajuste insuficiente. 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 generará 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 dar como resultado 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 modelo que es posible ejecutar. Estamos trabajando en ampliar el soporte operativo, 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