$$\rightleftharpoonup{xx}$$
$$\longleftharp{xx}$$,
$$\longrightharp{xx}$$,
Implementação de detecção de pedestres no HLS
A Figura 4 mostra os resultados da simulação na ferramenta HLS para a detecção de pedestres usando HoG + SVM. Uma imagem de entrada com um pedestre é fornecida como entrada de teste ao código, e a saída com os pedestres detectados é exibida. A imagem tem duas seções. A primeira detecção apresenta muitas caixas delimitadoras ao redor do mesmo pedestre repetidas vezes, e na segunda imagem, as caixas sobrepostas são removidas e suprimidas, restando apenas as caixas principais de detecção.

Figura 4: Resultado da simulação da ferramenta HLS. (A,B) Duas imagens de entrada diferentes e as imagens resultantes com os pedestres detectados. Por favor, clique aqui para ver uma versão ampliada desta figura.
A ferramenta HLS também fornece relatórios de síntese para o momento e a utilização de recursos. O resumo de tempo destaca o período de tempo exigido pelo projeto e fornece os valores máximos e mínimos de latência em termos do número de ciclos. Essas informações são úteis para estimar quanto tempo o projeto leva para ser executado e qual deve ser a frequência do clock ao passar para a implementação de hardware propriamente dita. A Tabela 2 abaixo mostra o relatório de tempo após a síntese HLS, que mostra claramente que o período de clock alvo foi de 6 ns e o projeto levou 5,25 ns, que é menor que o alvo, e portanto o período pode ser 6ns ou mais, mas não abaixo de 5 ns.
| Resumo do Tempo |
| Relógio | Alvo | Estimado |
| 6,00 ns | 5.250 ns |
| Resumo de Utilização |
| Total / Disponível | Percentual de Utilização |
| BRAM18K | 22 / 432 | 5% |
| DSP48E | 13 / 360 | 3% |
| FF | 5611/ 141120 | 3% |
| LUT | 9904/ 70560 | 14% |
| URAM | 0 | 0 |
Tabela 2: Estimado de tempo e relatório de utilização de recursos da ferramenta HLS para detecção de pedestres usando HoG-SVM.
A Tabela 2 também mostra o relatório de utilização. Ele mostra a porcentagem de utilização de recursos importantes de FPGA a bordo, conforme a placa alvo selecionada. Para esse projeto de detecção de pedestres, o relatório de utilização mostra que o projeto consome 14% das tabelas de consulta (LUTs), 3% dos Flip Flops (FFs), 3% do processamento digital de sinal (DSP) e 5% da memória de acesso aleatório em bloco (BRAM). Essas estimativas não são os relatórios exatos de utilização, mas os relatórios reais são próximos dessas estimativas. Essas são apenas as estimativas que podem ser calculadas pelas ferramentas HLS. A implementação real geralmente é muito diferente dessas estimativas.
A implementação real resulta da programação por hardware
Após o código ser mapeado em um IP, que é importado na ferramenta de programação FPGA, e o design ser implementado no hardware real do FPGA, vários relatórios também são gerados. A primeira é o resumo de tempo, que mostra se a frequência de clock fornecida ao projeto é suficiente ou não. Se todas as restrições de tempo forem cumpridas e não houver violações, então o projeto pode prosseguir. A Tabela 3 abaixo mostra o resumo de tempos gerado pela ferramenta. Como mostrado na tabela, o resumo de tempo indica a pior folga negativa, que é 4,073 ns. Como esse valor é positivo, indica que esse tempo ainda está disponível. Valores negativos indicam que o FPGA está demorando mais para concluir a tarefa, e o relógio está correndo rápido. Já que nesse caso não há valores negativos, o que significa que as restrições de tempo foram cumpridas.
| Resumo do Tempo de Projeto |
| Configuração | Segura | Largura do Pulso |
| Pior Folga Negativa 4.073 ns | Pior Folga de Seguração 0,010 ns | Pior largura de pulso: folga 3.500 ns |
Tabela 3: Resumo real do tempo para detecção de pedestres na placa FPGA.
Além disso, a ferramenta mostra os relatórios de utilização de recursos, que são a utilização real dos recursos a bordo conforme a placa FPGA selecionada. Neste caso, a placa selecionada é a placa de desenvolvimento FPGA27 baseada em Zynq UltraScale+ MPSoC (Multi-Processor System On Chip). A Tabela 4 abaixo mostra a utilização de recursos e a Figura 5 mostra a representação diagramática da utilização dos recursos.
O resumo de utilização indica o consumo real dos recursos a bordo, dado que existem 8 IPS HoG usados em paralelo, e as estimativas reportadas pela síntese HLS foram para um único IP HoG. Mas mesmo após um uso tão extenso, a utilização de cada recurso é inferior a 50%. A Tabela 4 indica claramente a utilização em relação aos diversos recursos e sua porcentagem de utilização, representada pictorialmente na Figura 5.
| Recurso | Utilização | Disponível | Percentual de utilização |
| 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% |
Tabela 4: Relatório de utilização real para detecção de pedestres no quadro FPGA.

