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 regular.
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 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-chave
Os arquivos mais importantes para uso do interpretador TensorFlow Lite para Microcontroladores estão localizados na raiz do projeto, acompanhados dos 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 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 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 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 a plataforma de sua escolha seguindo as instruções nesta seção.
Use a biblioteca do Arduino
Se você estiver usando Arduino, o exemplo Hello World está incluído na biblioteca Arduino_TensorFlowLite
Arduino, que você pode instalar manualmente no Arduino IDE 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á-la como base para seu próprio projeto.
Gerar projetos para outras plataformas
O TensorFlow Lite para microcontroladores é capaz de gerar projetos autônomos 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 grandes cadeias de ferramentas 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 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 deseja 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 host. Para especificar uma arquitetura de destino diferente, use TARGET=
e TARGET_ARCH=
. O exemplo a seguir mostra como criar o exemplo Hello World para um córtex-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 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 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 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 de 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.
Gerar a biblioteca do Arduino
Se você precisar gerar uma nova compilação da biblioteca, poderá 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 a portabilidade do TensorFlow Lite para microcontroladores para novas plataformas e dispositivos podem ser encontradas em micro/docs/new_platform_support.md
.