Comprender la biblioteca de C++

La biblioteca C++ de TensorFlow Lite para microcontroladores forma 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 de C++ y brinda 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 generados previamente 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 Primeros pasos con los microcontroladores para ver un tutorial de uso típico.

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

Existen varios otros directorios, que incluyen:

  • 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 ejemplo.

Iniciar un nuevo proyecto

Recomendamos usar el ejemplo de Hello World como plantilla para nuevos proyectos. Puede obtener una versión del mismo para la plataforma de su elección siguiendo las instrucciones de esta sección.

Usar la biblioteca de Arduino

Si utiliza Arduino, el ejemplo de Hello World se incluye en la biblioteca Arduino_TensorFlowLite de Arduino, que puede instalar manualmente en el IDE de Arduino y en Arduino Create .

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

Generar 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 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 tiene 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 compilar 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 prueba para el ejemplo de Hello World .

Construir binarios

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

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, use TARGET= y TARGET_ARCH= . El siguiente ejemplo muestra cómo construir 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 especifica un destino, se usarán todos los archivos de origen específicos del destino 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 destino 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 de Hello World .

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

Para generar proyectos usando núcleos 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 de 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 la migración de TensorFlow Lite para microcontroladores a nuevas plataformas y dispositivos en micro/docs/new_platform_support.md .