Participe do Simpósio Women in ML em 7 de dezembro Inscreva-se agora

Construir e converter modelos

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

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 for Microcontrollers 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 executável de ponta a ponta de construção e conversão de um modelo, consulte o seguinte Colab que faz parte do exemplo Hello World :

train_hello_world_model.ipynb

Conversão de modelo

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

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

Converter para uma matriz C

Muitas plataformas de microcontroladores não têm suporte a sistema de arquivos nativo. 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 gerará um arquivo de origem C que contém o modelo do TensorFlow Lite como uma matriz de 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.

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

Para criar um modelo menor, você pode usar camadas cada vez 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 caberá 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 saída de calor, o que pode ser um problema dependendo da sua aplicação.

Suporte de operação

Atualmente, o TensorFlow Lite for Microcontrollers oferece suporte a um subconjunto limitado de operações do TensorFlow, o que afeta as arquiteturas de modelo que podem ser executadas. Estamos trabalhando na ampliaçã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 all_ops_resolver.cc