Lo Stack reVision accelera lo sviluppo delle applicazioni di visione embedded

Pubblicato il 20 Lug 2017

adas

di Nick Ni Senior Product Manager, Embedded Vision and SDSoC di Xilinx, e Adam Taylor, consulente esperto in sistemi embedded

Le tecnologie di visione embedded sono onnipresenti in diversi mercati e di applicazioni, dai sistemi di assistenza alla guida dei veicoli (ADAS) alla robotica guidata, all’imaging medicale e alla realtà aumentata. L’ampiezza della penetrazione della tecnologia di visione embedded nei vari segmenti di mercato è impressionante. Nella maggior parte di queste applicazioni la sequenza di elaborazione delle immagini a valle è molto simile. Tale sequenza contiene funzioni come l’interfacciamento dei sensori d’immagine/delle videocamere e la ricostruzione dell’immagine in un formato idoneo per ulteriori elaborazioni.

Gli algoritmi comunemente usati per l’elaborazione a valle sono la ricostruzione dei colori (Filtro di Bayer), la conversione dello spazio dei colori e gli algoritmi di riduzione del rumore. È negli algoritmi specifici per un’applicazione che le differenze fra le applicazioni diventano evidenti. Ed è nell’implementazione di questi ultimi che lo sviluppatore dedica tempo e sforzi significativi. Questi algoritmi applicativi sono spesso complessi da realizzare e usano tecniche quali il rilevamento e la classificazione degli oggetti, il filtraggio e le operazioni computazionali. Sempre più spesso questi sono sviluppati usando piattaforme open source come OpenCV e Caffe. L’uso di tali ambienti open source consente allo sviluppatore di soluzioni di visione embedded di concentrarsi sull’implementazione dell’algoritmo. L’uso delle funzioni predefinite fornite e dell’IP in esse contenuto fa sì che non si debba partire da zero, il che riduce significativamente il tempo di sviluppo.

Le sfide

In relazione all’applicazione, le sfide affrontate dal progettista non riguardano solo la modalità con cui sono realizzati gli algoritmi desiderati. Lo sviluppatore di una soluzione di visione embedded deve anche affrontare le sfide legate all’applicazione e al suo ambiente, considerando al contempo le tendenze future del mercato.

Queste ultime includono l’elaborazione e la presa di decisioni all’interfaccia, poiché le applicazioni di visione embedded sono sempre più spesso autonome e non possono dipendere da una connessione al cloud. Un esempio di ciò sarebbero i sistemi robotici con funzioni di visione, che devono elaborare e agire su informazioni raccolte dai propri sensori per navigare all’interno del proprio ambiente. Molte applicazioni inoltre realizzano la sensor fusion, fondendo numerose modalità sensore diverse per fornire una migliore comprensione dell’ambiente e un ulteriore ausilio nella presa delle decisioni, portando con sé requisiti maggiori di elaborazione. A causa della rapida evoluzione sia della tecnologia dei sensori, sia degli algoritmi di elaborazione delle immagini, il sistema deve anche essere in grado di essere aggiornato per supportare gli ultimi requisiti della roadmap dei prodotti. La crescita delle applicazioni autonome e remote inoltre porta con sé le sfide legate alla dissipazione di calore efficiente e alla sicurezza, al fine di impedire tentativi di modifiche non autorizzate. 

I sistemi Xilinx

Per rispondere a queste sfide, gli sviluppatori usano i System on Chip (SoC) interamente programmabili di Xilinx e i Sistemi Multiprocessore su Chip (MPSoC) delle famiglie di dispositivi Zynq-7000 e di MPSoC Zynq UltraScale+ per realizzare la propria soluzione. Questi dispositivi forniscono processori ad alte prestazioni strettamente accoppiati con la logica programmabile, consentendo allo sviluppatore del sistema di visione embedded di ottimizzare la propria soluzione.

L’uso dei dispositivi SoC Zynq o dei dispositivi MPSoC Zynq UltraScale+ consente allo sviluppatore di trarre vantaggio dalla connettività universale che si ottiene con l’uso della logica programmabile. Quest’ultima può anche eseguire la sequenza (o le sequenze) di elaborazione delle immagini, assicurando un aumento delle prestazioni grazie alla sua natura parallela. Il ricorso alla logica programmabile aumenta le prestazioni di sistema, la connettività e le prestazioni per watt di potenza dissipata, fornendo nel complesso una soluzione più efficiente.

Le unità di elaborazione possono essere usate per funzionalità di applicazioni di livello più alto, come la presa di decisioni basata sulle informazioni fornite e la comunicazione fra i sistemi e con il cloud.

