Vamos começar entendendo o que será construído
O tema deste artigo é detecção de objetos, uma tarefa de visão computacional que identifica classes de objetos e suas caixas delimitadoras em imagens. Esse tipo de técnica pode apoiar aplicações como inspeção visual, monitoramento, busca em imagens e percepção em veículos autônomos.
Então aperte o cinto e vamos nessa!
Breve apresentação
Para detecção de objetos, vamos utilizar o modelo YOLOv4 com a estrutura Darknet. Para obter imagens e anotações públicas, usaremos o OIDv4_ToolKit, que facilita o download de dados do Google Open Images Dataset.
Este tutorial usa como referência o repositório https://github.com/AlexeyAB/darknet e o notebook Colab disponibilizado no projeto: https://colab.research.google.com/drive/12QusaaRj_lUwCGDvQNfICpa7kA7_a2dE.
Recomendação:
Para rodar o script no Google Colab, você precisa ter uma conta Google.
Realize uma cópia do notebook antes de iniciar a execução do script.
Cite corretamente os repositórios, datasets e modelos utilizados nas suas aplicações.
ALGORITMO YOLOv4
Etapa 1: Habilitando GPU em seu notebook
1) Clique em Editar no canto superior esquerdo do seu bloco de notas
2) Clique em Configurações do Notebook no menu suspenso
3) Em ‘Hardware Accelerator’, selecione GPU e clique em Salvar
Seu notebook agora deve ter a GPU habilitada!
Etapa 2: clonagem e construção do Darknet
As células a seguir clonam o Darknet do repositório AlexeyAB, ajustam o Makefile para habilitar OpenCV, GPU, CUDNN e CUDNN_HALF, e depois compilam o projeto.
Leia os avisos do make: alguns são apenas informativos, mas erros relacionados a CUDA, OpenCV ou CUDNN indicam que o ambiente não foi configurado corretamente.
1) Clone o repositório Darknet.
!git clone https://github.com/AlexeyAB/darknet
2) Entre no diretório do projeto. No Colab, use %cd para que a mudança de diretório persista nas próximas células.
%cd darknet
3) Altere o Makefile para habilitar GPU, OpenCV, CUDNN e CUDNN_HALF.
!sed -i 's/OPENCV=0/OPENCV=1/' Makefile
!sed -i 's/GPU=0/GPU=1/' Makefile
!sed -i 's/CUDNN=0/CUDNN=1/' Makefile
!sed -i 's/CUDNN_HALF=0/CUDNN_HALF=1/' Makefile
4) Verifique a versão do CUDA disponível no ambiente.
!/usr/local/cuda/bin/nvcc --version
5) Compile o Darknet. Essa etapa gera o executável darknet, usado para inferência e treinamento.
!make
Etapa 3: Baixe pesos YOLOv4 pré-treinados
O YOLOv4 possui pesos pré-treinados no conjunto de dados COCO, com 80 classes. Esses pesos permitem executar inferência imediatamente nessas classes antes de treinar um detector personalizado.
!wget https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.weights
Etapa 4: Como treinar seu próprio detector de objetos personalizado com YOLOv4
Agora chega a hora de criar um detector YOLOv4 personalizado para reconhecer as classes de interesse do seu projeto.
Isso requer alguns truques e dicas, portanto, certifique-se de acompanhar de perto o restante do tutorial.
Para criar um detector YOLOv4 personalizado, precisamos do seguinte:
- Conjunto de imagens anotadas com caixas delimitadoras
- Arquivo .cfg personalizado
- Arquivos obj.data e obj.names
- Arquivo train.txt; test.txt ou valid.txt também é recomendado para validação
1) Etapa 1: coletar e rotular um conjunto de dados personalizado
Para criar um detector de objetos personalizado, você precisa de um conjunto de imagens representativo e de rótulos consistentes. Em YOLO, cada objeto deve ter classe e coordenadas de caixa delimitadora no formato esperado pelo treinamento.
Isso pode ser feito baixando dados públicos anotados, como no Open Images Dataset, ou criando seu próprio conjunto de dados e anotando manualmente com ferramentas apropriadas. A melhor escolha depende do domínio: dados públicos aceleram o protótipo, mas dados próprios costumam representar melhor o ambiente real da aplicação.