Construir e converter modelos

Os microcontroladores têm RAM e armazenamento limitados, o que restringe o tamanho 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 em memória limitada.

Para obter um exemplo executável de ponta a ponta de construção e conversão de um modelo, consulte o exemplo Hello World .

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 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 da quantização pós-treinamento .

Converter para uma matriz C

Muitas plataformas de microcontroladores não possuem suporte nativo a sistemas de arquivos. A maneira mais fácil de usar um modelo do seu programa é incluí-lo como um array C e compilá-lo no seu programa.

O seguinte comando unix gerará um arquivo de origem C que contém o modelo do 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 hello_world_test.cc no exemplo Hello World .

Arquitetura e treinamento de modelo

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

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 e 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 passa 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 ampliação do suporte à operação, tanto em termos de implementações de referência quanto de otimizações para arquiteturas específicas.

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

,

Os microcontroladores têm RAM e armazenamento limitados, o que restringe o tamanho 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 em memória limitada.

Para obter um exemplo executável de ponta a ponta de construção e conversão de um modelo, consulte o exemplo Hello World .

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 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 da quantização pós-treinamento .

Converter para uma matriz C

Muitas plataformas de microcontroladores não possuem suporte nativo a sistemas de arquivos. A maneira mais fácil de usar um modelo do seu programa é incluí-lo como um array C e compilá-lo no seu programa.

O seguinte comando unix gerará um arquivo de origem C que contém o modelo do 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 hello_world_test.cc no exemplo Hello World .

Arquitetura e treinamento de modelo

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

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 e 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 passa 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 ampliação do suporte à operação, tanto em termos de implementações de referência quanto de otimizações para arquiteturas específicas.

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