Crea e converti modelli

I microcontroller hanno RAM e spazio di archiviazione limitati, il che limita le dimensioni dei modelli di machine learning. Inoltre, TensorFlow Lite per microcontroller attualmente supporta un sottoinsieme limitato di operazioni, quindi non tutte le architetture dei modelli sono possibili.

Questo documento spiega il processo di conversione di un modello TensorFlow per l'esecuzione sui microcontroller. Inoltre, descrive le operazioni supportate e fornisce alcune linee guida sulla progettazione e l'addestramento di un modello adatto a una memoria limitata.

Per un esempio end-to-end eseguibile di creazione e conversione di un modello, vedi l'esempio Hello World.

Conversione del modello

Per convertire un modello TensorFlow addestrato in modo che venga eseguito su microcontroller, devi utilizzare l'API Python del convertitore di TensorFlow Lite. Il modello verrà convertito in FlatBuffer, riducendo le dimensioni del modello, e lo modificherà per utilizzare le operazioni di TensorFlow Lite.

Per ottenere le dimensioni minime del modello, ti consigliamo di utilizzare la quantizzazione post-addestramento.

Converti in un array C

Molte piattaforme di microcontroller non supportano il file system nativo. Il modo più semplice per utilizzare un modello del tuo programma è includerlo come array C e compilarlo nel programma.

Il seguente comando unix genererà un file di origine C contenente il modello TensorFlow Lite sotto forma di array char:

xxd -i converted_model.tflite > model_data.cc

L'output sarà simile al seguente:

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;

Una volta generato il file, puoi includerlo nel tuo programma. È importante modificare la dichiarazione dell'array in const per una migliore efficienza della memoria sulle piattaforme incorporate.

Per un esempio di come includere e utilizzare un modello nel tuo programma, vedi hello_world_test.cc nell'esempio Hello World.

Architettura e addestramento del modello

Quando si progetta un modello da usare sui microcontroller, è importante considerare le dimensioni del modello, il carico di lavoro e le operazioni utilizzate.

Dimensione modello

Un modello deve essere abbastanza piccolo da poter essere inserito nella memoria del dispositivo di destinazione insieme al resto del programma, sia in formato binario sia in fase di runtime.

Per creare un modello più piccolo, nella tua architettura puoi utilizzare meno livelli e livelli più piccoli. Tuttavia, i modelli di piccole dimensioni hanno maggiori probabilità di soffrire di un underfitting. Questo significa che, per molti problemi, ha senso provare a utilizzare il modello più grande che possa stare in memoria. Tuttavia, l'uso di modelli più grandi comporta anche un aumento del carico di lavoro del processore.

Carico di lavoro

Le dimensioni e la complessità del modello hanno un impatto sul carico di lavoro. Modelli di grandi dimensioni e complessi potrebbero comportare un ciclo di lavoro più elevato, ovvero il processore del dispositivo trascorre più tempo al lavoro e meno tempo inattivo. Ciò aumenta il consumo energetico e la produzione di calore, che potrebbe essere un problema a seconda dell'applicazione.

Assistenza per le operazioni

TensorFlow Lite per microcontroller al momento supporta un sottoinsieme limitato di operazioni di TensorFlow, il che influisce sulle architetture dei modelli che è possibile eseguire. Stiamo lavorando per espandere il supporto delle operazioni, sia in termini di implementazioni di riferimento che di ottimizzazioni per architetture specifiche.

Le operazioni supportate sono visibili nel file micro_mutable_ops_resolver.h