Ajuda a proteger a Grande Barreira de Corais com TensorFlow em Kaggle Junte Desafio

Construir e converter modelos

Os microcontroladores têm memória 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 com suporte e fornece algumas orientações sobre como projetar e treinar um modelo para caber na memória limitada.

Para um fim de ponta a, exemplo executável de construir e converter um modelo, consulte o seguinte Colab que é parte do exemplo Olá Mundo:

train_hello_world_model.ipynb

Conversão de modelo

Para converter um modelo TensorFlow treinados para executar em microcontroladores, você deve usar a API TensorFlow Lite conversor Python . Isto irá converter o modelo em um FlatBuffer , reduzindo o tamanho do modelo e modificá-lo para usar operações TensorFlow Lite.

Para obter o menor tamanho possível modelo, 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 para sistema de arquivos nativo. A maneira mais fácil de usar um modelo de seu programa é incluí-lo como um array C e compilá-lo em seu programa.

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

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 de const para uma melhor eficiência de memória em plataformas embarcadas.

Para um exemplo de como incluir e usar um modelo em seu programa, consulte model.cc no exemplo Olá Mundo.

Arquitetura de 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 ao lado do resto do 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, os modelos pequenos são mais propensos a sofrer de ajuste insuficiente. Isso significa que, para muitos problemas, faz sentido tentar usar o maior modelo que couber na memória. No entanto, o uso de modelos maiores também aumentará a 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 maior, 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

O TensorFlow Lite para Microcontroladores atualmente oferece suporte a um subconjunto limitado de operações do TensorFlow, o que afeta as arquiteturas de modelo que podem ser executadas. Estamos trabalhando para expandir o suporte à operação, tanto em termos de implementações de referência quanto em otimizações para arquiteturas específicas.

As operações suportadas pode ser visto no arquivo all_ops_resolver.cc