Comprende la biblioteca C++

La biblioteca C++ de TensorFlow Lite para microcontroladores forma parte del repositorio de TensorFlow. Está diseñada para ser legible, fácil de modificar, bien probada, fácil de integrar y compatible con el TensorFlow Lite normal.

En el siguiente documento, se describe la estructura básica de la biblioteca de C++ y se proporciona información sobre cómo crear tu propio proyecto.

Estructura de archivos

El directorio raíz micro tiene una estructura relativamente simple. Sin embargo, dado que se encuentra dentro del extenso repositorio de TensorFlow, creamos secuencias de comandos y archivos de proyecto pregenerados que proporcionan los archivos fuente relevantes de forma aislada dentro de varios entornos de desarrollo incorporados.

Archivos de claves

Los archivos más importantes para usar el intérprete de TensorFlow Lite para microcontroladores se encuentran en la raíz del proyecto, junto con las siguientes pruebas:

[`micro_mutable_op_resolver.h`](https://github.com/tensorflow/tflite-micro/blob/main/tensorflow/lite/micro/micro_mutable_op_resolver.h)
can be used to provide the operations used by the interpreter to run the
model.

Consulta Cómo comenzar a usar microcontroladores para ver una explicación de su uso habitual.

El sistema de compilación proporciona implementaciones específicas de la plataforma de ciertos archivos. Se encuentran en un directorio con el nombre de la plataforma, por ejemplo, cortex-m.

Existen varios otros directorios, incluidos los siguientes:

  • kernel, que contiene implementaciones de operaciones y el código asociado
  • tools, que contiene herramientas de compilación y su resultado
  • examples, que contiene código de muestra

Inicia un proyecto nuevo.

Recomendamos usar el ejemplo de Hello World como plantilla para proyectos nuevos. Puedes obtener una versión para la plataforma que prefieras siguiendo las instrucciones de esta sección.

Usa la biblioteca de Arduino

Si usas Arduino, el ejemplo de Hello World se incluye en la biblioteca Arduino_TensorFlowLite de Arduino, que puedes instalar de forma manual en el IDE de Arduino y en Arduino Create.

Una vez que se haya agregado la biblioteca, ve a File -> Examples. Deberías ver un ejemplo cerca de la parte inferior de la lista llamado TensorFlowLite:hello_world. Selecciónala y haz clic en hello_world para cargar el ejemplo. Luego, puedes guardar una copia del ejemplo y usarla como base para tu propio proyecto.

Genera proyectos para otras plataformas

TensorFlow Lite para microcontroladores puede generar proyectos independientes que contienen todos los archivos fuente necesarios mediante un Makefile. Los entornos admitidos actuales son Keil, Make y Mbed.

Para generar estos proyectos con Make, clona el repositorio de TensorFlow/tflite-micro y ejecuta el siguiente comando:

make -f tensorflow/lite/micro/tools/make/Makefile generate_projects

Este proceso tardará unos minutos, ya que debe descargar algunas cadenas de herramientas grandes para las dependencias. Una vez finalizado, deberías ver algunas carpetas creadas dentro de una ruta de acceso como gen/linux_x86_64/prj/ (la ruta exacta depende del sistema operativo del host). Estas carpetas contienen el proyecto generado y los archivos de origen.

Después de ejecutar el comando, podrás encontrar los proyectos de Hello World en gen/linux_x86_64/prj/hello_world. Por ejemplo, hello_world/keil contendrá el proyecto Keil.

Ejecuta las pruebas

Para compilar la biblioteca y ejecutar todas sus pruebas de unidades, usa el siguiente comando:

make -f tensorflow/lite/micro/tools/make/Makefile test

Para ejecutar una prueba individual, usa el siguiente comando y reemplaza <test_name> por el nombre de la prueba:

make -f tensorflow/lite/micro/tools/make/Makefile test_<test_name>

Puedes encontrar los nombres de las pruebas en los archivos makefile del proyecto. Por ejemplo, examples/hello_world/Makefile.inc especifica los nombres de prueba para el ejemplo de Hello World.

Objetos binarios de compilación

Para compilar un objeto binario ejecutable para un proyecto determinado (como una aplicación de ejemplo), usa el siguiente comando y reemplaza <project_name> por el proyecto que deseas compilar:

make -f tensorflow/lite/micro/tools/make/Makefile <project_name>_bin

Por ejemplo, con el siguiente comando, se compilará un objeto binario para la aplicación Hello World:

make -f tensorflow/lite/micro/tools/make/Makefile hello_world_bin

De forma predeterminada, el proyecto se compilará para el sistema operativo host. Para especificar una arquitectura de destino diferente, usa TARGET= y TARGET_ARCH=. En el siguiente ejemplo, se muestra cómo compilar el ejemplo de Hello World para un cortex-m0 genérico:

make -f tensorflow/lite/micro/tools/make/Makefile TARGET=cortex_m_generic TARGET_ARCH=cortex-m0 hello_world_bin

Cuando se especifique un destino, se usarán los archivos de origen específicos del destino que estén disponibles en lugar del código original. Por ejemplo, el subdirectorio examples/hello_world/cortex_m_generic contiene implementaciones de SparkFun Edge de los archivos constants.cc y output_handler.cc, que se usarán cuando se especifique el cortex_m_generic de destino.

Puedes encontrar los nombres de los proyectos en sus archivos makefile. Por ejemplo, examples/hello_world/Makefile.inc especifica los nombres de objetos binarios para el ejemplo de Hello World.

Kernel optimizados

Los kernels de referencia en la raíz de tensorflow/lite/micro/kernels se implementan en C/C++ puro y no incluyen optimizaciones de hardware específicas de la plataforma.

Las versiones optimizadas de kernels se proporcionan en los subdirectorios. Por ejemplo, kernels/cmsis-nn contiene varios kernels optimizados que usan la biblioteca CMSIS-NN de Arm.

Para generar proyectos mediante kernels optimizados, usa el siguiente comando y reemplaza <subdirectory_name> por el nombre del subdirectorio que contiene las optimizaciones:

make -f tensorflow/lite/micro/tools/make/Makefile TAGS=<subdirectory_name> generate_projects

Para agregar tus propias optimizaciones, crea una nueva subcarpeta para ellas. Fomentamos las solicitudes de extracción para nuevas implementaciones optimizadas.

Genera la biblioteca de Arduino

Si necesitas generar una compilación nueva de la biblioteca, puedes ejecutar la siguiente secuencia de comandos desde el repositorio de TensorFlow:

./tensorflow/lite/micro/tools/ci_build/test_arduino.sh

Puedes encontrar la biblioteca resultante en gen/arduino_x86_64/prj/tensorflow_lite.zip.

Cómo realizar la portabilidad a nuevos dispositivos

Puedes encontrar instrucciones sobre la portabilidad de TensorFlow Lite para microcontroladores a plataformas y dispositivos nuevos en micro/docs/new_platform_support.md.