Criar e converter modelos

Os microcontroladores têm RAM e armazenamento limitados, o que impõe limitações os tamanhos dos modelos de machine learning. Além disso, a LiteRT para No momento, os microcontroladores oferecem suporte a um subconjunto limitado de operações, portanto, nem todas arquiteturas de modelos são possíveis.

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

Para ver um exemplo completo e executável da criação e conversão de um modelo, consulte o Hello World (link em inglês) exemplo.

Conversão de modelo

Para converter um modelo treinado do TensorFlow para execução em microcontroladores, use as API Python do conversor de LiteRT. Isso converterá o modelo FlatBuffer, reduzindo o tamanho do modelo, e modificá-la para usar operações LiteRT.

Para chegar ao menor tamanho de modelo possível, você precisa considerar o uso de quantização pós-treinamento.

Converter para uma matriz C

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

O comando unix a seguir gera um arquivo de origem C que contém as Modelo LiteRT como uma matriz char:

xxd -i converted_model.tflite > model_data.cc

O resultado será semelhante ao 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 mudar a declaração de matriz para const para melhorar a memória mais eficiente em plataformas incorporadas.

Para ver um exemplo de como incluir e usar um modelo no programa, consulte hello_world_test.cc no exemplo Hello World.

Arquitetura e treinamento de modelos

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 precisa ser pequeno o suficiente para caber na memória do dispositivo de destino junto com o restante do programa, tanto como binário quanto no ambiente de execução.

Para criar um modelo menor, use menos camadas e menores nas do Terraform. No entanto, modelos pequenos são mais propensos a apresentar underfitting. Isso significa que, para muitos problemas, faz sentido tentar usar o maior modelo que vão caber na memória. No entanto, usar modelos maiores também levará a maior carga de trabalho do processador.

Carga de trabalho

O tamanho e a complexidade do modelo afetam a carga de trabalho. Grande e complexo pode resultar em um ciclo de trabalho maior, ou seja, o processador do dispositivo passa mais tempo trabalhando e menos tempo ocioso. Isso vai aumentar a potência consumo e produção de calor, o que pode ser um problema dependendo do para o aplicativo.

Suporte à operação

O LiteRT para microcontroladores atualmente é compatível com um subconjunto limitado de operações do TensorFlow, o que impacta as arquiteturas de modelo possíveis para ser executado. Estamos trabalhando para expandir o suporte às operações, tanto em termos de implementações e otimizações de referência para arquiteturas específicas.

As operações aceitas podem ser consultadas no arquivo micro_mutable_ops_resolver.h