YOLO Vision 2026:

Arquitetura do Ultralytics YOLOv5#

YOLOv5 (v6.0/6.1) é um poderoso algoritmo de deteção de objetos desenvolvido pela Ultralytics. Este artigo explora em profundidade a arquitetura do YOLOv5, as estratégias de aumento de dados, as metodologias de treino e as técnicas de cálculo da função de perda. Esta compreensão abrangente ajudará a melhorar a tua aplicação prática da deteção de objetos em vários campos, incluindo vigilância, veículos autónomos e reconhecimento de imagens.

1. Estrutura do modelo#

A arquitetura do YOLOv5 é constituída por três partes principais:

  • Backbone: Este é o corpo principal da rede. No YOLOv5, o backbone foi concebido utilizando a estrutura CSPDarknet53, uma modificação da arquitetura Darknet usada nas versões anteriores.
  • Neck: Esta parte liga o backbone à head. No YOLOv5, são utilizadas as estruturas SPPF (Spatial Pyramid Pooling - Fast) e PANet (Path Aggregation Network).
  • Head: Esta parte é responsável por gerar a saída final. O YOLOv5 utiliza YOLOv3 Head para este efeito.

A estrutura do modelo é apresentada na imagem abaixo. Os detalhes da estrutura do modelo podem ser consultados em models/yolov5l.yaml.

Arquitetura do YOLOv5 mostrando o backbone, o neck e a head

O YOLOv5 introduz algumas melhorias importantes em comparação com os seus predecessores:

  1. A estrutura Focus, presente nas versões anteriores, é substituída por uma estrutura 6x6 Conv2d. Esta alteração aumenta a eficiência #4825.
  2. A estrutura SPP é substituída por SPPF. Esta alteração mais do que duplica a velocidade de processamento, mantendo a mesma saída.

Para testar a velocidade de SPP e SPPF, pode ser utilizado o seguinte código:

SPP vs SPPF speed profiling example (click to open)
import time

import torch
from torch import nn

class SPP(nn.Module):
    def __init__(self):
        """Initializes an SPP module with three different sizes of max pooling layers."""
        super().__init__()
        self.maxpool1 = nn.MaxPool2d(5, 1, padding=2)
        self.maxpool2 = nn.MaxPool2d(9, 1, padding=4)
        self.maxpool3 = nn.MaxPool2d(13, 1, padding=6)

    def forward(self, x):
        """Applies three max pooling layers on input `x` and concatenates results along channel dimension."""
        o1 = self.maxpool1(x)
        o2 = self.maxpool2(x)
        o3 = self.maxpool3(x)
        return torch.cat([x, o1, o2, o3], dim=1)

class SPPF(nn.Module):
    def __init__(self):
        """Initializes an SPPF module with a specific configuration of MaxPool2d layer."""
        super().__init__()
        self.maxpool = nn.MaxPool2d(5, 1, padding=2)

    def forward(self, x):
        """Applies sequential max pooling and concatenates results with input tensor."""
        o1 = self.maxpool(x)
        o2 = self.maxpool(o1)
        o3 = self.maxpool(o2)
        return torch.cat([x, o1, o2, o3], dim=1)

def main():
    """Compares outputs and performance of SPP and SPPF on a random tensor (8, 32, 16, 16)."""
    input_tensor = torch.rand(8, 32, 16, 16)
    spp = SPP()
    sppf = SPPF()
    output1 = spp(input_tensor)
    output2 = sppf(input_tensor)

    print(torch.equal(output1, output2))

    t_start = time.time()
    for _ in range(100):
        spp(input_tensor)
    print(f"SPP time: {time.time() - t_start}")

    t_start = time.time()
    for _ in range(100):
        sppf(input_tensor)
    print(f"SPPF time: {time.time() - t_start}")

if __name__ == "__main__":
    main()

resultado:

True
SPP time: 0.5373051166534424
SPPF time: 0.20780706405639648

2. Técnicas de aumento de dados#

