Utilizzare un modulo a basso costo e MicroPython per creare rapidamente dispositivi di visione e ascolto basati sull'intelligenza artificiale

Di Stephen Evanczuk

Contributo di Editori nordamericani di DigiKey

Per andare incontro al crescente desiderio di prodotti connessi intelligenti, gli sviluppatori ricorrono sempre più spesso a metodi di intelligenza artificiale (IA) come l'apprendimento automatico (ML). Spesso, però, si trovano di fronte a una scelta hardware difficile. Possono basare i loro progetti su processori per uso generale che sono economici ma mancano delle prestazioni richieste da algoritmi complessi, oppure possono utilizzare soluzioni specializzate che offrono alte prestazioni ma fanno salire i costi e la complessità del progetto.

Ora esistono però anche altre opzioni. Questo articolo descrive un'alternativa di Seeed Technology, più semplice e meno costosa, grazie alla quale gli sviluppatori possono implementare soluzioni ad alte prestazioni basate su IA utilizzando il noto linguaggio di programmazione MicroPython.

Approcci di apprendimento automatico

Il successo degli algoritmi ML (apprendimento automatico) ha attirato l'attenzione degli sviluppatori alla ricerca di approcci più efficaci per il rilevamento di oggetti e il riconoscimento vocale in un'ampia gamma di applicazioni. Tra questi algoritmi, le reti neurali convoluzionali (CNN) hanno dimostrato di possedere le capacità di riconoscimento altamente accurato richiesto nelle applicazioni di visione artificiale e ascolto. Di conseguenza, CNN e reti neurali profonde (DNN) simili hanno trovato una crescente applicazione nei progetti di elettronica personale, nei dispositivi indossabili e in Internet delle cose (IoT).

Per le applicazioni con requisiti di inferenza CNN modesti, gli sviluppatori possono implementare soluzioni di successo utilizzando librerie di software di reti neurali in esecuzione su processori per uso generale con architetture a istruzione singola, dati multipli (SIMD) ed estensioni di elaborazione dei segnali digitali (DSP) (vedere "Creare un'applicazione di apprendimento automatico con un Raspberry Pi").

Se i requisiti sono più esigenti, possono realizzare progetti basati su CNN più potenti utilizzando FPGA (array di porte programmabili sul campo) che incorporano blocchi DSP ad alte prestazioni in grado di accelerare gli algoritmi ML (vedere "Utilizzare gli FPGA per creare applicazioni di visione embedded ad alte prestazioni con l'apprendimento automatico").

I progetti ML basati su processore sono in genere più semplici da implementare rispetto a quelli ML basati su FPGA, ma la complessità matematica dei modelli CNN di solito rallenta l'inferenza delle soluzioni basate su processore. Le soluzioni basate su FPGA possono utilizzare l'implementazione hardware delle fasi di elaborazione chiave per accelerare le prestazioni di inferenza, ma i requisiti di sviluppo possono ostacolare l'implementazione in tempi rapidi delle soluzioni ottimizzate.

Il modulo Sipeed MAIX-I 114991684 di Seeed Technology offre agli sviluppatori una soluzione alternativa in grado di accelerare l'implementazione di soluzioni di inferenza CNN ad alte prestazioni in prodotti intelligenti e dispositivi di edge computing.

Modulo di elaborazione CNN ad alte prestazioni

Il modulo MAIX-1 combina un processore dual-core ad alte prestazioni, un microcontroller Wi-Fi ESP8285 di Espressif Systems, una memoria flash seriale da 128 Mbit W25Q128FW di Winbond, un regolatore di tensione e un connettore per antenne IPEX. Il modulo MAIX-I 114991695 di Sipeed, una versione wireless, è privo del microcontroller ESP8285. Progettato per accelerare un'ampia gamma di carichi di lavoro dell'applicazione, il processore dual-core integra una coppia di processori RISC-V a 64 bit con unità a virgola mobile (FPU) e acceleratori per modelli CNN, elaborazione audio, crittografia e il calcolo della trasformata di Fourier veloce (FFT) (Figura 1).

Schema del modulo MAIX-I di Seeed TechnologyFigura 1: Il modulo MAIX-I di Seeed Technology combina un microcontroller wireless, una memoria flash, un regolatore di tensione c.c. e un connettore per antenne IPEX con un processore dual-core ad alte prestazioni e acceleratori per l'elaborazione della rete neurale convoluzionale (CNN) e altre funzioni. (Immagine per gentile concessione di Seeed Technology)