Figura 5: Utilização de recursos para detecção de pedestres na placa FPGA após a implementação real. Consulte tabelas (LUT): 57%, LUTRAM: 25%, Flip flops (FF): 24%, RAM em bloco (BRAM): 31%, Processadores digitais de sinal (DSP): 36%, Buffers: 1%. Por favor, clique aqui para ver uma versão ampliada desta figura.
O terceiro relatório trata das estimativas de potência da placa para a quantidade de consumo de energia pelo projeto. A Figura 6 abaixo mostra o relatório de consumo de energia, que mostra que a potência total no chip é de 2,435 W. A temperatura da junção e a energia consumida por cada rede e componente importantes também são mostrados. As medições de energia não destacam nenhum consumo alarmante de energia, e portanto o projeto pode ser considerado eficiente em energia.

Figura 6: Estimativa de potência para detecção de pedestres na placa FPGA após a implementação real. O relatório de energia gerado pelas ferramentas mostra a potência total consumida como 2,435 W e também mostra a distribuição da potência entre os diversos recursos na placa FPGA. Por favor, clique aqui para ver uma versão ampliada desta figura.
Outra análise é feita para entender a vantagem de usar 8 IPs HoG em vez de um único IP HoG ou mais de 8 no diagrama de blocos criado, como mostrado na Figura 3. As métricas de desempenho relacionadas ao hardware foram calculadas tanto para um único IP HoG quanto para 8 IPs HoG em paralelo. A Tabela 5 abaixo mostra a comparação.
| Métrica de Desempenho | 1 IP | 8 IPs |
| Temporização (ns) | 5.312 | ~5,25 |
| Frequência (MHz) | 188 | 150 |
| Potência (W) | 1.9 | 2.43 |
| LUTs | 4998 | 40536 |
| FF / Registradores | 4,031 | 33,342 |
| DSP | 16 | 128 |
| BRAM | 8.5 | 68 |
| FPS | ~10–11 | 83 |
Tabela 5: Comparação de métricas de desempenho usando IPs HoG únicos versus múltiplos.
A Tabela 5 indica claramente que, quando os recursos são considerados como os LUTs, FFs, DSPs e BRAM, então, com um único IP HoG e 8 IPs HoG, a escalabilidade é linear com quase 8 vezes aumento nos recursos utilizados. Isso é claramente esperado, já que mais IPs levarão a mais recursos sendo consumidos. Além disso, se a frequência for observada, então a frequência máxima também degrada ligeiramente em 20% de 188 MHz para 150 MHz. Isso também é esperado, pois mais blocos levam a mais conexões e, portanto, a caminhos mais longos, causando aumento de caminhos críticos. Mas os fatores vantajosos como quadros por segundo (FPS) melhoram de 10 para 83, demonstrando escalonamento não linear no caso de FPS devido ao conceito introduzido de paralelismo, devido a 8 IPs HoG. Além disso, a potência varia de 1,9 W para 2,4 W, indicando melhor eficiência energética por meio do pipeline. Assim, essa análise indica claramente que a introdução de IPs HoG 8 é benéfica para o projeto, e escalar além de 8 pode causar consumo excessivo de recursos; assim, o número de blocos além de 8 não é considerado favorável.
Resultados da detecção de pedestres após a implementação do FPGA
Por fim, todo o sistema é integrado à placa FPGA, e o arquivo de fluxo de bits é gerado, que é então programado na placa através do cartão SD iniciado com capacidade de programação em Python. Uma vez que a placa é inicializada com o cartão SD, a interface jupyter pode ser acessada e o código Python pode ser escrito e executado na plataforma. O código Python é executado e testado para detecção de pedestres em diferentes imagens de entrada. O resultado de algumas imagens é mostrado na Figura 7 abaixo. Essas imagens são utilizadas do conjunto de dados INRIA, bem como imagens aleatórias de pedestres obtidas de fontes onlinede código aberto 26,27.

