Los microcontroladores tienen memoria y almacenamiento limitados, lo que impone limitaciones al tamaños de modelos de aprendizaje automático. Además, LiteRT para En la actualidad, los microcontroladores admiten un subconjunto limitado de operaciones, por lo que no todos posibles arquitecturas de modelos.
En este documento, se explica el proceso de conversión de un modelo de TensorFlow para su ejecución o microcontroladores. También se describen las operaciones admitidas y se ofrecen orientación sobre el diseño y entrenamiento de un modelo para que se adapte a una memoria limitada.
Para ver un ejemplo ejecutable de extremo a extremo de la compilación y conversión de un modelo, consulta el Hello World ejemplo.
Conversión de modelos
A fin de convertir un modelo entrenado de TensorFlow para que se ejecute en microcontroladores, debes usar
el
API de Python para el conversor de LiteRT.
Esto convertirá el modelo en un
FlatBuffer
, lo que reduce el tamaño del modelo
y modificarla para que use operaciones LiteRT.
Para obtener el menor tamaño posible del modelo, debería considerar usar cuantización posterior al entrenamiento.
Convertir en un array en C
Muchas plataformas de microcontroladores no son compatibles con el sistema de archivos nativo. El la forma más sencilla de usar un modelo de tu programa es incluirlo como un array en C y compilarlo en tu programa.
El siguiente comando de Unix generará un archivo de origen C que contiene las
Modelo de LiteRT como un array char
:
xxd -i converted_model.tflite > model_data.cc
El resultado se verá similar al siguiente código:
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 hayas generado el archivo, puedes incluirlo en tu programa. Sí
importante cambiar la declaración del array a const
para obtener mejor memoria.
la eficiencia en plataformas incorporadas.
Para ver un ejemplo de cómo incluir y usar un modelo en tu programa, consulta
hello_world_test.cc
en el ejemplo de Hello World.
Arquitectura y entrenamiento del modelo
Cuando se diseña un modelo para su uso con microcontroladores, es importante tener en cuenta el tamaño del modelo, la carga de trabajo y las operaciones que se usan.
Tamaño del modelo
Un modelo debe ser lo suficientemente pequeño como para caber en la memoria de tu dispositivo de destino junto el resto de tu programa, tanto como objeto binario como en el 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 se vean afectados por el subajuste. Esto significa que, para muchos problemas, tiene sentido intentar usar el modelo más grande que caben en la memoria. Sin embargo, el uso de modelos más grandes también dará lugar a 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. Grande, complejo modelos pueden generar un ciclo de trabajo más alto, lo que significa que el procesador del dispositivo es que pasa más tiempo trabajando y menos inactivo. Esto aumentará la energía y la salida de calor, lo que podría ser un problema, según y mantener la integridad de su aplicación.
Asistencia operativa
Actualmente, LiteRT para microcontroladores admite un subconjunto limitado de Operaciones de TensorFlow, que afectan a las arquitecturas de modelos que es posible se ejecuten. Estamos trabajando para ampliar la compatibilidad operativa, tanto en términos de implementaciones y optimizaciones de referencia para arquitecturas específicas.
Las operaciones admitidas se pueden ver en el archivo
micro_mutable_ops_resolver.h