I microcontrollori hanno RAM e spazio di archiviazione limitati, il che pone vincoli alle dimensioni dei modelli di apprendimento automatico. Inoltre, TensorFlow Lite per microcontrollori attualmente supporta un sottoinsieme limitato di operazioni, quindi non tutte le architetture di 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 per adattarsi a una memoria limitata.
Per un esempio eseguibile end-to-end di creazione e conversione di un modello, vedere il seguente Colab che fa parte dell'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 di TensorFlow Lite.
Per ottenere la dimensione del modello più piccola possibile, dovresti considerare l'utilizzo della quantizzazione post-allenamento .
Converti in un array C
Molte piattaforme di microcontroller non hanno il supporto del filesystem nativo. 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 di 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;
Dopo aver 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.
Architettura del modello e formazione
Quando si progetta un modello da utilizzare su 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 adattarsi alla memoria del dispositivo di destinazione insieme al resto del programma, sia come binario che in fase di esecuzione.
Per creare un modello più piccolo, puoi utilizzare livelli sempre più piccoli nella tua architettura. Tuttavia, è più probabile che i modelli piccoli soffrano di underfitting. Ciò significa che per molti problemi ha senso provare a utilizzare il modello più grande che si adatta alla memoria. Tuttavia, l'utilizzo di modelli più grandi comporterà anche un aumento del carico di lavoro del processore.
Carico di lavoro
La dimensione e la complessità del modello influiscono sul carico di lavoro. Modelli grandi e complessi potrebbero comportare un ciclo di lavoro più elevato, il che significa che il processore del dispositivo trascorre più tempo a lavorare e meno tempo inattivo. Ciò aumenterà il consumo di energia e la produzione di calore, il che potrebbe essere un problema a seconda dell'applicazione.
Supporto operativo
TensorFlow Lite per microcontrollori attualmente supporta un sottoinsieme limitato di operazioni TensorFlow, che influisce sulle architetture del modello che è possibile eseguire. Stiamo lavorando per ampliare il supporto operativo, sia in termini di implementazioni di riferimento che di ottimizzazioni per architetture specifiche.
Le operazioni supportate possono essere visualizzate nel file all_ops_resolver.cc