$$\rightleftharpoonup{xx}$$
$$\longleftharp{xx}$$,
$$\longrightharp{xx}$$,
Implementazione del rilevamento pedonale su HLS
La Figura 4 mostra i risultati della simulazione sullo strumento HLS per il rilevamento pedonale usando HoG + SVM. Un'immagine di input con un pedone viene fornita come input di prova al codice e viene visualizzata l'uscita con i pedoni rilevati. Ci sono due sezioni nell'immagine. La prima rilevazione mostra molte caselle di delimitazione attorno allo stesso pedone più e più volte, e nella seconda immagine le caselle sovrapposte vengono rimosse e soppresse, lasciando solo le caselle principali di rilevamento.

Figura 4: Risultato della simulazione dallo strumento HLS. (A,B) Due immagini di input diverse e le immagini risultanti con i pedoni rilevati. Clicca qui per visualizzare una versione più grande di questa figura.
Lo strumento HLS fornisce anche rapporti di sintesi per la tempistica e l'utilizzo delle risorse. Il riassunto temporale evidenzia il periodo di tempo richiesto dal progetto e fornisce i valori di latenza massimo e minimo in termini di numero di cicli. Queste informazioni sono utili per stimare quanto tempo richiede il progetto per essere eseguito e quale dovrebbe essere la frequenza di clock quando si passa all'implementazione hardware effettiva. La Tabella 2 sottostante mostra il rapporto temporale dopo la sintesi HLS, che mostra chiaramente che il periodo di clock target era di 6 ns e il progetto richiedeva 5,25 ns, che è meno del target, e quindi il periodo di tempo può essere di 6ns o superiore ma non inferiore a 5 ns.
| Riepilogo dei tempi |
| Orologio | Bersaglio | Sttime |
| 6,00 ns | 5.250 ns |
| Riepilogo dell'utilizzo |
| Totale / Disponibile | Percentuale di utilizzo |
| BRAM18K | 22 / 432 | 5% |
| DSP48E | 13 / 360 | 3% |
| FF | 5611/ 141120 | 3% |
| LUT | 9904/ 70560 | 14% |
| URAM | 0 | 0 |
Tabella 2: Stima del rapporto di tempistica e utilizzo delle risorse dallo strumento HLS per il rilevamento pedonale tramite HoG-SVM.
La Tabella 2 mostra anche il rapporto di utilizzo. Mostra la percentuale di utilizzo delle importanti risorse FPGA a bordo in base alla scheda target selezionata. Per questo progetto di rilevamento pedonale, il rapporto di utilizzo mostra che il progetto consuma il 14% delle tabelle di ricerca (LUT), il 3% dei Flip Flop (FF), il 3% dell'elaborazione digitale del segnale (DSP) e il 5% della memoria a blocchi di accesso casuale (BRAM). Queste stime non sono i rapporti di utilizzo esatti, ma i rapporti effettivi sono vicini a queste stime. Queste sono solo le stime che possono essere calcolate dagli strumenti HLS. L'implementazione effettiva è solitamente molto diversa da queste stime.
L'implementazione effettiva risulta dalla programmazione hardware
Dopo che il codice è stato mappato in un IP, che viene importato dallo strumento di programmazione FPGA, e il design implementato sull'hardware FPGA vero e proprio, vengono generati anche diversi report. Il primo è il riassunto del tempo, che mostra se la frequenza di clock fornita al progetto è sufficiente o meno. Se tutti i vincoli temporali sono soddisfatti e non ci sono violazioni, allora il progetto può procedere. La Tabella 3 qui sotto mostra il riepilogo dei tempi generato dallo strumento. Come mostrato nella tabella, il riepilogo temporale indica il peggior margine negativo, ovvero 4,073 ns. Poiché questo valore è positivo, indica che questo tempo è ancora disponibile. I valori negativi indicano che l'FPGA impiega più tempo per completare il compito e il clock scorre velocemente. Poiché in questo caso non ci sono valori negativi, il che significa che i vincoli temporali sono soddisfatti.
| Riepilogo dei tempi del progetto |
| Configurazione | Fermati | Larghezza dell'impulso |
| Peggiore Negative Slack 4.073 ns | Peggior Mantenimento Scarico 0,010 ns | Peggiore larghezza d'impulso: Slack 3.500 ns |
Tabella 3: Riepilogo effettivo dei tempi per il rilevamento pedoni sulla scheda FPGA.
Inoltre, lo strumento mostra i report di utilizzo delle risorse, che rappresentano l'effettivo utilizzo delle risorse a bordo secondo la scheda FPGA selezionata. In questo caso, la scheda selezionata è la scheda di sviluppo FPGA27 basata su Zynq UltraScale+ MPSoC (Multi-Processor System On Chip). La Tabella 4 qui sotto mostra l'utilizzo delle risorse e la Figura 5 mostra la rappresentazione diagrammatica dell'utilizzo delle risorse.
Il riepilogo dell'utilizzo indica il consumo effettivo delle risorse a bordo, dato che vengono utilizzati in parallelo 8 IP HoG, e le stime riportate dalla sintesi HLS erano per un singolo IP HoG. Ma anche dopo un uso così esteso, l'utilizzo delle risorse per ogni risorsa è inferiore al 50%. La Tabella 4 indica chiaramente l'utilizzo rispetto alle varie risorse e la loro percentuale di utilizzo, rappresentata in modo illustrato nella Figura 5.
| Risorsa | Utilizzo | Disponibile | Percentuale di utilizzo |
| LUT | 40536 | 70560 | 57.45% |
| LUTRAM | 7304 | 28800 | 25.36% |
| FF | 33342 | 141120 | 23.63% |
| BRAM | 68 | 216 | 31.48% |
| DSP | 128 | 360 | 35.56% |
| BUFG | 2 | 196 | 1.02% |
Tabella 4: Rapporto effettivo di utilizzo per il rilevamento dei pedoni sulla scheda FPGA.