Oltre a 8 MB di memoria statica ad accesso casuale (SRAM) e a 128 kbit di memoria programmabile una sola volta (OTP), il processore dual-core integra un set completo di interfacce tra cui una porta per un display a cristalli liquidi (LCD) e una porta video digitale (DVP) per una videocamera. Gli sviluppatori possono utilizzare il multiplatore di array IO programmabile sul campo (FPIOA) del processore per mappare 255 funzioni interne sulle 48 porte IO per uso generale (GPIO) disponibili.

Gli acceleratori e la funzionalità integrata del processore supportano una serie di requisiti per i tipici progetti di prodotti intelligenti. Ad esempio, l'unità di elaborazione audio (APU) supporta fino a otto microfoni e include un proprio acceleratore FFT da 512 punti dedicato. Anche con solo queste funzionalità APU, gli sviluppatori possono utilizzare in modo efficiente array di microfoni per implementare il rilevamento direzionale del beamforming audio usato nelle interfacce vocali per i prodotti intelligenti. Per funzionalità dell'interfaccia vocale come la riattivazione con frasi chiave, possono invece utilizzare l'uscita audio pre-elaborata dall'APU per comandare l'acceleratore CNN integrato del processore.

Acceleratore CNN

Il modulo Sipeed MAIX-I è dotato di numerose capacità, la più caratteristica delle quali è rappresentata dall'acceleratore CNN integrato nel processore dual-core del modulo. Progettato per accelerare l'elaborazione delle singole funzioni del kernel su cui poggiano le CNN, il processore della rete neurale, qui denominato "KPU" (unità di elaborazione del kernel), fornisce implementazioni hardware di convoluzione, normalizzazione in batch, attivazione e pooling delle funzioni del kernel che comprendono i singoli livelli dei modelli di CNN (vedere "Primi passi nell'apprendimento automatico utilizzando hardware e software già disponibili").

Grazie a queste capacità, gli sviluppatori possono realizzare progetti a basso consumo che utilizzano le CNN per riconoscere le frasi di attivazione vocale nelle interfacce audio o rilevare e classificare gli oggetti in applicazioni basate sulla visione. Di fatto, la KPU può utilizzare la SRAM integrata del processore per eseguire l'inferenza in tempo reale servendosi di modelli di inferenza CNN a punto fisso fino a 5,9 MB o modelli in virgola mobile prequantizzati fino a 11,8 MB. Nelle applicazioni di visione artificiale, ad esempio, la KPU esegue l'inferenza a una velocità superiore a 30 fotogrammi al secondo utilizzando il tipo di frame di immagine relativamente piccolo impiegato per il riconoscimento facciale o di oggetti in prodotti intelligenti. Per applicazioni non in tempo reale, gli sviluppatori possono servirsi della flash esterna per gestire le dimensioni del modello; in questo caso la limitazione è data solo dalla capacità della flash.

Internamente, la KPU esegue modelli di inferenza usando un buffer first-in, first-out (FIFO) per elaborare in sequenza ogni livello di un tipico modello CNN (Figura 2, in alto). Per ogni livello, la KPU legge i parametri e i dati del modello dalla sua SRAM su chip o dalla sua flash esterna ed esegue la funzione kernel di quel livello usando la funzione kernel accelerata associata (Figura 2, in basso). Un meccanismo di richiamo integrato in questa pipeline di elaborazione dei livelli consente agli sviluppatori di eseguire le proprie routine via via che l'hardware della KPU completa ogni sequenza di elaborazione.

Schema di esecuzione dell'inferenza; l'intero task della KPU comprende più livelliFigura 2: Quando esegue l'inferenza, l'intero task della KPU (in alto) comprende più livelli, ognuno dei quali comporta l'esecuzione delle funzioni del kernel appropriate (in basso). (Immagine per gentile concessione di Seeed Technology)

Piattaforme di sviluppo

La KPU risolve la complessità dell'esecuzione dell'algoritmo CNN nascosta dietro il suo hardware dedicato. Per gli sviluppatori, Seeed semplifica la complessità dello sviluppo basato su CNN con una combinazione di offerte hardware e pacchetti software. Oltre al modulo MAIX-I, gli sviluppatori possono valutare e sviluppare rapidamente progetti basati su MAIX-I utilizzando schede di Seeed che offrono maggiori funzionalità.

