Comprendere la libreria C++

La libreria TensorFlow Lite for Microcontrollers C++ 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 seguente documento delinea la struttura di base della libreria C++ e fornisce informazioni sulla creazione del proprio progetto.

Struttura dei file

La directory micro 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 sorgente rilevanti in modo isolato all'interno di vari ambienti di sviluppo incorporati.

File chiave

I file più importanti per l'utilizzo dell'interprete TensorFlow Lite for Microcontrollers si trovano nella root del progetto, accompagnati dai test:

[`micro_mutable_op_resolver.h`](https://github.com/tensorflow/tflite-micro/blob/main/tensorflow/lite/micro/micro_mutable_op_resolver.h)
can be used to provide the operations used by the interpreter to run the
model.

Vedi Introduzione ai microcontrollori per una panoramica dell'utilizzo tipico.

Il sistema di compilazione prevede implementazioni specifiche della piattaforma di determinati file. Questi si trovano in una directory con il nome della piattaforma, ad esempio cortex-m .

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 utilizzi Arduino, l'esempio Hello World è incluso nella libreria Arduino_TensorFlowLite Arduino, che puoi installare manualmente nell'IDE di Arduino e in Arduino Create .

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

Genera progetti per altre piattaforme

TensorFlow Lite per microcontrollori è in grado di generare progetti autonomi 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, clona il repository TensorFlow/tflite-micro ed esegui il seguente comando:

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

L'operazione richiederà alcuni minuti, poiché deve 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 sistema operativo host). Queste cartelle contengono il progetto generato e i 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 suoi test unitari, utilizzare il seguente comando:

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 Makefile del progetto. Ad esempio, examples/hello_world/Makefile.inc specifica i nomi dei test per l'esempio Hello World .

Costruisci binari

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

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

Ad esempio, il comando seguente creerà un file 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= e TARGET_ARCH= . L'esempio seguente mostra come costruire l'esempio Hello World per un generico cortex-m0:

make -f tensorflow/lite/micro/tools/make/Makefile TARGET=cortex_m_generic TARGET_ARCH=cortex-m0 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/cortex_m_generic contiene le implementazioni SparkFun Edge dei file constants.cc e output_handler.cc , che verranno utilizzati quando viene specificato il target cortex_m_generic .

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.

Versioni ottimizzate dei kernel sono fornite nelle sottodirectory. Ad esempio, kernels/cmsis-nn contiene diversi kernel ottimizzati che fanno uso della 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 indicazioni sul porting di TensorFlow Lite per microcontroller su nuove piattaforme e dispositivi sono disponibili in micro/docs/new_platform_support.md .