I microcontroller hanno RAM e spazio di archiviazione limitati, il che pone vincoli al dimensioni dei modelli di machine learning. Inoltre, LiteRT per Al momento i microcontroller supportano un sottoinsieme limitato di operazioni, quindi non tutti sono possibili.
Questo documento spiega il processo di conversione di un modello TensorFlow da eseguire i microcontroller. Descrive inoltre le operazioni supportate e fornisce alcune indicazioni sulla progettazione e l'addestramento di un modello in modo che rientri in una memoria limitata.
Per un esempio end-to-end eseguibile di creazione e conversione di un modello, consulta la Hello World esempio.
Conversione del modello
Per convertire un modello TensorFlow addestrato in modo da eseguirlo su microcontroller, devi usare
il
API Python converter LiteRT.
Questo convertirà il modello in
FlatBuffer
, riducendo le dimensioni del modello,
e la modifichiamo per usare le operazioni LiteRT.
Per ottenere la dimensione del modello più piccola possibile, considera l'uso di quantizzazione post-addestramento.
Converti in un array C
Molte piattaforme di microcontroller non dispongono del supporto nativo per il file system. La il modo più semplice per utilizzare un modello del tuo programma è includerlo come array C e lo inserisci nel tuo programma.
Il seguente comando unix genererà un file di origine C che contiene
Modello LiteRT 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 programma. È
è importante modificare la dichiarazione dell'array in const
per migliorare la memoria
dell'efficienza 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 il resto del programma, sia in formato binario sia in runtime.
Per creare un modello più piccolo, puoi utilizzare sempre meno strati nella dell'architettura. Tuttavia, i modelli di piccole dimensioni hanno maggiori probabilità di soffrire di underfitting. Ciò significa che per molti problemi ha senso provare a usare il modello più grande che rientrano in memoria. Tuttavia, l'utilizzo di modelli più grandi comporta anche di lavoro del processore.
Carico di lavoro
Le dimensioni e la complessità del modello hanno un impatto sul carico di lavoro. Grande e complesso potrebbero comportare un ciclo di servizio più elevato, il che significa che il processore è passare più tempo a lavorare e meno tempo inattivo. Questo aumenterà la potenza consumo e potenza termica, che potrebbe essere un problema a seconda del un'applicazione.
Assistenza per le operazioni
LiteRT per microcontroller attualmente supporta un sottoinsieme limitato di Operazioni di TensorFlow, che influiscono sulle architetture dei modelli possibili eseguire. Stiamo lavorando per estendere il supporto delle operazioni, sia in termini di implementazioni di riferimento e ottimizzazioni per architetture specifiche.
Le operazioni supportate sono visibili nel file
micro_mutable_ops_resolver.h