O YOLOv5 utiliza várias técnicas de aumento de dados para melhorar a capacidade de generalização do modelo e reduzir o sobreajuste. Estas técnicas incluem:

  • Aumento Mosaic: Uma técnica de processamento de imagens que combina quatro imagens de treino numa só, de formas que ajudam os modelos de deteção de objetos a lidar melhor com várias escalas e translações de objetos.

    Aumento de dados Mosaic do YOLOv5 combinando quatro imagens

  • Aumento Copy-Paste: Um método inovador de aumento de dados que copia recortes aleatórios de uma imagem e os cola noutra imagem escolhida aleatoriamente, gerando efetivamente uma nova amostra de treino.

    Aumento Copy-Paste do YOLOv5 para segmentação de instâncias

  • Transformações afins aleatórias: Incluem a rotação, o redimensionamento, a translação e a deformação aleatórios das imagens.

    Transformações afins aleatórias do YOLOv5 para treino

  • Aumento MixUp: Um método que cria imagens compostas através da combinação linear de duas imagens e das respetivas etiquetas.

    Aumento de dados MixUp do YOLOv5 combinando duas imagens

  • Albumentations: Uma poderosa biblioteca de aumento de imagens que suporta uma grande variedade de técnicas de aumento. Obtém mais informações sobre como utilizar os aumentos do Albumentations.

  • Aumento HSV: Alterações aleatórias à tonalidade, à saturação e ao valor das imagens.

    Exemplos de aumento do espaço de cores HSV no YOLOv5

  • Inversão horizontal aleatória: Um método de aumento que inverte aleatoriamente as imagens na horizontal.

    Aumento de inversão horizontal aleatória do YOLOv5

3. Estratégias de treino#

O YOLOv5 aplica várias estratégias sofisticadas de treino para melhorar o desempenho do modelo. Estas incluem:

  • Treino multiescala: As imagens de entrada são redimensionadas aleatoriamente entre 0,5 e 1,5 vezes o seu tamanho original durante o processo de treino.
  • AutoAnchor: Esta estratégia otimiza as caixas anchor prévias para corresponderem às características estatísticas das caixas de ground truth nos teus dados personalizados.
  • Warmup e agendador de LR com cosseno: Um método para ajustar a taxa de aprendizagem e melhorar o desempenho do modelo.
  • Média móvel exponencial (EMA): Uma estratégia que utiliza a média dos parâmetros de passos anteriores para estabilizar o processo de treino e reduzir o erro de generalização.
  • Treino de precisão mista: Um método para executar operações no formato de precisão de metade, reduzindo a utilização de memória e aumentando a velocidade de computação.
  • Evolução de hiperparâmetros: Uma estratégia para ajustar automaticamente os hiperparâmetros e obter o desempenho ideal. Obtém mais informações sobre o ajuste de hiperparâmetros.

4. Funcionalidades adicionais#

4.1 Calcular as funções de perda#

A função de perda no YOLOv5 é calculada como uma combinação de três componentes individuais de perda:

  • Perda das classes (perda BCE): A perda de entropia cruzada binária mede o erro da tarefa de classificação.
  • Perda de objetividade (perda BCE): Outra perda de entropia cruzada binária, que calcula o erro na deteção da presença ou ausência de um objeto numa determinada célula da grelha.
  • Perda de localização (perda CIoU): A perda de IoU completa mede o erro na localização do objeto dentro da célula da grelha.

A função de perda global é representada por:

Fórmula da função de perda total do YOLOv5

4.2 Equilibrar as perdas#

As perdas de objetividade das três camadas de predição (P3, P4, P5) têm ponderações diferentes. Os pesos de equilíbrio são, respetivamente, [4.0, 1.0, 0.4]. Esta abordagem garante que as predições em diferentes escalas contribuem adequadamente para a perda total.

Fórmula do equilíbrio da perda de objetividade do YOLOv5

4.3 Eliminar a sensibilidade à grelha#

