A biblioteca C++ do TensorFlow Lite para microcontroladores faz parte do repositório do TensorFlow. Ele foi projetado para ser legível, fácil de modificar, bem testado, fácil de integrar e compatível com o TensorFlow Lite normal.
O documento a seguir descreve a estrutura básica da biblioteca C++ e fornece informações sobre como criar seu próprio projeto.
Estrutura do arquivo
O diretório raiz
micro
tem uma estrutura relativamente simples. No entanto, como ele está localizado
dentro do extenso repositório do TensorFlow, criamos scripts e
arquivos de projeto pré-gerados que fornecem os arquivos de origem relevantes isoladamente
em vários ambientes de desenvolvimento incorporados.
Arquivos de chave
Os arquivos mais importantes para usar o intérprete do TensorFlow Lite para microcontroladores estão localizados na raiz do projeto, acompanhados de testes:
[`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.
micro_error_reporter.h
gera informações de depuração.micro_interpreter.h
contém um código para processar e executar modelos.
Consulte Começar a usar microcontroladores para ver um tutorial da utilização comum.
O sistema de build oferece implementações específicas de plataformas para determinados
arquivos. Eles estão localizados em um diretório com o nome da plataforma, por exemplo,
cortex-m
.
Existem vários outros diretórios, incluindo os seguintes:
kernel
, que contém implementações de operação e o código associado.tools
, que contém ferramentas de build e a saída delas.examples
, que contém um exemplo de código.
Iniciar um novo projeto
Recomendamos usar o exemplo Hello World como modelo para novos projetos. É possível fazer o download de uma versão dele para a plataforma de sua escolha seguindo as instruções nesta seção.
Usar a biblioteca Arduino
Se você estiver usando o Arduino, o exemplo Hello World está incluído na
biblioteca Arduino_TensorFlowLite
do Arduino, que pode ser instalada manualmente no
ambiente de desenvolvimento integrado do Arduino e no Arduino Create.
Depois que a biblioteca for adicionada, acesse File -> Examples
. Próximo à parte de baixo da lista,
um exemplo será exibido com o nome TensorFlowLite:hello_world
. Selecione-o e clique em hello_world
para carregar o exemplo. Em seguida, salve uma cópia do
exemplo e use-a como base do seu próprio projeto.
Gere projetos para outras plataformas
O TensorFlow Lite para microcontroladores pode gerar projetos independentes
que contêm todos os arquivos de origem necessários, usando um Makefile
. Os ambientes
compatíveis atuais são Keil, Make e Mbed.
Para gerar esses projetos com o Make, clone o repositório do TensorFlow/tflite-micro (link em inglês) e execute o seguinte comando:
make -f tensorflow/lite/micro/tools/make/Makefile generate_projects
Isso levará alguns minutos, porque é necessário fazer o download de alguns conjuntos de ferramentas grandes para
as dependências. Quando terminar, você verá algumas pastas criadas
em um caminho como gen/linux_x86_64/prj/
. O
caminho exato depende do sistema operacional do host. Elas contêm o projeto e os arquivos de origem gerados.
Depois de executar o comando, você encontrará os projetos Hello World em
gen/linux_x86_64/prj/hello_world
. Por exemplo, hello_world/keil
conterá o projeto Keil.
Executar os testes
Para criar a biblioteca e executar todos os testes de unidade dela, use o seguinte comando:
make -f tensorflow/lite/micro/tools/make/Makefile test
Para executar um teste individual, use o comando a seguir, substituindo <test_name>
pelo nome do teste:
make -f tensorflow/lite/micro/tools/make/Makefile test_<test_name>
Os nomes dos testes estão nos Makefiles do projeto. Por exemplo,
examples/hello_world/Makefile.inc
especifica os nomes dos testes do exemplo Hello
World.
Criar binários
Para criar um binário executável para um determinado projeto (como um aplicativo de exemplo),
use o seguinte comando, substituindo <project_name>
pelo projeto que você quer
criar:
make -f tensorflow/lite/micro/tools/make/Makefile <project_name>_bin
Por exemplo, o comando a seguir criará um binário para o aplicativo Hello World:
make -f tensorflow/lite/micro/tools/make/Makefile hello_world_bin
Por padrão, o projeto será compilado para o sistema operacional do host. Para especificar uma arquitetura de destino diferente, use TARGET=
e TARGET_ARCH=
. O
exemplo abaixo mostra como criar o exemplo Hello World para um
cortex-m0 genérico:
make -f tensorflow/lite/micro/tools/make/Makefile TARGET=cortex_m_generic TARGET_ARCH=cortex-m0 hello_world_bin
Quando um destino é especificado, todos os arquivos de origem específicos do destino disponíveis são usados no lugar do código original. Por exemplo, o subdiretório examples/hello_world/cortex_m_generic
contém implementações do SparkFun Edge dos arquivos constants.cc
e output_handler.cc
, que serão usadas quando o destino cortex_m_generic
for especificado.
Você pode encontrar os nomes dos projetos nos Makefiles do projeto. Por exemplo,
examples/hello_world/Makefile.inc
especifica os nomes binários do exemplo Hello
World.
Kernels otimizados
Os kernels de referência na raiz de tensorflow/lite/micro/kernels
são
implementados em C/C++ puro e não incluem otimizações de hardware
específicas da plataforma.
As versões otimizadas de kernels são fornecidas em subdiretórios. Por exemplo,
kernels/cmsis-nn
contém vários kernels otimizados que usam a biblioteca
CMSIS-NN do Arm.
Para gerar projetos usando kernels otimizados, use o comando a seguir,
substituindo <subdirectory_name>
pelo nome do subdiretório que contém as
otimizações:
make -f tensorflow/lite/micro/tools/make/Makefile TAGS=<subdirectory_name> generate_projects
Você pode adicionar suas próprias otimizações criando uma nova subpasta para elas. Incentivamos solicitações de envio para novas implementações otimizadas.
Gerar a biblioteca Arduino
Se você precisar gerar um novo build da biblioteca, execute o script a seguir no repositório do TensorFlow:
./tensorflow/lite/micro/tools/ci_build/test_arduino.sh
A biblioteca resultante pode ser encontrada em
gen/arduino_x86_64/prj/tensorflow_lite.zip
.
Portabilidade para novos dispositivos
As orientações sobre a portabilidade do TensorFlow Lite para microcontroladores para novas plataformas e
dispositivos podem ser encontradas em
micro/docs/new_platform_support.md
.