Construir e converter modelos

Os microcontroladores têm RAM e armazenamento limitados, o que impõe restrições aos tamanhos dos modelos de aprendizado de máquina. Além disso, o TensorFlow Lite para microcontroladores atualmente oferece suporte a um subconjunto limitado de operações, portanto, nem todas as arquiteturas de modelo são possíveis.

Este documento explica o processo de conversão de um modelo do TensorFlow para execução em microcontroladores. Ele também descreve as operações suportadas e fornece algumas orientações sobre como projetar e treinar um modelo para caber na memória limitada.

Para obter um exemplo completo e executável de criação e conversão de um modelo, consulte o Colab a seguir, que faz parte do exemplo Hello World :

train_hello_world_model.ipynb

Conversão de modelo

Para converter um modelo TensorFlow treinado para execução em microcontroladores, você deve usar a API Python do conversor TensorFlow Lite . Isso converterá o modelo em um FlatBuffer , reduzindo o tamanho do modelo e modificando-o para usar as operações do TensorFlow Lite.

Para obter o menor tamanho de modelo possível, você deve considerar o uso da quantização pós-treinamento .

Converter para uma matriz C

Muitas plataformas de microcontroladores não possuem suporte de sistema de arquivos nativo. A maneira mais fácil de usar um modelo de seu programa é incluí-lo como uma matriz C e compilá-lo em seu programa.

O seguinte comando unix gerará um arquivo de origem C que contém o modelo TensorFlow Lite como uma matriz char :

xxd -i converted_model.tflite > model_data.cc

A saída será semelhante à seguinte:

unsigned char converted_model_tflite[] = {
  0x18, 0x00, 0x00, 0x00, 0x54, 0x46, 0x4c, 0x33, 0x00, 0x00, 0x0e, 0x00,
  // <Lines omitted>
};
unsigned int converted_model_tflite_len = 18200;

Depois de gerar o arquivo, você pode incluí-lo em seu programa. É importante alterar a declaração do array para const para melhor eficiência de memória em plataformas embarcadas.

Para obter um exemplo de como incluir e usar um modelo em seu programa, consulte evaluate_test.cc no exemplo Hello World .

Arquitetura do modelo e treinamento

Ao projetar um modelo para uso em microcontroladores, é importante considerar o tamanho do modelo, a carga de trabalho e as operações usadas.

Tamanho do modelo

Um modelo deve ser pequeno o suficiente para caber na memória do dispositivo de destino junto com o restante do programa, tanto como binário quanto em tempo de execução.

Para criar um modelo menor, você pode usar menos camadas menores em sua arquitetura. No entanto, modelos pequenos são mais propensos a sofrer de underfitting. Isso significa que, para muitos problemas, faz sentido tentar usar o maior modelo que caiba na memória. No entanto, o uso de modelos maiores também levará ao aumento da carga de trabalho do processador.

carga de trabalho

O tamanho e a complexidade do modelo têm impacto na carga de trabalho. Modelos grandes e complexos podem resultar em um ciclo de trabalho mais alto, o que significa que o processador do seu dispositivo está gastando mais tempo trabalhando e menos tempo ocioso. Isso aumentará o consumo de energia e a produção de calor, o que pode ser um problema dependendo da sua aplicação.

Suporte operacional

Atualmente, o TensorFlow Lite para microcontroladores oferece suporte a um subconjunto limitado de operações do TensorFlow, o que afeta as arquiteturas de modelo que é possível executar. Estamos trabalhando na expansão do suporte à operação, tanto em implementações de referência quanto em otimizações para arquiteturas específicas.

As operações suportadas podem ser vistas no arquivo micro_mutable_ops_resolver.h