A arquitetura do YOLOv5 introduz algumas alterações importantes na estratégia de predição de caixas em comparação com as versões anteriores do YOLO. No YOLOv2 e no YOLOv3, as coordenadas das caixas eram preditas diretamente utilizando a ativação da última camada.

Fórmula de predição da coordenada x da caixa delimitadora Fórmula de predição da coordenada y da caixa delimitadora Fórmula de predição da largura da caixa delimitadora Fórmula de predição da altura da caixa delimitadora

YOLOv5 grid computation

No entanto, no YOLOv5, a fórmula para prever as coordenadas da caixa foi atualizada para reduzir a sensibilidade à grelha e impedir que o modelo preveja dimensões de caixa ilimitadas.

As fórmulas revistas para calcular a caixa delimitadora predita são as seguintes:

Fórmula revista da coordenada x da caixa delimitadora do YOLOv5 Fórmula revista da coordenada y da caixa delimitadora do YOLOv5 Fórmula revista da largura da caixa delimitadora do YOLOv5 Fórmula revista da altura da caixa delimitadora do YOLOv5

Compara o desvio do ponto central antes e depois do redimensionamento. O intervalo do desvio do ponto central é ajustado de (0, 1) para (-0.5, 1.5). Assim, o desvio pode facilmente assumir o valor 0 ou 1.

YOLOv5 grid scaling

Compara a proporção de redimensionamento da altura e da largura (relativamente ao anchor) antes e depois do ajuste. As equações originais das caixas yolo/darknet têm uma falha grave. A largura e a altura são completamente ilimitadas, pois são simplesmente out=exp(in), o que é perigoso, uma vez que pode causar gradientes descontrolados, instabilidades, perdas NaN e, em última análise, a perda total do treino. Consulta este problema para obter mais detalhes.

YOLOv5 unbounded scaling

4.4 Construir os targets#

O processo de construção dos targets no YOLOv5 é essencial para a eficiência do treino e a precisão do modelo. Envolve atribuir as caixas de ground truth às células de grelha adequadas no mapa de saída e associá-las às caixas anchor apropriadas.

Este processo segue os seguintes passos:

  • Calcula a proporção entre as dimensões da caixa de ground truth e as dimensões de cada template de anchor.

Fórmula da proporção entre a largura da ground truth e a largura do anchor

Fórmula da proporção entre a altura da ground truth e a altura do anchor

Fórmula da proporção máxima da largura

Fórmula da proporção máxima da altura

Fórmula da proporção máxima global

Fórmula do limiar de correspondência do anchor

YOLOv5 IoU computation
  • Se a proporção calculada estiver dentro do limiar, associa a caixa de ground truth ao anchor correspondente.
YOLOv5 grid overlap
  • Atribui o anchor correspondente às células adequadas, tendo em conta que, devido ao desvio revisto do ponto central, uma caixa de ground truth pode ser atribuída a mais de um anchor, porque o intervalo do desvio do ponto central é ajustado de (0, 1) para (-0.5, 1.5), permitindo correspondências adicionais.
YOLOv5 anchor selection

Desta forma, o processo de construção dos targets garante que cada objeto de ground truth é devidamente atribuído e associado durante o processo de treino, permitindo que o YOLOv5 aprenda a tarefa de deteção de objetos de forma mais eficaz.

Conclusão#

O YOLOv5 representa um avanço significativo na evolução da deteção de objetos em tempo real. As suas escolhas arquiteturais, estratégias de treino e melhorias de engenharia proporcionam um desempenho e uma eficiência sólidos em relação às versões anteriores do YOLO.

As principais melhorias do YOLOv5 incluem a utilização de uma arquitetura dinâmica, uma vasta gama de técnicas de aumento de dados, estratégias inovadoras de treino, bem como ajustes importantes no cálculo das perdas e no processo de construção dos targets. Todas estas inovações melhoram significativamente a precisão e a eficiência da deteção de objetos, mantendo simultaneamente um elevado nível de velocidade, que é a marca distintiva dos modelos YOLO.

Comentários