Figura 5: Utilizzo delle risorse per il rilevamento pedoni sulla scheda FPGA dopo l'effettiva implementazione. Consulta le tabelle (LUT): 57%, LUTRAM: 25%, Flip flop (FF): 24%, RAM a blocchi (BRAM): 31%, Digital signal processors (DSP): 36%, Buffer: 1%. Clicca qui per visualizzare una versione più grande di questa figura.
Il terzo rapporto riguarda le stime di potenza della scheda per la quantità di consumo energetico del progetto. La Figura 6 qui sotto mostra il rapporto sui consumi energetici, che mostra che la potenza totale sul chip è di 2,435 W. Sono inoltre mostrate la temperatura della giunzione e l'energia consumata da ogni rete e componente importante. Le misurazioni di potenza non evidenziano alcun consumo allarmante e quindi il progetto può essere considerato efficiente dal punto di vista energetico.

Figura 6: stima della potenza per il rilevamento pedoni sulla scheda FPGA dopo l'implementazione effettiva. Il rapporto di potenza generato dagli strumenti mostra la potenza totale consumata come 2,435 W e mostra anche la distribuzione della potenza tra le varie risorse sulla scheda FPGA. Clicca qui per visualizzare una versione più grande di questa figura.
Un'altra analisi viene effettuata per comprendere il vantaggio di utilizzare 8 IP HoG invece di un singolo IP HoG o più di 8 nel diagramma a blocchi creato, come mostrato nella Figura 3. Le metriche di prestazione hardware sono state calcolate sia per un singolo IP HoG sia per 8 IP HoG in parallelo. La Tabella 5 qui sotto mostra il confronto.
| Metrica di Performanze | 1 IP | 8 IP |
| Tempismo (ns) | 5.312 | ~5.25 |
| Frequenza (MHz) | 188 | 150 |
| Potenza (W) | 1.9 | 2.43 |
| LUT | 4998 | 40536 |
| FF / Registri | 4,031 | 33,342 |
| DSP | 16 | 128 |
| BRAM | 8.5 | 68 |
| FPS | ~10–11 | 83 |
Tabella 5: Confronto delle metriche di performance usando IP HoG singoli e multipli.
La Tabella 5 indica chiaramente che, considerando le risorse come LUT, FF, DSP e BRAM, con un singolo IP HoG e 8 IP HoG, la scalabilità è lineare con un aumento di quasi 8 volte delle risorse utilizzate. Questo è chiaramente prevedibile, poiché più IP porteranno a un consumo maggiore di risorse. Inoltre, se la frequenza viene osservata, allora la frequenza massima si degrada leggermente del 20% da 188 MHz a 150 MHz. Questo è prevedibile, poiché più blocchi portano a più connessioni e quindi a percorsi più lunghi, causando un aumento dei percorsi critici. Ma i fattori vantaggiosi come i frame per secondo (FPS) migliorano da 10 a 83, dimostrando una scalatura non lineare nel caso degli FPS grazie al concetto introdotto di parallelismo, dovuto a 8 IP HoG. Inoltre, la potenza varia da 1,9 W a 2,4 W, indicando un miglioramento dell'efficienza energetica grazie alla tubazione. Pertanto, questa analisi indica chiaramente che l'introduzione di 8 IP HoG è vantaggiosa per il design, e la scalabilità oltre 8 può causare un sovraconsumo di risorse; quindi, il numero di blocchi oltre 8 non è considerato favorevole.
Risultati del rilevamento pedoni dopo l'implementazione dell'FPGA
Infine, l'intero sistema è integrato sulla scheda FPGA e viene generato il file bitstream, che viene poi programmato sulla scheda tramite la scheda SD avviata con la capacità di programmabilità Python. Una volta avviata la scheda con la scheda SD, l'interfaccia jupyter può essere accessibile e il codice Python può essere scritto ed eseguito sulla piattaforma. Il codice Python viene eseguito e testato per il rilevamento dei pedoni su diverse immagini di input. Il risultato di alcune immagini è mostrato nella Figura 7 qui sotto. Queste immagini sono utilizzate dal dataset INRIA così come da immagini casuali di pedoni ottenute da fonti onlineopen source 26,27.