A livello base, il kit di sviluppo 110991188 di Seeed combina un modulo MAIX-I montato su una scheda base con un display LCD da 2,4 pollici e una videocamera fisheye OV2640 114991881 di Seeed. Il kit 110991189 di Seeed offre le stesse funzionalità della versione non Wi-Fi del modulo MAIX-I.

Per lo sviluppo di prototipi, la scheda di valutazione 102991150 Bit di Seeed è dotata di un modulo MAIX-I su una scheda specifica per la sperimentazione. Il kit 110991190 MAIX-I Bit di Seeed Technology combina la scheda di valutazione Bit, un display da 2,4 pollici, una videocamera OV2640 e una coppia di basette per collegare la scheda Bit a una basetta sperimentale.

Per lo sviluppo di applicazioni più complesse, il kit della scheda 110991191 Sipeed MAIX Go di Seeed combina il modulo MAIX-I con un microcontroller STM32F103C8 di STMicroelectronics, una videocamera, un microfono I2S, un altoparlante, la gestione di batterie al litio, uno slot MicroSD e diversi connettori di interfaccia (Figura 3). Collegando il display LCD da 2,8 pollici incluso sul retro della scheda, gli sviluppatori possono utilizzare efficacemente il kit come piattaforma per un sistema video digitale basato sull'intelligenza artificiale.

Immagine della scheda Sipeed MAIX Go di Seeed TechnologyFigura 3: La scheda Sipeed MAIX Go, una delle varie schede MAIX di Seeed Technology, combina il modulo MAIX-I con un microcontroller STM32F103C8 di STMicroelectronics, una videocamera, un display e diverse interfacce per offrire un sistema di imaging standalone per il riconoscimento di oggetti. (Immagine per gentile concessione di Seeed Technology)

Le schede offrono una soluzione autonoma per molti requisiti dei prodotti intelligenti e il loro supporto per MicroPython le rende facili da usare. La combinazione delle schede Sipeed di Seeed e di MicroPython permette agli sviluppatori di avvalersi di un approccio più semplice per realizzare prodotti smart basati sull'intelligenza artificiale.

Sviluppo rapido con MicroPython

MicroPython è stato creato per fornire un sottoinsieme ottimizzato del linguaggio di programmazione Python per microcontroller con vincoli di risorse. Con il suo supporto diretto per l'accesso all'hardware, MicroPython introduce nello sviluppo di software di sistema integrato la relativa semplicità dello sviluppo basato su Python.

Invece delle librerie C, gli sviluppatori utilizzano il noto meccanismo di importazione di Python per caricare le librerie richieste. Ad esempio, possono importare semplicemente il modulo della macchina MicroPython per accedere all'interfaccia I2C, ai timer e non solo di un microcontroller. Per i progetti che fanno uso di sensori di immagine, è possibile acquisire un'immagine importando il modulo del sensore e richiamando sensor.snapshot(), che restituisce un frame dal sensore di immagini.

Il progetto MaixPy di Seeed estende MicroPython con il supporto per il processore dual-core K210, cuore del modulo MAIX-I, e le relative schede di sviluppo. L'interprete MicroPython MaixPy, in esecuzione sul processore K210 del modulo MAIX-I, utilizza le funzionalità di MicroPython e moduli MaixPy specializzati come KPU MaixPy, che comprendono le funzionalità KPU del processore.

Per distribuire facilmente un'inferenza CNN, gli sviluppatori possono utilizzare MaixPy e il modulo KPU Di fatto, la libreria di modelli MaixHub di Seeed offre diversi modelli di CNN predefiniti per aiutarli a iniziare da subito con il modulo MAIX-I. Per scaricare i modelli, occorre specificare un ID macchina disponibile eseguendo una utility di generazione dell'ID sulla scheda MAIX.

Ad esempio, utilizzando il kit Sipeed MAIX Go di Seeed con l'LCD in dotazione, si può caricare un modello predefinito per il riconoscimento facciale. L'esecuzione dell'inferenza con il modello richiede solo poche righe di codice Python (Listato 1).

Copy
import sensor
import image
import lcd
import KPU as kpu
 
lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.run(1)
task = kpu.load(0x300000) # you need put model(face.kfpkg) in flash at address 0x300000
# task = kpu.load("/sd/face.kmodel")
anchor = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025)
a = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor)
while(True):
    img = sensor.snapshot()
    code = kpu.run_yolo2(task, img)
    if code:
        for i in code:
            print(i)
            a = img.draw_rectangle(i.rect())
    a = lcd.display(img)
