Manual
do
Maker
.
com
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.
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.
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 é o da imagem de destaque do artigo.
A saída do programa mostra a acurácia:
Altíssimo o tempo de predição, reparou? Mas calma! Isso foi feito na CPU, por isso essa demora absurda.
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
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.
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.
O vídeo está em nosso canal no Youtube.
Inscreva-se no nosso canal Manual do Maker no YouTube.
Também estamos no Instagram.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.