¡El Día de la Comunidad de ML es el 9 de noviembre! Únase a nosotros para recibir actualizaciones de TensorFlow, JAX, y más Más información

Comprender la biblioteca de C ++

El TensorFlow Lite para microcontroladores biblioteca de C ++ es parte del repositorio 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 archivo

El micro directorio 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:

  • all_ops_resolver.h o micro_mutable_op_resolver.h se pueden utilizar para proporcionar las operaciones utilizadas por el intérprete para ejecutar el modelo. Desde all_ops_resolver.h tirones en todas las operaciones disponibles, se utiliza una gran cantidad de memoria. En las aplicaciones de producción, se debe utilizar micro_mutable_op_resolver.h para tirar sólo en las operaciones de sus necesidades modelo.
  • micro_error_reporter.h información de depuración salidas.
  • micro_interpreter.h contiene código para controlar y ejecutar modelos.

Ver Comience con microcontroladores para 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 sparkfun_edge .

Existen varios otros directorios, que incluyen:

  • kernel , que contiene las implementaciones de operación y el código asociado.
  • tools , que contiene herramientas de construcción y su producción.
  • examples , que contiene código de ejemplo.

Iniciar un nuevo proyecto

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

Usa la biblioteca Arduino

Si está utilizando Arduino, el ejemplo Hello World está incluido en el Arduino_TensorFlowLite biblioteca de Arduino, que se puede descargar desde el IDE de Arduino y en Arduino Crear .

Una vez que la biblioteca ha sido añadido, ir a File -> Examples . Debería ver un ejemplo en la parte inferior de la lista denominada TensorFlowLite:hello_world . Seleccionarlo y hacer clic hello_world para cargar el ejemplo. A continuación, puede guardar una copia del ejemplo y utilizarlo como base para su propio proyecto.

Genera proyectos para otras plataformas

TensorFlow Lite para microcontroladores es capaz de generar proyectos independientes que contienen todos los archivos de origen necesarios, utilizando un Makefile . Los entornos admitidos actualmente son Keil, Make y Mbed.

Para generar estos proyectos con Marca, clonar el repositorio TensorFlow y ejecute 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, usted debe ver algunas carpetas creadas dentro de un trazado como tensorflow/lite/micro/tools/make/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, usted será capaz de encontrar los proyectos Hola mundo en tensorflow/lite/micro/tools/make/gen/linux_x86_64/prj/hello_world . Por ejemplo, hello_world/keil contendrá el proyecto Keil.

Ejecuta 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, utilice 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 archivos Makefiles del proyecto. Por ejemplo, examples/hello_world/Makefile.inc especifica los nombres de las pruebas para el ejemplo Hello World.

Construye binarios

Para construir un binario ejecutable para un proyecto determinado (por ejemplo, una aplicación de ejemplo), utilice 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 va a construir 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 objetivo diferente, utilice TARGET= . El siguiente ejemplo muestra cómo construir el ejemplo Hello World para la Sparkfun Edge:

make -f tensorflow/lite/micro/tools/make/Makefile TARGET=sparkfun_edge hello_world_bin

Cuando se especifica un destino, se utilizará cualquier archivo de origen específico del destino disponible en lugar del código original. Por ejemplo, el subdirectorio examples/hello_world/sparkfun_edge contiene implementaciones Sparkfun borde de los archivos constants.cc y output_handler.cc , que será utilizado cuando el objetivo sparkfun_edge se especifica.

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 pura / C ++ y no incluyen optimizaciones de hardware específicas de la plataforma.

Las versiones optimizadas de los núcleos se proporcionan en subdirectorios. Por ejemplo, kernels/cmsis-nn contiene varios núcleos optimizados que hacen uso de la biblioteca CMSIS-NN del brazo.

Para generar proyectos utilizando kernels optimizados, utilice 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.

Genera la biblioteca Arduino

Una compilación nocturna de la biblioteca de Arduino está disponible a través del administrador de biblioteca de Arduino IDE.

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

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

La biblioteca resultante puede encontrarse en tensorflow/lite/micro/tools/make/gen/arduino_x86_64/prj/tensorflow_lite.zip .

Port a nuevos dispositivos

Orientación en portar TensorFlow Lite para microcontroladores a nuevas plataformas y dispositivos se pueden encontrar en micro/README.md .