a = kpu.deinit(task)

Listato 1: Agli sviluppatori servono solo poche righe di codice MicroPython per implementare l'inferenza utilizzando un modello di rete neurale che risiede nella flash. (Codice per gentile concessione di Seeed Technology)

Il modello predefinito implementa un tipo di CNN chiamato modello Yolo (You Only Look Once, ovvero si guarda solo una volta), che accelera l'inferenza utilizzando un'intera immagine durante l'addestramento e l'inferenza anziché una serie di finestre scorrevoli come avveniva con gli algoritmi di CNN precedenti. Ulteriori ottimizzazioni di Yolo sono incorporate nel modello "Tiny Yolo2" fornito nella libreria di modelli MaixHub. Come risultato si ottiene un modello ad alte prestazioni che consente il riconoscimento facciale in tempo reale su MAIX Go (Figura 4).

Immagine del riconoscimento facciale in tempo realeFigura 4: Utilizzando la scheda Sipeed MAIX Go, gli sviluppatori possono rapidamente esplorare il riconoscimento facciale in tempo reale integrato con uno speciale modello di inferenza CNN predefinito. (Immagine per gentile concessione di Seeed Technology)

L'inferenza è ovviamente solo la fase di implementazione del complesso processo di sviluppo del modello DNN e l'apparente semplicità di questo esempio può mascherare le sfide insite nell'implementazione di un modello efficace.

Per sviluppare un modello personalizzato, è necessario acquisire un set sufficientemente grande di campioni per l'addestramento del modello. Per l'addestramento si utilizza un framework di apprendimento profondo come TensorFlow per configurare un modello ed eseguire la formazione utilizzando i relativi dati.

Questi passaggi possono sembrare gravosi, ma l'ecosistema MAIX-I rende relativamente semplice distribuire l'inferenza.

Seeed mette a disposizione dei convertitori che consentono di convertire i modelli sviluppati in TensorFlow, Keras o Darknet nel formato kmodel speciale della KPU. Come per i modelli predefiniti scaricati dalla libreria dei modelli MaixHub, gli sviluppatori possono caricare i propri modelli personalizzati nel modulo MAIX-I e valutarne le prestazioni con MicroPython come indicato sopra.

Seeed fornisce anche kit di sviluppo software (SDK) per creare applicazioni software personalizzate nel linguaggio di programmazione C. SDK separati supportano applicazioni C standalone o basate sul sistema operativo in tempo reale RTOS.

Conclusione

La rapida diffusione di interfacce basate sul riconoscimento vocale e di immagini per prodotti intelligenti continua a suscitare l'interesse per l'uso di algoritmi di apprendimento automatico nei progetti con limitazioni di risorse che stanno alla base di questi prodotti. In passato, gli sviluppatori disponevano di poche opzioni efficaci per realizzare soluzioni semplici da implementare e abbastanza potenti da offrire funzionalità di apprendimento automatico in tempo reale.

Come è stato dimostrato, utilizzando il modulo MAIX-I e le relative schede di Seeed Technology, oggi possono invece implementare rapidamente modelli di inferenza su una piattaforma hardware in grado di fornire il riconoscimento in tempo reale di voce o oggetti dai dati di streaming audio o video.

DigiKey logo

Esonero della responsabilità: le opinioni, le convinzioni e i punti di vista espressi dai vari autori e/o dai partecipanti al forum su questo sito Web non riflettono necessariamente le opinioni, le convinzioni e i punti di vista di DigiKey o le sue politiche.

Informazioni su questo autore

Image of Stephen Evanczuk

Stephen Evanczuk

Stephen Evanczuk ha più di 20 anni di esperienza come autore sull'industria elettronica e ha scritto su una vasta gamma di argomenti tra cui hardware, software, sistemi e applicazioni, incluso l'IoT. Ha ricevuto un Ph.D. in neuroscienze sulle reti neuronali e ha lavorato nel settore aerospaziale su sistemi di sicurezza ampiamente distribuiti e sui metodi di accelerazione algoritmica. Attualmente, quando non scrive articoli su tecnologia e ingegneria, lavora su applicazioni di deep learning per i sistemi di riconoscimento e di raccomandazione.

Informazioni su questo editore

Editori nordamericani di DigiKey