Entender a biblioteca C++

A biblioteca C++ do LiteRT para microcontroladores faz parte da 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 LiteRT 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

A micro diretório raiz 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 forneçam os arquivos de origem relevantes isoladamente em vários ambientes de desenvolvimento incorporados.

Arquivos de chaves

Os arquivos mais importantes para usar o LiteRT para microcontroladores intérprete 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 Começar a usar microcontroladores para ver um o passo a passo do uso típico.

O sistema de build fornece implementações específicas da plataforma de certos . Eles estão localizados em um diretório com o nome da plataforma, por exemplo cortex-m

Há vários outros diretórios, incluindo:

  • kernel, que contém implementações de operações e o código associado.
  • tools, que contém ferramentas de build e as saídas 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. Você você pode obter uma versão dele para a plataforma de sua preferência seguindo as instruções nesta seção.

Usar a biblioteca Arduino

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

Depois que a biblioteca for adicionada, acesse File -> Examples. Você verá um próximo à parte inferior da lista chamada TensorFlowLite:hello_world. Selecionar e clique em hello_world para carregar o exemplo. Você pode salvar uma cópia exemplo e usá-lo como base do seu próprio projeto.

Gerar projetos para outras plataformas

A LiteRT para microcontroladores é capaz de gerar projetos independentes que contenham todos os arquivos de origem necessários, usando um Makefile. O estado atual com suporte são: Keil, Make e Mbed.

Para gerar esses projetos com o 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, já que é necessário fazer o download de alguns conjuntos de ferramentas grandes para as dependências. Quando o processo terminar, algumas pastas vão aparecer em um caminho como gen/linux_x86_64/prj/ (o o caminho exato depende do sistema operacional do host). Essas pastas contêm arquivos de origem e de projeto gerados.

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

Executar os testes

Para criar a biblioteca e executar todos os testes de unidade, 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> com o nome do teste:

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

É possível encontrar os nomes dos testes nos Makefiles do projeto. Por exemplo: examples/hello_world/Makefile.inc especifica os nomes dos testes da classe 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 desejado para criar:

make -f tensorflow/lite/micro/tools/make/Makefile <project_name>_bin

Por exemplo, o comando a seguir cria um binário para a interface Hello World aplicativo:

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=. A exemplo a seguir mostra como criar o exemplo Hello World para uma cortex-m0

make -f tensorflow/lite/micro/tools/make/Makefile TARGET=cortex_m_generic TARGET_ARCH=cortex-m0 hello_world_bin

Quando um destino for especificado, todos os arquivos de origem específicos do destino disponíveis serão usada 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 usados quando o o destino cortex_m_generic é especificado.

É possível encontrar os nomes dos projetos nos Makefiles do projeto. Por exemplo: examples/hello_world/Makefile.inc especifica os nomes binários para a classe 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 hardware específico da plataforma e otimizações.

As versões otimizadas dos kernels são fornecidas em subdiretórios. Por exemplo: O kernels/cmsis-nn contém vários kernels otimizados que usam o CMSIS-NN.

Para gerar projetos usando kernels otimizados, use o seguinte comando: substituindo <subdirectory_name> pelo nome do subdiretório que contém o 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. Qa incentivar solicitações de envio para novas implementações otimizadas.

Gerar a biblioteca Arduino

Se você precisar gerar um novo build da biblioteca, execute o seguinte do 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:

Fazer a portabilidade para novos dispositivos

Orientação sobre a portabilidade do LiteRT para microcontroladores para novas plataformas e dispositivos podem ser encontrados em micro/docs/new_platform_support.md