Figura 7: Resultados da detecção de pedestres em imagens estáticas via FPGA Board. As imagens testadas incluem imagens do conjunto de dados INRIA, imagens de código aberto disponíveis no Google para testar a precisão da detecção em ruas lotadas da Índia. Por favor, clique aqui para ver uma versão ampliada desta figura.
O sistema também é testado em captura de quadros em tempo real por meio de uma câmera web e na detecção dos pedestres no quadro, assim como é testado em entradas de vídeo já gravadas de pedestres. Os resultados para isso estão representados nas Figuras 8 e 9. A Figura 8 mostra um conjunto de exemplos capturados pela câmera web e os resultados da detecção de pedestres em cada quadro, enquanto a Figura 9 mostra os resultados da detecção de pedestres implementados em um vídeo de entrada fornecido ao sistema.

Figura 8: Resultados da detecção de pedestres em um quadro capturado por uma câmera em tempo real através da placa FPGA. Captura em tempo real de vídeo através da câmera web 720 P e demonstração da detecção em tempo real de pedestres. As imagens borradas são causadas à medida que são tiradas fotos do vídeo ao vivo em andamento. Por favor, clique aqui para ver uma versão ampliada desta figura.

Figura 9: Resultados da detecção de pedestres em vídeos fornecidos como entrada para a placa FPGA. Os vídeos foram retirados de links open source. Por favor, clique aqui para ver uma versão ampliada desta figura.
Estimativa de métricas de desempenho
Para calcular a eficiência e analisar o desempenho do projeto implementado acima, é essencial calcular métricas de desempenho que sejam úteis para avaliar o desempenho. As métricas de desempenho para detectar a eficiência de um algoritmo de detecção dependem basicamente dos valores de verdadeiros positivos (TP), verdadeiros negativos (TN), falsos positivos (FP) e falsos negativos (FN). A partir desses valores, métricas de desempenho como precisão, recordação, pontuação F1, falsos positivos por imagem e precisão podem ser calculadas conforme as equações abaixo. Foi observado que a maioria dos artigos de pesquisa relata seu desempenho de detecção através do parâmetro de precisão. Mas foi observado que o cálculo de precisão que envolve o uso de TN pode ser um parâmetro enganoso, pois o valor de TN não pode ser calculado corretamente no sentido verdadeiro, pois envolve encontrar a contagem de todas as janelas de detecção em uma imagem que na verdade não tem um pedestre, e o algoritmo implementado também reporta que não há detecções. Esse número geralmente é muito grande, pois o número total de janelas de detecção em uma imagem é grande, e as áreas de fundo em cada imagem geralmente correspondem a regiões sem pedestres. Ao observar de perto a fórmula de precisão mostrada nas equações [1] – [5], pode-se perceber que, como o valor de TN será bastante alto em comparação com TP+FP+FN, o parâmetro de precisão geralmente tem um valor alto. Para avaliar verdadeiramente o desempenho, é muito melhor reportar métricas como precisão, recordação e pontuação F1 que não dependem do TN e, portanto, são muito mais precisas.
[1]
[2]
[3]
[4]
[5]
Para encontrar os valores de TP, TN e FN para este artigo, o experimento nas imagens estáticas foi repetido em um enorme número de imagens. A partir dos resultados de cada imagem, foi calculado o valor dos verdadeiros positivos, que é o número de pedestres detectados corretamente, falsos positivos, o número de pedestres detectados incorretamente e falsos negativos, que são os pedestres reais que não foram detectados. Os seguintes valores foram reportados após os experimentos realizados e estão mostrados na Tabela 6 abaixo.
| Métrica de Desempenho | Valor |
| TP | 143 |
| FP | 39 |
| FN | 19 |
| Precison | 0.786 (78.6%) |
| Recall | 0.883 (88.3%) |
| Placar da F1 | 0.831 (83.1%) |
| FPPI | 0.867 |
Tabela 6: Métricas de desempenho para o algoritmo de detecção de pedestres baseado em FPGA implementado.
A Tabela 6 acima descreve assim a precisão do algoritmo de detecção de pedestres por meio das várias métricas de desempenho, precisão, recordação, pontuação F1 e FPPI, quando o algoritmo é implementado na plataforma de hardware.
Comparação de desempenho com implementações HoG baseadas em FPGA existentes
Por fim, o trabalho executado pode ser comparado com a literatura anterior para indicar contribuições significativas dessa pesquisa. Essa comparação está representada na Tabela 715, 16, 17, 21, 24abaixo. Os artigos com os quais a comparação é feita são todos baseados em aplicações de detecção de pedestres implementadas em plataformas FPGA, e os algoritmos usados para essas detecções também são os mesmos para todos, que é HoG combinado com um classificador, que é um classificador Adaboost ou SVM. O tamanho da imagem também é o mesmo para cada um (640 × 480). A comparação é feita com base em parâmetros como a frequência do clock, que afeta a velocidade, os quadros por segundo, o consumo de energia e a utilização de recursos em termos de LUTs, DSPs, Memória, Fatias e Registradores. Para induzir uma comparação justa, os artigos de pesquisa considerados para comparação têm resolução de imagem semelhante e, para normalizar a comparação de recursos, toda utilização de recurso é normalizada dividindo o número de recursos consumidos pelo total de recursos disponíveis de acordo com a placa FPGA utilizada.
| Referência | Tamanho da Imagem | Placa FPGA | Frequência de Clock | Quadros por segundo (FPS) | Energia | Pixels /clock | LUTs (%) | DSP48s (%) | BRAMs /Bits de memória (%) | Caixas/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 |
| ESSA OBRA | 640 x 480 | Ultra 96 v2 | 150 MHz | 83 | 2,435W | 0.0632 | 57 | 35 | 31 | 24 |
Tabela 7: Comparação de parâmetros e desempenho para implementações de detecção de pedestres em FPGA
Como visível na Tabela 7 acima, pode-se notar que, quando a implementação nesta pesquisa é comparada com os trabalhos anteriores, as comparações apresentam melhorias significativas em termos de velocidade. A placa FPGA é capaz de operar em uma frequência de clock de 150 MHz, o que indica que o período de tempo para completar toda a tarefa é inferior a 6 ns. Embora alguns trabalhos anteriores relatem significativamente mais FPS, por meio de uma análise cuidadosa, pode-se analisar que essa vantagem tem um custo maior de consumo de energia, bem como a utilização quase completa de certos recursos. Se o consumo de energia for considerado, então neste trabalho a potência reportada também é menor e as utilizações de recursos sugerem que o consumo de cada recurso é ligeiramente maior do que certas implementações, mas igual ou inferior a 50% (57% LUTs, 35% DSPs e 31% BRAM), o que mostra espaço significativo para mais tarefas a serem implementadas neste projeto. No geral, pode-se afirmar que o trabalho implementado neste artigo alcança um equilíbrio entre desempenho, energia e utilização de recursos. Além disso, o trabalho apresentado demonstrou paralelismo escalável através de múltiplos blocos de IP sem afetar drasticamente os parâmetros de desempenho.
Arquivo Suplementar 1: Script_1_train_test.py.Por favor, clique aqui para baixar este arquivo.
Arquivo Suplementar 2: Script_2_HLS_hog.cpp. Por favor, clique aqui para baixar este arquivo.
Arquivo Suplementar 3: Script_3_HLS_test_bench.cpp. Por favor, clique aqui para baixar este arquivo.
Arquivo Suplementar 4: Script_4_HLS_consts.h.Por favor, clique aqui para baixar este arquivo.
Arquivo Suplementar 5: Script_5_jupyter_code.txt.Por favor, clique aqui para baixar este arquivo.