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.
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.
- Versão do Python: 3.10.7
- Versão do PyTorch: 1.13.1
- Crie o ambiente de desenvolvimento
python -m venv pFD
-
Ative o ambiente de desenvolvimento
- Em ambiente Windows (bash do git)
source pFD/Scripts/activate
- Em ambiente Linux
source pFD/bin/activate
-
Instale as dependências
pip install -r requirements.txt
-
Siga as instruções da pasta coco_manager para baixar as anotações e filtrá-las por categoria;
-
Siga as instruções da pasta download_images para baixar as imagens filtradas;
-
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.
yolov7.pt
fork_best_640x640.pt
fork_last_640x640.pt
-
Baixe os pesos pré-treinados (yolov7.pt, fork_best_640x640.pt ou fork_last_640x640.pt) para a pasta models.
-
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.
- Caso o treino seja interrompido, execute
python train.py --resume yolov7-fork/weights/last.pt
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.
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
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% |
Os resultados das predições podem ser visto individualmente na pasta images.