1. Panoramica

Lo scopo di questo articolo è presentare il pacchetto Python pyvar di Variscite e mostrare come iniziare a utilizzare le API di Machine Learning (ML) di pyvar. Queste API sono state progettate per aiutare gli utenti alle prime armi ad esplorare il campo del ML e a sviluppare le proprie applicazioni utilizzando telecamere, display e interfacce utente, focalizzandosi sui System on Module (SoM) dalla famiglia i.MX8.

Se è la prima volta che esplorate questo ambito, per familiarizzare con AI/ML e i suoi esempi di applicazione, vi suggeriamo di leggere il seguente articolo:

Prima di esplorare il pacchetto pyvar e acquisire maggiori informazioni sulla sua struttura e mostrare alcuni esempi, ci soffermeremo brevemente su alcuni importanti aspetti: l’acceleratore hardware di Artificial Intelligence (AI), la formazione e quantizzazione del modello. La comprensione di questi argomenti aiuta a comprendere come funziona il machine learning su sistemi embedded e probabilmente consentirà di ottenere le migliori performance di inferenza per le vostre applicazioni di machine learning.

Per quanto riguarda la famiglia dei SOC i.MX8 di NXP, l’i.MX8M Plus è dotato di un acceleratore AI dedicato, che gestisce in modo efficiente il processo di inferenza ML: questo motore computazionale è chiamato Neural Processing Unit (NPU). Il pacchetto pyvar non è strettamente legato alla NPU: con le API ML è possibile usare qualsiasi altro SoM della famiglia i.MX8; la differenza è che il processo di inferenza utilizza la GPU o la CPU, anziché la NPU, e questo potrebbe, probabilmente, implicare un tempo di inferenza più lungo.

La NPU gestisce operazioni a virgola fissa a 8 bit, il che si traduce nella possibilità di disporre di un modello ML con unità aritmetiche semplici e piccole, evitando calcoli con virgola mobile più grandi. Per utilizzare le capacità di calcolo della NPU e ottenere le migliori prestazioni di inferenza possibili, i modelli di rete a virgola mobile a 32 bit devono essere convertiti in modelli di reti a virgola fissa a 8 bit.

Questa conversione è nota come quantizzazione e sono disponibili due possibili approcci per quantizzare un modello affinchè funzioni correttamente con la NPU. Il primo consiste nell’addestrare il modello tenendo in considerazione la quantizazione (QAT) già in fase di addestramento. Il secondo, che è più semplice, consiste nell’utilizzare un metodo post-addestramento che converta solo un modello addestrato nel formato richiesto dalla NPU. Il processo di conversione sarà discusso nei prossimi post del blog.

Il pacchetto pyvar è in licenza ai sensi dei termini BSD-3-Clause, il che significa che il suo utilizzo è gratuito e che l’utente può modificarlo a suo piacimento, fintanto che conserva l’avviso di copyright. È importante menzionare che questo pacchetto è ancora in fase di sviluppo e che noi vi invitiamo a contribuire al progetto.

2. Primi passi con Pyvar

2.1 Configurazione BSP

  1. Configurare l’ultima Release Yocto usando la distro fsl-imx-xwayland (con funzioni Wayland + X11) e creare l’immagine fsl-image-qt5 che include già i pacchetti ML; in alternativa, se si preferisce un’immagine più piccola come quella fsl-image-gui, allora per aggiungere i pacchetti ML basterà seguire le seguenti istruzioni:
    a. aggiungere i pacchetti Machine Learning al file conf:
OPENCV_PKGS_imxgpu = " \ 
       opencv-apps \ 
       opencv-samples \ 
       python3-opencv \ 
" 
IMAGE_INSTALL_append = " \ 
    packagegroup-imx-ml \ 
    ${OPENCV_PKGS} \ 
" 
  1. Avviare la scheda usando l’immagine create (ad esempio, scrivendola su una scheda SD).

2.2 Installazione del Pacchetto Python di Variscite

Il pacchetto pyvar è ospitato e disponibile nel repository PyPi (https://pypi.org), la quale consente all’utente di installare facilmente il pacchetto seguendo le seguenti istruzioni:

  1. Nella scheda target, installare il pacchetto pyvar usando lo strumentopip3:
# pip3 install pyvar 
  1. Per assicurarsi che il pacchetto sia installato, eseguire il seguente commando per controllare la versione:
# pip3 list | grep pyvar 

Per maggiori informazioni, visitare la pagina “pyvar – primi passi”.

3. PyVar API

Il pacchetto pyvar implementa le più comuni funzionalità di ML abilitate da eIQ® ML Software Development Environment di NXP. Inoltre, fornisce utili classi multimediali per aiutare gli sviluppatori ad implementare applicazioni ML e a rendere la creazione dei loro codici il più semplice possibile.

Ecco un paio di esempi di moduli pyvar:

  • ml.engines gestisce gli engine di inferenza come as TensorFlow Lite Arm NN:
1 from pyvar.ml.engines.tflite import TFLiteInterpreter 
2 engine = TFLiteInterpreter(model_file_path=”path_to_your_model”) 

Per maggiori informazioni, si prega di visitare la pagina “pyvar Machine Learning API”.

  • multimedia gestisce casi multimediali come file video, fotocamere e dispositivi:
1 from pyvar.multimedia.helper import Multimedia 
2 multimedia = Multimedia(source=”path_to_video_file_or_camera_device”) 

Per maggiori informazioni, si prega di visitare la pagina “pyvar Multimedia API”.

3.1 Brevi esempi scritti con PyVar

Gli esempi descritti in questo articolo usano modelli quantizzati addestrati di TensorFlow Lite. Questi esempi sono stati inseriti per aiutare l’utente a comprendere come si scrive un semplice codice esplorando più casi di utilizzo con moduli PyVar. Gli esempi possono essere scaricati ed eseguiti sul target.

L’esempio sottostante usa un modulo starter di TensorFlow e esegue l’inferenza su un’immagine usando TensorFlow Lite come engine di inferenza:

# curl -LJO \ 
https://github.com/varigit/pyvar/raw/master/examples/ml/detection/image_detection_tflite.py 
# python3 image_detection_tflite.py 

Altri comuni esempi di ML scritti usando pyvar:

Per maggiori informazioni, si prega di consultare la documentazione complete di Python API di Variscite, disponibile su python.variscite.com.