In risposta alle preoccupazioni per la sicurezza che si hanno con le applicazioni autonome e remote, entrambe le famiglie di prodotti forniscono un ambiente sicuro con il supporto all’avvio sicuro con crittografia e la tecnologia ARM Trust Zone all’interno del processore, e la capacità di implementare le funzionalità antimanomissione.

L’uso dei dispositivi Zynq-7000 e degli MPSoC Zynq UltraScale+ fornisce una capacità significativa agli sviluppatori di sistemi di visione embedded, consentendo di far fronte alle sfide e alle tendenze del mercato. Per sfruttare queste capacità è richiesto un ecosistema di sviluppo che consenta allo sviluppatore di sistemi di visione embedded di sfruttare non solo i vantaggi legati all’uso di questi dispositivi, ma anche di fornire la capacità di usare ancora gli ambienti di uso comune all’interno della propria soluzione. Qui entra in gioco lo Stack reVision.

Lo stack reVision

Lo stack reVision è stato sviluppato per consentire agli sviluppatori di sistemi di visione embedded di far fronte alle quattro sfide chiave qui sopra identificate, che sono evidenti nel campo della visione embedded. Queste sfide possono essere riassunte come reattività, riconfigurabilità, connettività e definizione via software. Per rispondere a queste quattro tendenze determinanti, lo Stack reVision combina un’ampia gamma di risorse che consentono lo sviluppo di piattaforme, applicazioni e algoritmi. Come tale, lo stack è allineato su tre livelli distinti:

  1. Livello di piattaforma. Questo è il livello più basso dello stack ed è quello su cui sono costruiti i restanti strati dello stack. Come tale esso fornisce sia una definizione hardware della configurazione del dispositivo Zynq-7000 / dell’MPSoC Zynq UltraScale+ , sia la definizione del software attraverso un sistema operativo personalizzato per supportare la definizione dell’hardware. Quest’ultima può definire la configurazione di una scheda per lo sviluppo o di una scheda pronta per la produzione come ad esempio un System on Module. È nell’ambito della definizione hardware che vengono definite le interfacce del sensore e del sistema.  La piattaforma hardware sarà catturata usando Vivado HLX, e potrebbe fare uso dei blocchi IP sia di Xilinx, sia di fornitori terzi, oltre a ricorrere alla sintesi di alto livello per creare IP specifico. Questo strato fornirà se richiesto anche i driver software per i moduli IP e una configurazione PetaLinux aggiornata, per supportare l’ambiente definito via software a un livello più alto.
  2. Il livello intermedio dello stack è chiamato strato dell’algoritmo. Lo sviluppo su questo livello  ha luogo all’interno dell’ambiente SDSoC™ basato su Eclipse. SDSoC è un compilatore per l’ottimizzazione a livello di sistema che consente lo sviluppo attraverso un ambiente definito via software. Essenzialmente, quando sviluppiamo i nostri algoritmi software, è possibile identificare e rimuovere i colli di bottiglia accelerando le funzioni all’interno della logica programmabile. Per l’utente questo processo è immediato, usando una combinazione di sintesi ad alto livello e di una piattaforma per la connettività per spostare una funzione dall’esecuzione via software verso la sua implementazione in logica programmabile. È a questo livello che è usato OpenCV per implementare gli algoritmi di elaborazione delle immagini per l’applicazione in questione. Per ridurre i colli di bottiglia identificati all’interno dell’algoritmo di elaborazione delle immagini, reVision fornisce un’ampia gamma di funzioni OpenCV pronte per l’accelerazione. È anche fornito il supporto a questo livello per le librerie di reti neurali più comuni, incluse AlexNet, GoogLeNet, SqueezeNet, SSD e FCN.
  3. Lo strato finale è il livello di sviluppo dell’applicazione, ed è là dove gli ambienti ad alto livello come Caffe e OpenVX sono usati per completare l’applicazione, implementando le funzionalità di presa delle decisioni, ad esempio. Le applicazioni a questo livello sono sviluppate usando un ambiente basato su eclipse, e sono pensate per le unità di elaborazione all’interno dei SoC Zynq-7000/ MPSoC Zynq UltraScale+.
Figura 1 – Stack reVision

Le funzionalità fornite dallo stack reVision forniscono tutti gli elementi necessari per creare applicazioni di imaging ad alte prestazioni in un’ampia gamma di applicazioni, dall’internet delle cose in campo industriale alla robotica guidata dalla visione e oltre.

L’accelerazione di OpenCV

