1. Panoramica

Lo scopo di questo articolo è presentare il pacchetto Python pyvar di Variscite e mostra come iniziare a utilizzare l’API Machine Learning (ML) di pyvar. Questa API è stata progettata per aiutare gli utenti alle prime armi a esplorare il campo ML e a sviluppare le proprie applicazioni utilizzando telecamere, display e interfacce utente, mirando ai System on Module (SoM) alimentati dalla famiglia i.MX8.

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

Prima di esplorare il pacchetto pyvar e acquisire maggiori informazioni sul suo nucleo e mostrare alcuni esempi, ci soffermeremo brevemente su alcuni problemi principali: l’acceleratore hardware AI, la formazione e quantizzazione del modello. La comprensione di questi argomenti dovrebbe aiutare 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 i.MX8 SOC di NXP, l’i.MX8M Plus è dotato di un acceleratore AI dedicato, che gestisce in modo efficiente il processo di inferenza ML: questo engine computazionale è chiamato Neural Processing Unit (NPU). Il pacchetto pyvar non è strettamente legato alla NPU: con l’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 stessa 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 due i modi possibili per quantizzare un modello in modo che funzioni correttamente sulla NPU. Il primo consiste nell’addestrare il proprio modello applicando il metodo di addestramento consapevole della quantizzazione (QAT) durante la fase di addestramento, mentre 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 il 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 nella 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 XP. Inoltre, fornisce utili lezioni multimediali per aiutare gli utenti principianti a 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 scritti 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 pyvar.dev.