Detecção de Pedestres usando o OpenCV

On 6 de janeiro de 2017 by Thiago Urzedo

Detecção de pedestres

Carros autônomos precisam lidar com detecção de pedestres. Neste post vamos mostrar algumas técnicas de identifica-los usando OpenCV e analisar o desempenho dos mesmos quando executados em um Raspberry Pi 2 B, Wandboard Quad WB-EDM-IMX6 e Intel Edison.

Para as entradas dos algoritmos, foram utilizados a câmera Logitech HD Pro Webcam C920, 1073 imagens e um vídeo de 5:00 minutos das seguintes bases de dados:

Descrição dos métodos utilizados na Detecção de pedestres

O primeiro método testado para detecção de pedestres, foi a implementação do OpenCV do HOG (Histogram of Oriented Gradients), sem nenhuma outra técnica ou alteração. Fazendo uma explicação resumida, o método consiste em dividir a imagem de entrada em pequenas células (que normalmente variam de 4×4 a 32×32 pixels) e compara célula por célula com o seu descritor a fim de encontrar o objeto alvo (entre nesse link se quiser uma explicação mais detalhada). Este processo é bem demorado, devido ao fato de se ter que procurar em todas as células.

O segundo método testado foi o FPWD (The Fastest Pedestrian Detector in the West), que é um porte do código original em MATLAB para C++, feito por Andrea Pennisi baseado no paper:

P. Dollár, S. Belongie and P. Perona “The Fastest Pedestrian Detector in the West”, BMVC 2010.

Este método, além do OpenCV, usa a biblioteca Boost, OpenMP e instruções SSE (o que o torna impossível de ser executado em dispositivos com processadores arm).

O terceiro método testado foi o C4 (Real-Time Human Detection Using Contour Cues) que é uma adaptação do código original, feita por Suleyman Turkmen. O método é descrito no seguinte paper:

Real-Time Human Detection Using Contour Cues Jianxin Wu, Christopher Geyer, and James M. Rehg In: Proc. The 2011 IEEE Int’l Conference on Robotics and Automation (ICRA 2011), Shanghai, China, May 2011, pp. 860-867.

O autor da adaptação fez algumas alterações no código original, o que garantiu uma melhora em seu tempo de execução.

O quarto método testado foi o HF (Pedestrians detection using Hough forests), é um porte para o linux feito por Rodrigo Benenson do código original, fornecido por Olga Barinova from the Vision Group of Moscow State University, 2010. A pesquisa é descrita no paper:

Barinova O., Lempitsky V., Kohli P., On detection of multiple object instances using Hough transform, IEEE Conference on Computer Vision and Pattern Recognition (CVPR’10), 2010.

Além do OpenCV, esse método também utiliza a biblioteca Boost.

Resultado dos testes

HOG

De longe, esse método teve o pior desempenho de todos, sendo lento e pouco acurado se comparado aos demais. Quando as imagens de entrada eram muito pequenas, a detecção era prejudicada. Quando tentado diminuir o tamanho da janela deslizante para tentar resolver esse problema, o tempo de execução subia muito. Sendo assim, foi preciso escolher entre um meio termo entre acurácia e tempo de execução.

 

Imagens FPS Médio Tempo para processar uma imagem (segundos) Tempo total de execução
Raspberry 0.450193 2.20271 39min 44seg
WandBoard 0.503284 1.97262 35min 20seg
Intel Edison 0.349018 2.79871 51min 14seg

 

Vídeo FPS Médio Tempo para processar uma imagem (segundos) Tempo total de execução
Raspberry 0.298521 3.25763 6h 55min
WandBoard 0.332465 2.91192 6h 15min
Intel Edison 0.235228 4.10365 8h 45min

 

Câmera FPS Médio Tempo para processar uma imagem (segundos) Tempo total de execução
Raspberry 0.31841 3.10008 26min 14seg
WandBoard 0.349547 2.81719 23min 53seg
Intel Edison 0.24526 3.93697 34min 3seg

Detecções usando o HOG

 

FPDW

