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 sua 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é constituída por três partes principais:
- Espinha dorsal: Este é o corpo principal da rede. Para YOLOv5, a espinha dorsal é projectada utilizando 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
eNew CSP-PAN
estruturas são utilizadas. - 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 pormenores da estrutura do modelo podem ser consultados em yolov5l.yaml
.
YOLOv5 introduz algumas alterações menores em relação aos seus antecessores:
- O
Focus
encontrada em versões anteriores, é substituída por uma estrutura6x6 Conv2d
estrutura. Esta alteração aumenta a eficiência #4825. - O
SPP
é substituída pela estruturaSPPF
. Esta alteração mais do que duplica a velocidade de processamento.
Para testar a velocidade de SPP
e SPPF
pode ser utilizado o seguinte código:
Exemplo de perfil de velocidade SPP vs SPPF (clique para abrir)
import time
import torch
import torch.nn as 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()
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 incentivar os modelos de deteção de objectos a lidar melhor com várias escalas e translações de objectos.
-
Aumento de cópia-colagem: Um método inovador de aumento de dados que copia manchas aleatórias de uma imagem e as cola noutra imagem escolhida aleatoriamente, gerando efetivamente uma nova amostra de treino.
-
Transformações afins aleatórias: Inclui rotação, escala, translação e cisalhamento aleatórios das imagens.
-
MixUp Augmentation: Um método que cria imagens compostas através de uma combinação linear de duas imagens e das suas etiquetas associadas.
-
Albumentações: Uma biblioteca poderosa para aumento de imagens que suporta uma grande variedade de técnicas de aumento.
-
Aumento HSV: Alterações aleatórias na Tonalidade, Saturação e Valor das imagens.
-
Inversão horizontal aleatória: Um método de aumento que inverte aleatoriamente as imagens na horizontal.
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 formação.
- AutoAnchor: Esta estratégia optimiza as caixas de ancoragem anteriores para corresponder às caraterísticas estatísticas das caixas de verdade terrestre nos seus dados personalizados.
- Programação 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 utiliza a média dos parâmetros em etapas anteriores para estabilizar o processo de treinamento e reduzir o erro de generalização.
- Formação deprecisão mista: Um método para efetuar operações em formato de meia-precisão, reduzindo a utilização de memória e aumentando a velocidade computacional.
- Evolução dos hiperparâmetros: Uma estratégia para ajustar automaticamente os hiperparâmetros para obter um desempenho ótimo.
4. Caraterísticas adicionais
4.1 Calcular 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): A perda completa de IoU mede o erro na localização do objeto dentro da célula da grelha.
A função de perda global é representada por:
4.2 Perdas de equilíbrio
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.
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.
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 o cálculo da caixa delimitadora prevista são as seguintes
Compare 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 conseguinte, o desvio pode facilmente ser 0 ou 1.
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, uma vez que são simplesmente out=exp(in), o que é perigoso, uma vez que pode levar a gradientes descontrolados, instabilidades, perdas de NaN e, em última análise, a uma perda total de formação.
4.4 Objectivos de construção
O processo de construção de objectivos 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 adequadas no mapa de saída e a sua correspondência com as caixas de ancoragem adequadas.
Este processo segue os seguintes passos:
- Calcular o rácio entre as dimensões da caixa da verdade terrestre e as dimensões de cada modelo de âncora.
- Se o rácio calculado estiver dentro do limiar, fazer corresponder a caixa da verdade terrestre com a âncora correspondente.
- Atribua 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.
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 .