Uno degli aspetti più interessanti dello stack reVision è la capacità di accelerare un’ampia gamma di funzioni OpenCV all’interno dello strato di sviluppo dell’algoritmo. All’interno di questo strato, le funzioni OpenCV in grado di essere accelerate possono essere raggruppate in una fra quattro categorie ad alto livello.

  1. Calcolo – Include funzioni come la differenza assoluta fra due fotogrammi, le operazioni a livello di pixel (aggiunta, sottrazione e moltiplicazione), il gradiente e le operazioni di integrale
  2. Elaborazione degli ingressi – Fornisce il supporto per le conversioni della profondità dei bit, le operazioni sui canali, l’equalizzazione dell’istogramma, la rimappatura e il ridimensionamento
  3. Filtraggio – Fornisce il supporto per un’ampia gamma di filtri, inclusi i filtri Sobel, di convoluzione personalizzata e Gaussiani
  4. Altro – Fornisce una vasta gamma di funzioni, incluso il rilevamento dei bordi con operatore Canny/Fast/Harris, l’impostazione delle soglie e i classificatori SVM e HoG

Gli sviluppatori possono usare queste funzioni per creare una sequenza algoritmica all’interno della logica programmabile del dispositivo selezionato. Essere in grado di implementare la logica in questo modo aumenta in modo significativo le prestazioni di esecuzione dell’algoritmo.

Naturalmente, essendo queste librerie OpenCV con funzioni di accelerazione definite via software e supportando la sintesi ad alto livello, esse possono anche essere usate all’interno del tool Vivado HLS. Questo consente la creazione di moduli IP che possono essere usati all’interno dello strato della piattaforma quando la definizione dell’hardware è ultimata.

Un algoritmo comunemente usato in OpenCV è l’implementazione dell’operatore di Harris per la rilevazione degli angoli all’interno di un’immagine. All’interno dello Stack reVision, esiste una funzione definita per la rilevazione degli angoli con l’operatore Harris. Quando si confrontano le prestazioni della rilevazione degli angoli con operatore Harris accelerata dallo stack reVision rispetto ad un’implementazione tradizionale con OpenCV come illustrato qui sotto, entrambe forniscono prestazioni identiche. Tuttavia, usando la funzione di rilevazione degli angoli con operatore Harris in reVision accelerata in logica programmabile, l’utente ottiene un aumento nelle prestazioni di sistema che consente di realizzare una soluzione più reattiva e più efficiente energeticamente.

Figura 2 – Rilevazione degli angoli con operatore Harris in OpenCV con accelerazione
Figura 3 – Implementazione tradizionale con OpenCV

Con lo stack reVision, se gli sviluppatori scelgono di accelerare le funzioni OpenCV, possono ottimizzare il progetto in base all’uso di risorse e alle prestazioni all’interno della logica programmabile. Il principale metodo attraverso cui si ottiene si basa sul numero di pixel che sono elaborati durante ogni ciclo di clock. Per gran parte delle funzioni accelerate, gli sviluppatori possono scegliere di elaborare un singolo pixel o otto pixel. L’elaborazione di più pixel per ciclo di clock aumenterà l’utilizzo di risorse richieste, riducendo tuttavia il tempo di elaborazione. L’elaborazione di un pixel per ciclo di clock assicurerà requisiti ridotti relativamente alle risorse, al prezzo di un aumento della latenza. Tale scelta del numero dei pixel per clock è configurata attraverso la chiamata alla funzione, e fornisce un metodo molto semplice per ottimizzare il progetto come richiesto.

Con le prestazioni del progetto ottimizzate usando le librerie OpenCV con funzioni di accelerazione, lo sviluppatore di un sistema di visione embedded può quindi sviluppare i livelli superiori dell’applicazione, usando le funzionalità fornite dagli strati dell’Algoritmo e di Applicazione dello stack.

Conclusione

L’uso dei dispositivi Zynq-7000 e degli MPSoC Zynq UltraScale+ all’interno delle applicazioni di visione embedded introduce diversi vantaggi in termini di flessibilità, prestazioni, sicurezza/protezione ed elaborazione energeticamente efficiente. Lo sviluppo di un’applicazione all’interno dello stack reVision consente di utilizzare diversi ambienti standard di uso comune, portando con sé una riduzione dei tempi di sviluppo e un time-to-market più rapido.

Valuta la qualità di questo articolo

Redazione

Innovation Post è un portale di informazione e approfondimento dedicato alle politiche e alle tecnologie per l'innovazione nel settore manifatturiero. Il portale è nato alla fine di settembre 2016 e si è affermato come riferimento d’elezione per chi vuole informarsi su industria 4.0, automazione, meccatronica, Industrial IT, Cyber security industriale, ricerca e formazione, domotica e building automation. Innovation Post è una testata del Network Digital360 diretta da Franco Canna

email Seguimi su

Articoli correlati

Articolo 1 di 4