Um método que não pode ser testado em nenhum dos três dispositivos alvo por causa de algumas instruções SSE que ele utiliza. Como tanto a Raspberry e a Wandboard usam processador arm, já era esperado que não executariam o método. Já quando os testes iriam ser executados na Edison, foi percebido que para esse método em específico, é necessário ter um processador de 64bits, o que a Edison não possiu. Porém, o algorítimo foi executado em um outro dispositivo, e se mostrou melhor que o primeiro método, tanto em tempo de execução, quanto em encontrar pedestres nas imagens. Porém, sofre com o problema de encontrar muitos resultados falsos positivos. Uma resposta para isso, seria acrescentar o algorítimo de “non maximum suppression” ao método depois da fase de detecção. Isso iria melhorar os resultados, porém não resolveria o problema por completo.

Raspberry  >  USA PROCESSADOR ARM

Wandboard  >  USA PROCESSADOR ARM

Intel Edison  >  PROCESSADOR DE 32 BITS

Detecções usando o FPDW

C4

Esse foi o método que teve o melhor tempo de execução dentre os quatro, com um bom número de detecções e poucos falsos positivos. Só não se sai muito bem com imagens muito pequenas ou de baixa qualidade. Outro problema é que não consegue detectar muito bem pessoas que não estão com seu corpo inteiro a mostra. Porém, teve bons resultados nos testes. Dos quatro testados, ele é o melhor para se tentar fazer a detecção em tempo real.

 

Imagens FPS Médio Tempo para processar uma imagem (segundos) Tempo total de execução
Raspberry 0.74144 1.31901 24min 10seg
WandBoard 1.08373 0.899105 16min 32seg
Intel Edison 0.701926 1.34757 25min 29seg

 

Vídeo FPS Médio Tempo para processar uma imagem (segundos) Tempo total de execução
Raspberry 0.475083 1.99764 4h 20min
WandBoard 0.677584 1.36667 3h 4min
Intel Edison 0.452445 2.04421 4h 35min

 

Câmera FPS Médio Tempo para processar uma imagem (segundos) Tempo total de execução
Raspberry 0.567205 1.70793 14min 44seg
WandBoard 0.835183 1.13654 10min 41seg
Intel Edison 0.487235 1.92244 17min 11seg

Detecção usando o C4

HF 

Dentre os quatro métodos, este foi o que teve a melhor acurácia entre todos, podendo detectar pedestres até quando não estão com o seu corpo inteiro a mostra. Também teve baixas detecções de falsos positivos. Porém, devido ao seu pré processamento das imagens, é o mais lento de todos. Além disso, devido a maneira que foi construído, não é possível exibir as imagens de saída, somente salva-las em algum diretório e, não aceita vídeos como entrada, somente imagens.

 

Imagens Tempo total de execução
Raspberry 6h 56min
WandBoard 6h 15min
Intel Edison 8h 10min

Detecção com o HF

* Todos os testes usando a câmera foram realizados com 500 frames.

Conclusão algoritmos de detecção de pedestres

Ao final dos testes pude concluir que os dispositivos testados não são adequados para rodar algoritmos de detecção de pedestres em tempo real, visto que estes algoritmos são muito custosos em tempo computacional e exigem muito do cpu e gpu dos dispositivos. Mas se a detecção em tempo real não for visada, eles podem sim ser utilizados, em um tempo até razoável. A Wandboard foi a que obteve melhores resultados em todos os testes.

Quanto aos métodos testados,  o C4 foi o que teve melhor desempenho se levado em conta tempo de execução X acurácia e, se executado por algum outro dispositivo com hardware melhor, pode ser utilizado para a detecção em tempo real com acertos consideráveis. Já se tempo não for um problema, e um lote de imagens precisa ser processado, o HF é o que irá proporcionar um melhor resultado, visto sua taxa de acerto é bem alta e pode detectar pedestres sem o corpo inteiro a mostra.

 

Caso queira fazer o download do código utilizado, clique aqui ou aqui.

 

One Response to “Detecção de Pedestres usando o OpenCV”

  • Olá, há algum outro dispositivo com hardware melhor que vocês possam indicar para realizar esse processamento embarcado. Ou algum módulo que realize o processamento da imagem e assim alivie o custo computacional desses periféricos?

Deixe um comentário

O seu endereço de e-mail não será publicado.