7.9. TensorFlow Lite para Microcontroladores

O TFLM é o runtime que a maioria das câmaras utiliza para executar um modelo carregado. Analisa o ficheiro .tflite – um FlatBuffer de operadores, pesos e formas de tensor – e percorre a lista de operadores em ordem, despachando cada operador para um kernel que produz o próximo tensor intermédio.

Os tensores intermédios residem numa arena de tensores de tamanho fixo alocada no momento do carregamento. A câmara dimensiona a arena em duas passagens: primeiro, é construído um interpretador descartável com o heap livre máximo para que o modelo possa reportar a memória de trabalho de que necessita; o interpretador persistente é depois alocado com esse tamanho exato mais uma margem pequena. Modelos menores deixam mais heap livre para o resto do script.

O TFLM é o motor no H7, no RT1062 e no AE3.

Three columns side by side. Left: H7 and RT1062 run TFLM with CMSIS-NN kernels on a Cortex-M7. Middle: AE3 runs TFLM with CMSIS-NN and the Ethos-U operator on a Cortex-M55 with an Ethos-U55 NPU. Right: N6 runs STAI on a Neural-ART NPU.

O motor no interior de predict() é uma pilha diferente em cada família de câmaras.

7.9.1. O resolvedor de operadores

O TFLM não inclui todos os kernels. A câmara liga um resolvedor que lista os operadores que pode executar, e um modelo carregado contra o resolvedor falha no carregamento se contiver um operador que não está na lista. A versão entregue regista os operadores comuns em redes de visão e processamento de sinal – as camadas de convolução e densas, as camadas de pooling e ativação, os operadores de reshape e concat, os operadores de quantize e dequantize – pelo que um modelo treinado com uma das arquiteturas padrão (YOLO, MediaPipe, MobileNet) carrega sem necessidade de estender a lista.

A versão AE3 regista adicionalmente o operador Ethos-U. Um modelo compilado com Vela é de resto um .tflite normal, e o TFLM percorre-o normalmente; os subgrafos marcados pelo Vela atingem o operador Ethos-U e são despachados para o NPU.