Figura 7: Risultati del rilevamento pedoni su immagini statiche tramite FPGA Board. Le immagini testate includono immagini dal dataset INRIA, immagini open source disponibili su Google per verificare l'accuratezza della rilevazione nelle strade affollate dell'India. Clicca qui per visualizzare una versione più grande di questa figura.
Il sistema viene inoltre testato sulla cattura in tempo reale tramite una webcam e sulla rilevazione dei pedoni presenti nell'inquadratura, oltre a essere testato su input video già registrati dei pedoni. I risultati sono raffigurati nella Figura 8 e nella Figura 9. La Figura 8 mostra un insieme di frame di esempio catturati dalla webcamera e i risultati del rilevamento dei pedoni in ciascun fotogramma, mentre la Figura 9 mostra i risultati del rilevamento dei pedoni implementati su un video in ingresso fornito al sistema.

Figura 8: Risultati di rilevamento pedoni su un fotogramma catturato in tempo reale da una telecamera tramite la scheda FPGA. Cattura in tempo reale del video tramite webcam 720 P e dimostrazione della rilevazione in tempo reale dei pedoni. Le immagini sfocate sono causate da istantanee scattate dal video in diretta in corso. Clicca qui per visualizzare una versione più grande di questa figura.

Figura 9: Risultati di rilevamento pedoni nei video forniti come input al Board FPGA. I video sono stati scattati da link open source. Clicca qui per visualizzare una versione più grande di questa figura.
Stima delle metriche di performance
Per calcolare l'efficienza e analizzare le prestazioni del progetto implementato sopra, è essenziale calcolare metriche di performance utili per valutare le prestazioni. Le metriche di performance per rilevare l'efficienza di un algoritmo di rilevamento dipendono fondamentalmente dai valori dei veri positivi (TP), dei veri negativi (TN), dei falsi positivi (FP) e dei falsi negativi (FN). Da questi valori, le metriche di performance come precisione, richiamo, punteggio F1, falsi positivi per immagine e accuratezza possono essere calcolate secondo le equazioni riportate di seguito. È stato osservato che la maggior parte degli articoli di ricerca riporta le loro prestazioni di rilevamento tramite il parametro di precisione. Tuttavia, è stato osservato che il calcolo di precisione che coinvolge l'uso di TN può essere un parametro fuorviante, poiché il valore di TN non può essere calcolato correttamente in senso reale, poiché implica trovare il conteggio di tutte le finestre di rilevamento in un'immagine che in realtà non ha un pedone, e l'algoritmo implementato lo segnala anche come nessuna rilevazione. Questo numero è generalmente molto elevato, poiché il numero totale di finestre di rilevamento in un'immagine è ampio e le aree di sfondo in ogni immagine corrispondono solitamente a regioni senza pedoni. Osservando attentamente la formula di accuratezza mostrata nelle equazioni [1] – [5], si può capire che, poiché il valore di TN sarà piuttosto alto rispetto a TP+FP+FN, il parametro di precisione di solito ha un valore elevato. Per valutare davvero le prestazioni, è molto meglio riportare metriche come precisione, richiamata e punteggio F1 che non dipendono dal TN e quindi sono molto più accurate.
[1]
[2]
[3]
[4]
[5]
Per trovare i valori di TP, TN e FN per questo articolo, l'esperimento sulle immagini fisse è stato ripetuto su un enorme numero di immagini. Dai risultati di ogni immagine, è stato calcolato il valore dei veri positivi, cioè il numero di pedoni rilevati correttamente, i falsi positivi, il numero di pedoni rilevati erroneamente, e i falsi negativi, cioè i pedoni effettivamente non rilevati. I seguenti valori sono stati riportati dopo gli esperimenti eseguiti e sono mostrati nella Tabella 6 qui sotto.
| Metrica di Prestazioni | Valore |
| TP | 143 |
| FP | 39 |
| FN | 19 |
| Precison | 0.786 (78.6%) |
| Richiamo | 0.883 (88.3%) |
| Punteggio F1 | 0.831 (83.1%) |
| FPPI | 0.867 |
Tabella 6: Metriche di prestazione per l'algoritmo di rilevamento pedoni implementato basato su FPGA.
La Tabella 6 sopra descrive quindi l'accuratezza dell'algoritmo di rilevamento pedoni attraverso le varie metriche di prestazione, precisione, richiamo, punteggio F1 e FPPI, quando l'algoritmo è implementato sulla piattaforma hardware.
Confronto delle prestazioni con implementazioni HoG basate su FPGA esistenti
Infine, il lavoro eseguito può essere confrontato con la letteratura precedente per indicare eventuali contributi significativi di questa ricerca. Questo confronto è illustrato nella Tabella 715, 16, 17, 21, 24qui sotto. Gli articoli con cui viene effettuato il confronto si basano tutti su applicazioni di rilevamento pedoni implementate su piattaforme FPGA, e gli algoritmi utilizzati per queste rilevazioni sono anch'essi gli stessi per tutti, ovvero HoG combinato con un classificatore, che è o un classificatore Adaboost o SVM. La dimensione dell'immagine è anch'essa la stessa per ciascuno (640 × 480). Il confronto viene effettuato in base a parametri come la frequenza di clock che influenza la velocità, i frame al secondo, il consumo energetico e l'utilizzo delle risorse in termini di LUT, DSP, Memory, Slices e Registers. Per indurre un confronto equo, gli articoli di ricerca considerati per il confronto hanno una risoluzione dell'immagine simile e, per normalizzare il confronto delle risorse, ogni utilizzo delle risorse viene normalizzato dividendo il numero di risorse consumate per il numero totale di risorse disponibili secondo la scheda FPGA utilizzata.
| Riferimento | Dimensione dell'immagine | Scheda FPGA | Frequenza di clock | Fotogrammi al secondo (FPS) | Potenza | Pixel /clock | LUT (%) | DSP48 (%) | BRAMs /memoria Bit (%) | Registri/FF (%) |
| 15 | 640×480 | Xilinx Zynq | 82,2 MHz | 40 | - | 1 | 40 | 2 | 0 | - |
| 24 | 640×480 | Virtex 6 | 150 MHz | 10 | 19 W | | 39 | 53 | 22 | - |
| 16 | 640×480 | Ciclone V | 162 MHz | 526 | 9 W | 0.99 | 21 | 86 | 100 | 21 |
| 17 | 640×480 | Altera DE2-115 | 50 MHz | 129 | 3,6 W | - | 73 | - | 72 | 60 |
| 21 | 640×480 | Zync 7000 | 100 MHz | 240 | 1.6 W | - | 13 | 3 | 1 | 10 |
| QUESTO LAVORO | 640 x 480 | Ultra 96 v2 | 150 MHz | 83 | 2.435W | 0.0632 | 57 | 35 | 31 | 24 |
Tabella 7: Confronto di parametri e prestazioni per le implementazioni del rilevamento pedoni su FPGA
Come possibile nella Tabella 7 sopra, si può notare che quando l'implementazione in questa ricerca viene confrontata con i lavori precedenti, i confronti mostrano miglioramenti significativi in termini di velocità. La scheda FPGA è in grado di funzionare a una frequenza di clock di 150 MHz, il che indica che il periodo di tempo per completare l'intero compito è inferiore a 6 ns. Sebbene alcuni studi precedenti riportino un aumento significativo degli FPS, attraverso un'attenta analisi si può analizzare che questo vantaggio avviene a costo di un maggiore consumo energetico e di un utilizzo quasi completo di determinate risorse. Se si considera il consumo energetico, in questo lavoro anche la potenza dichiarata è inferiore e l'utilizzo delle risorse suggerisce che il consumo di ogni risorsa è leggermente superiore rispetto a certe implementazioni, ma uguale o inferiore al 50% (57% LUT, 35% DSP e 31% BRAM), il che mostra un margine significativo per ulteriori compiti da implementare in questo design. Nel complesso, si può affermare che il lavoro implementato in questo documento raggiunge un compromesso equilibrato tra prestazioni, energia e utilizzo delle risorse. Inoltre, il lavoro presentato ha mostrato un parallelismo scalabile attraverso più blocchi IP senza influire drasticamente sui parametri di prestazione.
Fascicolo supplementare 1: Script_1_train_test.py.Clicca qui per scaricare questo file.
File supplementare 2: Script_2_HLS_hog.cpp. Clicca qui per scaricare questo file.
Fascicolo supplementare 3: Script_3_HLS_test_bench.cpp. Clicca qui per scaricare questo file.
File supplementare 4: Script_4_HLS_consts.h.Clicca qui per scaricare questo file.
Fascicolo supplementare 5: Script_5_jupyter_code.txt.Clicca qui per scaricare questo file.