Compreender a biblioteca C++

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

A biblioteca C++ do TensorFlow Lite for Microcontrollers 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 comum.

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 interpretador TensorFlow Lite for Microcontrollers estão localizados na raiz do projeto, acompanhados de testes:

  • all_ops_resolver.h ou micro_mutable_op_resolver.h podem ser usados ​​para fornecer as operações usadas pelo interpretador para executar o modelo. Como all_ops_resolver.h puxa todas as operações disponíveis, ele usa muita memória. Em aplicativos de produção, você deve usar micro_mutable_op_resolver.h para extrair apenas as operações que seu modelo precisa.
  • micro_error_reporter.h gera informações de depuração.
  • micro_interpreter.h contém código para manipular e executar modelos.

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, sparkfun_edge .

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 compilaçã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 sua plataforma de escolha seguindo as instruções nesta seção.

Use a biblioteca do Arduino

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

Uma vez que a biblioteca foi adicionada, vá para File -> Examples . Você deve 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á-lo como base de 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 o Make, clone o repositório do TensorFlow e execute o seguinte comando:

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

Isso levará alguns minutos, pois precisa baixar algumas grandes cadeias de ferramentas para as dependências. Quando 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 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 .

Criar 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= . O exemplo a seguir mostra como criar o exemplo Hello World para o SparkFun Edge:

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

Quando um destino é especificado, quaisquer arquivos de origem específicos de destino disponíveis serão usados ​​no lugar do código original. Por exemplo, o subdiretório examples/hello_world/sparkfun_edge contém implementações do SparkFun Edge dos arquivos constants.cc e output_handler.cc , que serão usados ​​quando o destino sparkfun_edge for especificado.

Você pode encontrar os nomes dos projetos nos Makefiles do projeto. Por exemplo, example 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 do 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 pull requests para novas implementações otimizadas.

Gerar a biblioteca do Arduino

Uma compilação noturna da biblioteca do Arduino está disponível através do gerenciador de bibliotecas do Arduino IDE.

Se você precisar gerar uma nova compilação da biblioteca, execute 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 a portabilidade do TensorFlow Lite for Microcontrollers para novas plataformas e dispositivos podem ser encontradas em micro/docs/new_platform_support.md .