Skip to content

Rede neural YOLOv7 para detecção de garfos no dataset COCO 2017.

License

Notifications You must be signed in to change notification settings

mtsousa/LARA-2022_Fork-Detection

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LARA-2022_Fork-Detection

Este repositório contém o código para treinamento de uma rede neural YOLOv7 para detecção de garfos a partir do fine-tuning de um modelo pré-treinado no dataset COCO 2017.

Dados do treinamento

O modelo foi treinado no ambiente Google Colab utilizando a GPU disponível para as contas gratuitas ao longo de 100 épocas. As imagens para treinamento, validação e teste foram filtradas a partir do dataset COCO 2017 e totalizam 3555 imagens para treino, 155 para validação e 427 para teste. Os hiperparâmetros e arquivos de configuração utilizados podem ser encontados na pasta yolov7. Ao final do treinamento, o modelo obteve AP50:5:95 igual a 50,4% e AP50 igual a 73,5%, cerca de 4% e 8% maiores que o modelo original para a classe garfo.

Configuração

  • Versão do Python: 3.10.7
  • Versão do PyTorch: 1.13.1

Ambiente de desenvolvimento

  1. Crie o ambiente de desenvolvimento
python -m venv pFD
  1. Ative o ambiente de desenvolvimento

    • Em ambiente Windows (bash do git)
    source pFD/Scripts/activate
    • Em ambiente Linux
    source pFD/bin/activate
  2. Instale as dependências

pip install -r requirements.txt

Imagens para treinamento e validação

  1. Siga as instruções da pasta coco_manager para baixar as anotações e filtrá-las por categoria;

  2. Siga as instruções da pasta download_images para baixar as imagens filtradas;

  3. Siga as instruções da pasta coco2yolo para converter as anotações para o formato utilizado no modelo YOLOv7.

Observação: O código da pasta images_exploration pode ser utilizado para visualizar as imagens do dataset com as anotações das bounding boxes.

Como usar

Treinamento

yolov7.pt fork_best_640x640.pt fork_last_640x640.pt

  1. Baixe os pesos pré-treinados (yolov7.pt, fork_best_640x640.pt ou fork_last_640x640.pt) para a pasta models.

  2. Troque para a pasta yolov7 e inicie o treino do modelo

python train.py --workers 4 --device 0 --batch-size 16 --cfg cfg/training/yolov7_custom.yaml --data data/coco_custom.yaml --epochs 100 --img 640 640 --hyp data/hyp_custom.yaml --name yolov7-fork --weights models/yolov7.pt --project .

Observação: Mais informações sobre os parâmetros do treinamento podem ser encontradas no repositório do modelo ou na pasta yolov7.

  1. Caso o treino seja interrompido, execute
python train.py --resume yolov7-fork/weights/last.pt

Exportar modelo

Na pasta yolov7, execute

python export.py --img-size 640 640 --grid --end2end --weights yolov7-fork/weights/best.pt --topk-all 100 --max-wh 640 --device 0 --dynamic-batch

Observação: Mais informações sobre outras operações, como testar e inferir, podem ser encontradas no repositório do modelo ou na pasta yolov7.

Inferência com ONNX

fork_best_640x640.onnx fork_best_640x480.onnx

No diretório principal, execute

(pFD)$ python detect.py -h
usage: detect.py [-h] -m /path/to/model.onnx -i /path/to/images/ or
                 /path/to/image.jpg [-b BATCH] [-s] [-d] [-c]

Predict with YOLOv7-fork ONNX model

options:
  -h, --help            show this help message and exit
  -m /path/to/model.onnx, --model /path/to/model.onnx
                        Path to ONNX model.
  -i /path/to/images/ or /path/to/image.jpg, --input /path/to/images/ or /path/to/image.jpg
                        Path to images or path to image.
  -b BATCH, --batch BATCH
                        Batch size. (Default: 1)
  -s, --save            Save predicted image. (Default: False)
  -d, --dontshow        Don't show predicted image. (Default: False)
  -c, --cuda            Set execution on GPU. (Default: False)
  • Exemplo
python detect.py --model models/fork_best_640x640.onnx --input data/test

Resultados

Métricas

Valores obtidos para as métricas Precision (P), Recall (R), AP50 e AP50:5:95 para os modelos yolov7 considerando todas as classes, yolov7 somente a classe garfo e modelo treinado (yolov7-fork).

Modelo P R AP50 AP50:5:95
yolov7 (todas) 72,6% 64,6% 69,1% 49,7%
yolov7 (fork) 72,9% 63,3% 68% 48,3%
yolov7-fork 79,9% 68,4% 73,5% 50,4%

Predições

Os resultados das predições podem ser visto individualmente na pasta images.

Referências