Salta para o conteúdo

Ultralytics YOLOv5 Arquitetura

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

1. Estrutura do modelo

YOLOv5é composta por três partes principais:

  • Espinha dorsal: É o corpo principal da rede. Para YOLOv5, a espinha dorsal é desenhada usando o New CSP-Darknet53 uma modificação da arquitetura Darknet utilizada nas versões anteriores.
  • Pescoço: Esta parte liga a espinha dorsal à cabeça. Em YOLOv5, SPPF e New CSP-PAN utiliza as estruturas.
  • Cabeça: Esta parte é responsável por gerar a saída final. YOLOv5 utiliza o YOLOv3 Head para este efeito.

A estrutura do modelo está representada na imagem abaixo. Os detalhes da estrutura do modelo podem ser encontrados em yolov5l.yaml.

yolov5

YOLOv5 introduz algumas pequenas alterações em relação aos seus antecessores:

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

Para testar a velocidade de SPP e SPPFPodes utilizar o seguinte código:

Exemplo de perfil de velocidade SPP vs SPPF (clica para abrir)
import time
import torch
import torch.nn as nn


class SPP(nn.Module):
    def __init__(self):
        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):
        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):
        super().__init__()
        self.maxpool = nn.MaxPool2d(5, 1, padding=2)

    def forward(self, x):
        o1 = self.maxpool(x)
        o2 = self.maxpool(o1)
        o3 = self.maxpool(o2)
        return torch.cat([x, o1, o2, o3], dim=1)


def main():
    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

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 do mosaico: Uma técnica de processamento de imagem que combina quatro imagens de treino numa só, de forma a encorajar os modelos de deteção de objectos a lidar melhor com várias escalas e translações de objectos.

mosaico

  • Aumento do copiar-colar: Um método inovador de aumento de dados que copia manchas aleatórias de uma imagem e cola-as noutra imagem escolhida aleatoriamente, gerando efetivamente uma nova amostra de treino.

copia e cola

  • Transformações afins aleatórias: Inclui rotação, escalonamento, translação e cisalhamento aleatórios das imagens.

Afina aleatória

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

confusão

  • Albumentações: Uma biblioteca poderosa para aumento de imagens que suporta uma grande variedade de técnicas de aumento.

  • Aumento HSV: Altera aleatoriamente a tonalidade, a saturação e o valor das imagens.

hsv

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

horizontal-flip

3. Estratégias de formação

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

  • Treino multiescala: As imagens de entrada são redimensionadas aleatoriamente num intervalo de 0,5 a 1,5 vezes o seu tamanho original durante o processo de treino.
  • AutoAnchor: Esta estratégia optimiza as caixas de ancoragem anteriores para corresponder às características estatísticas das caixas de verdade terrestre nos teus dados personalizados.
  • Agendamento de Warmup e Cosine LR: Um método para ajustar a taxa de aprendizagem para melhorar o desempenho do modelo.
  • Média móvel exponencial (EMA): Uma estratégia que usa a média dos parâmetros em etapas anteriores para estabilizar o processo de treinamento e reduzir o erro de generalização.
  • Treino de precisão mista: Um método para efetuar operações em formato de meia-precisão, reduzindo a utilização de memória e melhorando a velocidade computacional.
  • Evolução do hiperparâmetro: Uma estratégia para ajustar automaticamente os hiperparâmetros para obter um desempenho ótimo.

4. Características adicionais

4.1 Calcula as perdas

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

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

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

perda

4.2 Perdas de saldo

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

obj_perda

4.3 Eliminar a sensibilidade da rede

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

b_x b_y b_w b_h

YOLOv5 cálculo da grelha

No entanto, em YOLOv5, a fórmula de previsão das coordenadas da caixa foi actualizada para reduzir a sensibilidade da grelha e evitar que o modelo preveja dimensões de caixa não limitadas.

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

bx por bw bh

Compara o desvio do ponto central antes e depois do escalonamento. O intervalo de desvio do ponto central é ajustado de (0, 1) a (-0,5, 1,5). Por isso, o desvio pode facilmente ser 0 ou 1.

YOLOv5 escalonamento da grelha

Compara o rácio de escala da altura e da largura (em relação à âncora) antes e depois do ajuste. As equações originais da caixa 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, pois pode levar a gradientes descontrolados, instabilidades, perdas de NaN e, em última análise, a uma perda completa do treino.

YOLOv5 escalonamento sem limites

4.4 Objectivos de construção

O processo de construção de alvos em YOLOv5 é fundamental para a eficiência do treino e a precisão do modelo. Envolve a atribuição de caixas de verdade terrestre às células de grelha apropriadas no mapa de saída e a sua correspondência com as caixas de ancoragem apropriadas.

Este processo segue os seguintes passos:

  • Calcula o rácio entre as dimensões da caixa da verdade terrestre e as dimensões de cada modelo de âncora.

rw

rh

rwmax

rhmax

rmax

combina

YOLOv5 Computação IoU

  • Se o rácio calculado estiver dentro do limite, faz corresponder a caixa da verdade terrestre com a âncora correspondente.

YOLOv5 sobreposição de grelha

  • Atribui a âncora correspondente às células apropriadas, tendo em conta que, devido ao desvio do ponto central revisto, uma caixa de verdade terrestre pode ser atribuída a mais do que uma âncora. Porque o intervalo de desvio do ponto central é ajustado de (0, 1) para (-0,5, 1,5). A caixa GT pode ser atribuída a mais âncoras.

YOLOv5 seleção de âncoras

Desta forma, o processo de construção de alvos garante que cada objeto de verdade terrestre é corretamente atribuído e correspondido durante o processo de formação, permitindo que o YOLOv5 aprenda a tarefa de deteção de objectos de forma mais eficaz.

Conclusão

Em conclusão, o YOLOv5 representa um avanço significativo no desenvolvimento de modelos de deteção de objectos em tempo real. Ao incorporar várias novas funcionalidades, melhorias e estratégias de formação, ultrapassa as versões anteriores da família YOLO em termos de desempenho e eficiência.

As principais melhorias em YOLOv5 incluem a utilização de uma arquitetura dinâmica, uma vasta gama de técnicas de aumento de dados, estratégias de formação inovadoras, bem como ajustes importantes nas perdas de computação e no processo de construção de alvos. Todas estas inovações melhoram significativamente a precisão e a eficiência da deteção de objectos, mantendo um elevado grau de velocidade, que é a marca registada dos modelos YOLO .



Criado em 2023-11-12, Atualizado em 2024-01-14
Autores: glenn-jocher (5), sergiuwaxmann (1)

Comentários