Costruisci e converti modelli

I microcontrollori hanno RAM e spazio di archiviazione limitati, il che pone vincoli sulle dimensioni dei modelli di apprendimento automatico. Inoltre, TensorFlow Lite per microcontrollori attualmente supporta un sottoinsieme limitato di operazioni, quindi non tutte le architetture del modello sono possibili.

Questo documento spiega il processo di conversione di un modello TensorFlow per l'esecuzione su microcontrollori. Descrive inoltre le operazioni supportate e fornisce alcune indicazioni sulla progettazione e l'addestramento di un modello da adattare alla memoria limitata.

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

Conversione del modello

Per convertire un modello TensorFlow addestrato per l'esecuzione su microcontroller, è necessario utilizzare l' API Python del convertitore TensorFlow Lite . Ciò convertirà il modello in un FlatBuffer , riducendo le dimensioni del modello e modificandolo per utilizzare le operazioni TensorFlow Lite.

Per ottenere la dimensione del modello più piccola possibile, dovresti prendere in considerazione l'utilizzo della quantizzazione post-training .

Convertire in un array C

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

Il seguente comando unix genererà un file sorgente C che contiene il modello TensorFlow Lite come 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 integrate.

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

Architettura del modello e formazione

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

Dimensioni del modello

Un modello deve essere sufficientemente piccolo da poter essere contenuto nella memoria del dispositivo di destinazione insieme al resto del programma, sia come binario che in fase di runtime.

Per creare un modello più piccolo, puoi utilizzare livelli sempre più piccoli nella tua architettura. Tuttavia, i modelli piccoli hanno maggiori probabilità di soffrire di sottodimensionamento. Ciò significa che per molti problemi ha senso provare a utilizzare il modello più grande che possa essere contenuto nella memoria. Tuttavia, l'utilizzo di modelli più grandi comporterà anche un aumento del carico di lavoro del processore.

Carico di lavoro

Le dimensioni e la complessità del modello influiscono sul carico di lavoro. I modelli grandi e complessi potrebbero comportare un ciclo di lavoro più elevato, il che significa che il processore del tuo dispositivo trascorre più tempo a lavorare e meno tempo inattivo. Ciò aumenterà il consumo energetico e la produzione di calore, il che potrebbe rappresentare un problema a seconda dell'applicazione.

Supporto all'operazione

TensorFlow Lite per microcontrollori attualmente supporta un sottoinsieme limitato di operazioni TensorFlow, che influiscono sulle architetture del modello che è possibile eseguire. Stiamo lavorando per espandere il supporto operativo, sia in termini di implementazioni di riferimento che di ottimizzazioni per architetture specifiche.

Le operazioni supportate possono essere visualizzate nel file micro_mutable_ops_resolver.h

,

I microcontrollori hanno RAM e spazio di archiviazione limitati, il che pone vincoli sulle dimensioni dei modelli di apprendimento automatico. Inoltre, TensorFlow Lite per microcontrollori attualmente supporta un sottoinsieme limitato di operazioni, quindi non tutte le architetture del modello sono possibili.

Questo documento spiega il processo di conversione di un modello TensorFlow per l'esecuzione su microcontrollori. Descrive inoltre le operazioni supportate e fornisce alcune indicazioni sulla progettazione e l'addestramento di un modello da adattare alla memoria limitata.

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

Conversione del modello

Per convertire un modello TensorFlow addestrato per l'esecuzione su microcontroller, è necessario utilizzare l' API Python del convertitore TensorFlow Lite . Ciò convertirà il modello in un FlatBuffer , riducendo le dimensioni del modello e modificandolo per utilizzare le operazioni TensorFlow Lite.

Per ottenere la dimensione del modello più piccola possibile, dovresti prendere in considerazione l'utilizzo della quantizzazione post-training .

Convertire in un array C

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

Il seguente comando unix genererà un file sorgente C che contiene il modello TensorFlow Lite come 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 integrate.

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

Architettura del modello e formazione

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

Dimensioni del modello

Un modello deve essere sufficientemente piccolo da poter essere contenuto nella memoria del dispositivo di destinazione insieme al resto del programma, sia come binario che in fase di runtime.

Per creare un modello più piccolo, puoi utilizzare livelli sempre più piccoli nella tua architettura. Tuttavia, i modelli piccoli hanno maggiori probabilità di soffrire di sottodimensionamento. Ciò significa che per molti problemi ha senso provare a utilizzare il modello più grande che possa essere contenuto nella memoria. Tuttavia, l'utilizzo di modelli più grandi comporterà anche un aumento del carico di lavoro del processore.

Carico di lavoro

Le dimensioni e la complessità del modello influiscono sul carico di lavoro. I modelli grandi e complessi potrebbero comportare un ciclo di lavoro più elevato, il che significa che il processore del tuo dispositivo trascorre più tempo a lavorare e meno tempo inattivo. Ciò aumenterà il consumo energetico e la produzione di calore, il che potrebbe rappresentare un problema a seconda dell'applicazione.

Supporto all'operazione

TensorFlow Lite per microcontrollori attualmente supporta un sottoinsieme limitato di operazioni TensorFlow, che influiscono sulle architetture del modello che è possibile eseguire. Stiamo lavorando per espandere il supporto operativo, sia in termini di implementazioni di riferimento che di ottimizzazioni per architetture specifiche.

Le operazioni supportate possono essere visualizzate nel file micro_mutable_ops_resolver.h