Análise do Código-Fonte e Treinamento do YOLOv5 no Kaggle

Explorando o Pipeline do YOLOv5

Esta nota aborda a análise do código-fonte do YOLOv5 e a condução de treinamentos dentro do ambiente Kaggle, focando nos módulos de detecção, validação e otimização do modelo.

1. Módulo de Detecção (detect.py)

Ao executar o script de detecção com um modelo pré-treinado yolov5s.pt e imagens de exemplo, o processo segue estas etapas principais:

  • Configuração: Definição de parâmetros como limiar de confiança (conf_thres=0.25), limiar IoU para NMS (iou_thres=0.45) e dimensão da imagem de entrada (640x640).
  • Otimização do Modelo: Camadas são fundidas para acelerar a inferência, resultando em um modelo com 213 camadas e 16.4 GFLOPs de complexidade computacional.
  • Resultados: O modelo identifica corretamente objetos em imagens como um ônibus com pessoas (bus.jpg) e indivíduos com gravatas (zidane.jpg), com tempos de inferência na faixa de 28-30ms por imagem em uma GPU Tesla P100.

O laço de inferência central processa cada imagem em três fases cronometradas: pré-proecssamento (conversão de tensor e normalização), inferência do modelo e supressão não-máxima (NMS). Para cada deteção válida, os resultados são anotados na imagem original, salvos em arquivos de texto e, opcionalmente, em um arquivo CSV.

# Estrutura simplificada do laço de inferência
tempo_pre, tempo_inferencia, tempo_nms = [], [], []
for caminho_imagem, tensor_imagem, imagem_original in carregador_dados:
    # 1. Pré-processamento
    tensor_imagem = tensor_imagem.to(dispositivo_modelo).float() / 255.0
    
    # 2. Inferência
    predicoes_brutas = modelo(tensor_imagem, augment=usar_aumento)
    
    # 3. Pós-processamento
    deteccoes_filtradas = supressao_nao_maxima(
        predicoes_brutas,
        limiar_confianca=0.25,
        limiar_iou=0.45
    )
    
    # 4. Processar resultados
    for deteccao in deteccoes_filtradas:
        # Escalar caixas delimitadoras para a resolução original
        caixas_escaladas = redimensionar_caixas(deteccao[:, :4], tensor_imagem.shape[2:], imagem_original.shape)
        # Anotar e salvar
        anotar_imagem(imagem_original, caixas_escaladas, classes=deteccao[:, 5])

2. Validação do Modelo

A validação do yolov5s.pt no conjunto de dados COCO fornece uma avaliação de desempenho padrão da indústria. As métricas reportadas após uma época de validação são:

Métrica Valor
mAP@0.5 0.572
mAP@0.5:0.95 0.374
Tempo de Inferência 2.6 ms/imagem
Tempo de NMS 1.7 ms/imagem

A performance indicada é consistente com os resultados de referência do modelo. Um ponto notável é a superioridade na detecção de objetos grandes (AP=0.489) em comparação com objetos pequenos (AP=0.211), um desafio comum em arquiteturas single-stage. As imagens e predições resultantes são automaticamente salvas no diretório runs/val/exp.

3. Treinamento do Modelo

O treinamento é iniciado utilizando um conjunto de dados COCO128, que é baixado automaticamente se não estiver presente localmente. O processo configura:

  • Arquitetura: YOLOv5s com 214 camadas e 7.2M de parâmetros.
  • Hiperparâmetros: Otimizador SGD com taxa de aprendizado inicial de 0.01, usando um arquivo de configuração (hyp.scratch-low.yaml) que define fortes técnicas de aumento de dados como mosaico.
  • Ambiente: Utilização de AMP (Precisão Mista Automática) via PyTorch, com validação das operações em GPU.

Ao longo de um breve treinamento de demonstração (3 épocas), os logs mostram uma evolução estável das métricas:

Época 0: mAP@0.5 = 0.689 | perda_caixa = 0.04438 | perda_objeto = 0.05844 Época 1: mAP@0.5 = 0.712 | perda_caixa = 0.04508 | perda_objeto = 0.06348 Época 2: mAP@0.5 = 0.736 | perda_caixa = 0.04333 | perda_objeto = 0.06397


<p>O uso de memória da GPU (~3.93 GB) permaneceu constante, indicando um consumo eficiente de recursos. Os pesos otimizados (<code>best.pt</code>, <code>last.pt</code>) e um relatório completo de validação por classe são salvos no diretório de saída <code>runs/train/exp</code>.</p>

<h3>Considerações Técnicas</h3>
<p>Durante a execução, podem surgir avisos (<code>FutureWarning</code>) relacionados à API de autocast do PyTorch, que são informativos e não afetam a funcionalidade atual. A integração com o TensorBoard para monitorar a curva de aprendizado é uma prática recomendada após o treinamento.</p>

Tags: YOLOv5 Pytorch Object Detection Model Training COCO Dataset

Publicado em 7-13 18:19