Comprender la biblioteca de C++

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

El siguiente documento describe la estructura básica de la biblioteca C++ y proporciona información sobre cómo crear su propio proyecto.

Estructura de archivos

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

Archivos clave

Los archivos más importantes para usar el intérprete de TensorFlow Lite para microcontroladores se encuentran en la raíz del proyecto, acompañados de 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.

Consulte Introducción a los microcontroladores para obtener un tutorial sobre el uso típico.

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

Existen varios otros directorios, incluidos:

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

Iniciar un nuevo proyecto

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

Utilice la biblioteca Arduino

Si está utilizando Arduino, el ejemplo Hello World está incluido en la biblioteca Arduino_TensorFlowLite , que puede instalar manualmente en Arduino IDE y Arduino Create .

Una vez que se haya agregado la biblioteca, vaya a File -> Examples . Deberías ver un ejemplo cerca del final de la lista llamado TensorFlowLite:hello_world . Selecciónelo y haga clic en hello_world para cargar el ejemplo. Luego puede guardar una copia del ejemplo y utilizarla como base para su propio proyecto.

Generar proyectos para otras plataformas

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

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

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

Esto llevará unos minutos, ya que hay que descargar algunas cadenas de herramientas grandes para las dependencias. Una vez que haya terminado, debería ver algunas carpetas creadas dentro de una ruta como gen/linux_x86_64/prj/ (la ruta exacta depende de su sistema operativo host). Estas carpetas contienen el proyecto generado y los archivos fuente.

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

ejecutar las pruebas

Para construir la biblioteca y ejecutar todas sus pruebas unitarias, use el siguiente comando:

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

Para ejecutar una prueba individual, use el siguiente comando, reemplazando <test_name> con el nombre de la prueba:

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

Puede encontrar los nombres de las pruebas en los Makefiles del proyecto. Por ejemplo, examples/hello_world/Makefile.inc especifica los nombres de las pruebas para el ejemplo Hello World .

Construir binarios

Para crear un binario ejecutable para un proyecto determinado (como una aplicación de ejemplo), utilice el siguiente comando, reemplazando <project_name> con el proyecto que desea crear:

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

Por ejemplo, el siguiente comando creará un 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, utilice TARGET= y TARGET_ARCH= . El siguiente ejemplo muestra cómo construir el ejemplo 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 especifica un destino, se utilizarán todos los archivos fuente específicos del destino disponibles en lugar del código original. Por ejemplo, el subdirectorio examples/hello_world/cortex_m_generic contiene implementaciones SparkFun Edge de los archivos constants.cc y output_handler.cc , que se utilizarán cuando se especifique el objetivo cortex_m_generic .

Puede encontrar los nombres de los proyectos en los Makefiles del proyecto. Por ejemplo, examples/hello_world/Makefile.inc especifica los nombres binarios para el ejemplo Hello World .

Núcleos optimizados

Los núcleos 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 los kernels se proporcionan en subdirectorios. Por ejemplo, kernels/cmsis-nn contiene varios kernels optimizados que utilizan la biblioteca CMSIS-NN de Arm.

Para generar proyectos usando kernels optimizados, use el siguiente comando, reemplazando <subdirectory_name> con el nombre del subdirectorio que contiene las optimizaciones:

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

Puede agregar sus propias optimizaciones creando una nueva subcarpeta para ellas. Alentamos las solicitudes de extracción para nuevas implementaciones optimizadas.

Generar la biblioteca Arduino

Si necesita generar una nueva compilación de la biblioteca, puede ejecutar el siguiente script desde el repositorio de TensorFlow:

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

La biblioteca resultante se puede encontrar en gen/arduino_x86_64/prj/tensorflow_lite.zip .

Puerto a nuevos dispositivos

Puede encontrar orientación sobre cómo migrar TensorFlow Lite para microcontroladores a nuevas plataformas y dispositivos en micro/docs/new_platform_support.md .