Compreender a biblioteca C++

A biblioteca TensorFlow Lite for Microcontrollers C++ faz parte do repositório 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 de arquivo

O micro diretório raiz tem uma estrutura relativamente simples. No entanto, como 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 principais

Os arquivos mais importantes para utilização do interpretador TensorFlow Lite for Microcontrollers 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.

Consulte Introdução aos microcontroladores para obter instruções sobre o uso típico.

O sistema de compilação fornece implementações específicas da plataforma de 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:

  • kernel , que contém implementações de operação e o código associado.
  • tools , que contém ferramentas de construção e sua saída.
  • examples , que contém código de exemplo.

Iniciar um novo projeto

Recomendamos usar o exemplo Hello World como modelo para novos projetos. Você pode obter uma versão dele para a plataforma de sua escolha seguindo as instruções nesta seção.

Use a biblioteca Arduino

Se você estiver usando o Arduino, o exemplo Hello World está incluído na biblioteca Arduino_TensorFlowLite do Arduino, que você pode instalar manualmente no Arduino IDE e no Arduino Create .

Depois que a biblioteca for adicionada, vá para File -> Examples . Você deverá ver um exemplo próximo ao final da lista chamado TensorFlowLite:hello_world . Selecione-o e clique em hello_world para carregar o exemplo. Você pode então salvar uma cópia do exemplo e usá-la como base para seu próprio projeto.

Gerar projetos para outras plataformas

O TensorFlow Lite for Microcontrollers é capaz de gerar projetos independentes que contêm todos os arquivos de origem necessários, usando um Makefile . Os ambientes atualmente suportados são Keil, Make e Mbed.

Para gerar esses projetos com Make, clone o repositório TensorFlow/tflite-micro e execute o seguinte comando:

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

Isso levará alguns minutos, pois é necessário baixar algumas cadeias de ferramentas grandes para as dependências. Assim que terminar, você deverá ver algumas pastas criadas dentro de um caminho como gen/linux_x86_64/prj/ (o caminho exato depende do sistema operacional do seu host). Essas pastas contêm o projeto gerado e os arquivos de origem.

Depois de executar o comando, você poderá encontrar os projetos Hello World em gen/linux_x86_64/prj/hello_world . Por exemplo, hello_world/keil conterá o projeto Keil.

Execute os testes

Para construir a biblioteca e executar todos os seus testes de unidade, use o seguinte comando:

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

Para executar um teste individual, use o seguinte comando, substituindo <test_name> pelo nome do teste:

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

Você pode encontrar os nomes dos testes nos Makefiles do projeto. Por exemplo, examples/hello_world/Makefile.inc especifica os nomes de teste para o exemplo Hello World .

Construir binários

Para construir 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ê deseja construir:

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 host. Para especificar uma arquitetura de destino diferente, use TARGET= e TARGET_ARCH= . O exemplo a seguir mostra como construir 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, quaisquer arquivos de origem específicos do destino disponíveis serão usados ​​no lugar do código original. Por exemplo, o subdiretório examples/hello_world/cortex_m_generic contém implementações SparkFun Edge dos arquivos constants.cc e output_handler.cc , que serão usados ​​quando o alvo 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 para o 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.

Versões otimizadas de kernels são fornecidas em subdiretórios. Por exemplo, kernels/cmsis-nn contém vários kernels otimizados que fazem uso da biblioteca CMSIS-NN da Arm.

Para gerar projetos usando kernels otimizados, use o seguinte comando, 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 pull para novas implementações otimizadas.

Gere a biblioteca Arduino

Se precisar gerar uma nova compilação da biblioteca, você pode executar o seguinte script 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 .

Porta para novos dispositivos

Orientações sobre como portar o TensorFlow Lite para microcontroladores para novas plataformas e dispositivos podem ser encontradas em micro/docs/new_platform_support.md .