Comprendere la libreria C++

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

La libreria C++ TensorFlow Lite for Microcontrollers fa parte del repository TensorFlow . È progettato per essere leggibile, facile da modificare, ben testato, facile da integrare e compatibile con il normale TensorFlow Lite.

Il documento seguente delinea la struttura di base della libreria C++ e fornisce informazioni sulla creazione del proprio progetto.

Struttura dei file

La directory micro root ha una struttura relativamente semplice. Tuttavia, poiché si trova all'interno dell'ampio repository TensorFlow, abbiamo creato script e file di progetto pregenerati che forniscono i file di origine pertinenti in isolamento all'interno di vari ambienti di sviluppo incorporati.

File chiave

I file più importanti per l'utilizzo dell'interprete TensorFlow Lite per microcontrollori si trovano nella radice del progetto, accompagnati da test:

  • all_ops_resolver.h o micro_mutable_op_resolver.h possono essere utilizzati per fornire le operazioni utilizzate dall'interprete per eseguire il modello. Poiché all_ops_resolver.h ogni operazione disponibile, utilizza molta memoria. Nelle applicazioni di produzione, dovresti usare micro_mutable_op_resolver.h per inserire solo le operazioni necessarie al tuo modello.
  • micro_error_reporter.h restituisce informazioni di debug.
  • micro_interpreter.h contiene il codice per gestire ed eseguire i modelli.

Vedere Introduzione ai microcontrollori per una procedura dettagliata sull'utilizzo tipico.

Il sistema di build prevede implementazioni specifiche della piattaforma di determinati file. Questi si trovano in una directory con il nome della piattaforma, ad esempio sparkfun_edge .

Esistono diverse altre directory, tra cui:

  • kernel , che contiene le implementazioni delle operazioni e il codice associato.
  • tools , che contiene gli strumenti di compilazione e il relativo output.
  • examples , che contiene codice di esempio.

Inizia un nuovo progetto

Ti consigliamo di utilizzare l'esempio Hello World come modello per nuovi progetti. Puoi ottenerne una versione per la tua piattaforma preferita seguendo le istruzioni in questa sezione.

Usa la libreria Arduino

Se stai usando Arduino, l'esempio Hello World è incluso nella libreria Arduino_TensorFlowLite Arduino, che puoi installare manualmente nell'IDE Arduino e in Arduino Create .

Una volta aggiunta la libreria, vai su File -> Examples . Dovresti vedere un esempio nella parte inferiore dell'elenco chiamato TensorFlowLite:hello_world . Selezionalo e fai clic su hello_world per caricare l'esempio. È quindi possibile salvare una copia dell'esempio e utilizzarla come base del proprio progetto.

Genera progetti per altre piattaforme

TensorFlow Lite for Microcontrollers è in grado di generare progetti standalone che contengono tutti i file sorgente necessari, utilizzando un Makefile . Gli ambienti attualmente supportati sono Keil, Make e Mbed.

Per generare questi progetti con Make, clonare il repository TensorFlow ed eseguire il comando seguente:

make -f tensorflow/lite/micro/tools/make/Makefile generate_projects

Ci vorranno alcuni minuti, dal momento che è necessario scaricare alcune grandi toolchain per le dipendenze. Una volta terminato, dovresti vedere alcune cartelle create all'interno di un percorso come gen/linux_x86_64/prj/ (il percorso esatto dipende dal tuo sistema operativo host). Queste cartelle contengono il progetto generato ei file di origine.

Dopo aver eseguito il comando, sarai in grado di trovare i progetti Hello World in gen/linux_x86_64/prj/hello_world . Ad esempio, hello_world/keil conterrà il progetto Keil.

Esegui i test

Per creare la libreria ed eseguire tutti i relativi unit test, utilizzare il comando seguente:

make -f tensorflow/lite/micro/tools/make/Makefile test

Per eseguire un singolo test, utilizzare il comando seguente, sostituendo <test_name> con il nome del test:

make -f tensorflow/lite/micro/tools/make/Makefile test_<test_name>

Puoi trovare i nomi dei test nei Makefiles del progetto. Ad esempio, examples/hello_world/Makefile.inc specifica i nomi dei test per l'esempio Hello World .

Costruisci binari

Per creare un binario eseguibile per un determinato progetto (come un'applicazione di esempio), utilizzare il comando seguente, sostituendo <project_name> con il progetto che si desidera creare:

make -f tensorflow/lite/micro/tools/make/Makefile <project_name>_bin

Ad esempio, il comando seguente creerà un binario per l'applicazione Hello World :

make -f tensorflow/lite/micro/tools/make/Makefile hello_world_bin

Per impostazione predefinita, il progetto verrà compilato per il sistema operativo host. Per specificare un'architettura di destinazione diversa, utilizzare TARGET= . L'esempio seguente mostra come creare l'esempio Hello World per SparkFun Edge:

make -f tensorflow/lite/micro/tools/make/Makefile TARGET=sparkfun_edge hello_world_bin

Quando viene specificata una destinazione, tutti i file di origine specifici della destinazione disponibili verranno utilizzati al posto del codice originale. Ad esempio, la sottodirectory examples/hello_world/sparkfun_edge contiene le implementazioni SparkFun Edge dei file constants.cc e output_handler.cc , che verranno utilizzati quando viene specificato il target sparkfun_edge .

Puoi trovare i nomi dei progetti nei Makefile del progetto. Ad esempio, examples/hello_world/Makefile.inc specifica i nomi binari per l'esempio Hello World .

kernel ottimizzati

I kernel di riferimento nella radice di tensorflow/lite/micro/kernels sono implementati in puro C/C++ e non includono ottimizzazioni hardware specifiche della piattaforma.

Le versioni ottimizzate dei kernel sono fornite nelle sottodirectory. Ad esempio, kernels/cmsis-nn contiene diversi kernel ottimizzati che utilizzano la libreria CMSIS-NN di Arm.

Per generare progetti utilizzando kernel ottimizzati, utilizzare il comando seguente, sostituendo <subdirectory_name> con il nome della sottodirectory contenente le ottimizzazioni:

make -f tensorflow/lite/micro/tools/make/Makefile TAGS=<subdirectory_name> generate_projects

Puoi aggiungere le tue ottimizzazioni creando una nuova sottocartella per loro. Incoraggiamo le richieste pull per nuove implementazioni ottimizzate.

Genera la libreria Arduino

Se è necessario generare una nuova build della libreria, è possibile eseguire il seguente script dal repository TensorFlow:

./tensorflow/lite/micro/tools/ci_build/test_arduino.sh

La libreria risultante può essere trovata in gen/arduino_x86_64/prj/tensorflow_lite.zip .

Porta su nuovi dispositivi

Le istruzioni per il porting di TensorFlow Lite per microcontrollori su nuove piattaforme e dispositivi sono disponibili in micro/docs/new_platform_support.md .