YOLO: Detecção de objetos em tempo real

You Only Look Once ou, YOLO, é chamado “o estado da arte” da detecção de objetos em tempo real. Não importa quantos objetos estejam em cena, se estiverem na base de treinamento, todos eles serão detectados e a região de interesse cercada por retângulos. Ele é extremamente rápido e preciso, além de permitir ajustes entre precisão e velocidade. O mais impressionante é que não é necessário refazer o treinamento para tal!

O paper do YOLO pode ser visto nesse link.

Fazer detecção de objetos com YOLO utilizando um modelo pré-treinado

Podemos utilizar um modelo pré-treinado ou treinar nossos próprios models para fazer a detecção de objetos. Comecemos com um modelo pré-treinado e em um artigo posterior veremos como treinar nosso modelo para utilizar com YOLO.

Utilizando Darknet

A DarkNet é uma rede neural que funciona em GPU ou CPU. Primeiramente, baixe e compile:

git clone https://github.com/pjreddie/darknet
cd darknet
make

Depois, baixe o modelo pré-treinado:

wget https://pjreddie.com/media/files/yolov3.weights

Agora já podemos fazer uma deteção:

./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

O arquivo resultante:

YOLO -Detecção de objetos

A saída do programa mostra a acurácia:

YOLO -Detecção de objetos

Altíssimo o tempo de predição, reparou? Mas calma! Isso foi feito na CPU, por isso essa demora absurda.

Compilando com suporte a CUDA

Se você já te o ambiente configurado, o processo é bastante simples. Se não, pode se guiar por este tutorial para configurar CUDA em sua máquina (desde que tenha uma GPU que possa ser utilizada).

Primeiro, garanta que o nvcc esteja instalado. No meu caso está, mas não está no path. Por isso, fiz sua inclusão primeiramente:

PATH=$PATH:/usr/local/cuda-10.0/bin/
export PATH

Edite o arquivo Makefile e troque as primeiras duas variáveis para 1:

GPU=1
CUDNN=1

Limpe a compilação atual e faça uma nova:

make clean && make

Repita o teste padrão para ver como se sai sua GPU. Agora muda um pouco a composição de parâmetros:

./darknet -i 1 imagenet test cfg/alexnet.cfg alexnet.weights

Determinando o threshold

A confidência padrão utilizada pelo YOLO parte de 0.25 para considerar verdadeira a classificação. O valor pode ser modificado passando o parâmetro -thresh x, onde “x” é o valor.

Detecção em tempo real pela webcam ou vídeo

Do mesmo modo, podemos fazer a classificação a partir de vídeos ou da webcam, mas nesse caso é necessário ter CUDA e OpenCV habilitados na configuração. Um exemplo:

./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights nome_do_arquivo.ext

O parâmetro -c permite selecionar qual webcam utilizar.

No próximo artigo relacionado pretendo incluir um exemplo de treinamento para utiizar com YOLO. Aliás, o YOLO deve dar pelo menos mais dois artigos, vamos ver configurações diferentes.

Dessa vez fico devendo o vídeo, mas na próxima teremos, sem dúvidas!

Djames Suhanko

Djames Suhanko é Perito Forense Digital. Já atuou com deployer em sistemas de missão critica em diversos países pelo mundão. Programador Shell, Python, C, C++ e Qt, tendo contato com embarcados ( ora profissionalmente, ora por lazer ) desde 2009.

Um comentário em “YOLO: Detecção de objetos em tempo real

Fechado para comentários.