Saltar para o conteúdo

YOLOv10: Deteção de objectos em tempo real de ponta a ponta

O YOLOv10, construído sobre o pacote Ultralytics Python por investigadores da Universidade de Tsinghua, introduz uma nova abordagem à deteção de objectos em tempo real, resolvendo as deficiências do pós-processamento e da arquitetura do modelo encontradas nas versões anteriores de YOLO . Ao eliminar a supressão não máxima (NMS) e otimizar vários componentes do modelo, o YOLOv10 atinge o desempenho mais avançado com uma sobrecarga computacional significativamente reduzida. Experiências exaustivas demonstram a superioridade da relação precisão-latência em várias escalas de modelos.

YOLOv10 atribuição dupla consistente para formação sem NMS



Ver: Como treinar o YOLOv10 no conjunto de dados SKU-110k utilizando Ultralytics | Conjunto de dados de retalho

Visão geral

A deteção de objectos em tempo real visa prever com precisão as categorias e posições dos objectos nas imagens com baixa latência. A série YOLO tem estado na vanguarda desta investigação devido ao seu equilíbrio entre desempenho e eficiência. No entanto, a dependência de NMS e as ineficiências arquitectónicas têm impedido um desempenho ótimo. O YOLOv10 aborda estas questões introduzindo atribuições duplas consistentes para formação sem NMS e uma estratégia holística de conceção de modelos orientada para a eficiência e a precisão.

Arquitetura

A arquitetura do YOLOv10 baseia-se nos pontos fortes dos modelos anteriores do YOLO , introduzindo simultaneamente várias inovações importantes. A arquitetura do modelo é constituída pelos seguintes componentes:

  1. Backbone: Responsável pela extração de caraterísticas, o backbone no YOLOv10 utiliza uma versão melhorada da CSPNet (Cross Stage Partial Network) para melhorar o fluxo de gradiente e reduzir a redundância computacional.
  2. Pescoço: O pescoço foi concebido para agregar caraterísticas de diferentes escalas e passá-las para a cabeça. Inclui camadas PAN (Path Aggregation Network) para uma fusão eficaz de caraterísticas multiescala.
  3. Cabeça Um-para-Muitos: Gera várias previsões por objeto durante a formação para fornecer sinais de supervisão ricos e melhorar a precisão da aprendizagem.
  4. Cabeça um-para-um: gera uma única melhor previsão por objeto durante a inferência para eliminar a necessidade de NMS, reduzindo assim a latência e melhorando a eficiência.

Caraterísticas principais

  1. Treinamento sem NMS: Utiliza atribuições duplas consistentes para eliminar a necessidade de NMS, reduzindo a latência da inferência.
  2. Conceção holística do modelo: Otimização abrangente de vários componentes, tanto do ponto de vista da eficiência como da precisão, incluindo cabeças de classificação leves, amostragem descendente desacoplada de canais espaciais e conceção de blocos guiados por classificação.
  3. Capacidades de modelo melhoradas: Incorpora convoluções de núcleo grande e módulos de auto-atenção parcial para melhorar o desempenho sem um custo computacional significativo.

Variantes do modelo

O YOLOv10 está disponível em várias escalas de modelos para responder a diferentes necessidades de aplicação:

  • YOLOv10-N: Versão nano para ambientes com recursos extremamente limitados.
  • YOLOv10-S: Versão pequena que equilibra velocidade e precisão.
  • YOLOv10-M: Versão média para utilização geral.
  • YOLOv10-B: Versão equilibrada com maior largura para maior precisão.
  • YOLOv10-L: Versão grande para uma maior precisão à custa de maiores recursos computacionais.
  • YOLOv10-X: Versão extra-grande para máxima precisão e desempenho.

Desempenho

O YOLOv10 supera as versões anteriores do YOLO e outros modelos de última geração em termos de precisão e eficiência. Por exemplo, o YOLOv10-S é 1,8x mais rápido do que o RT-DETR-R18 com AP semelhante no conjunto de dados COCO, e o YOLOv10-B tem 46% menos latência e 25% menos parâmetros do que o YOLOv9-C com o mesmo desempenho.

Modelo Tamanho da entrada APval FLOPs (G) Latência (ms)
YOLOv10-N 640 38.5 6.7 1.84
YOLOv10-S 640 46.3 21.6 2.49
YOLOv10-M 640 51.1 59.1 4.74
YOLOv10-B 640 52.5 92.0 5.74
YOLOv10-L 640 53.2 120.3 7.28
YOLOv10-X 640 54.4 160.4 10.70

Latência medida com TensorRT FP16 em T4 GPU.

Metodologia

Atribuições duplas consistentes para uma formação sem NMS

O YOLOv10 emprega atribuições de rótulos duplos, combinando estratégias um-para-muitos e um-para-um durante o treinamento para garantir uma supervisão rica e uma implantação eficiente de ponta a ponta. A métrica de correspondência consistente alinha a supervisão entre as duas estratégias, melhorando a qualidade das previsões durante a inferência.

Conceção holística de modelos orientada para a eficiência e a precisão

Melhorias de eficiência

  1. Cabeça de classificação leve: Reduz a sobrecarga computacional da cabeça de classificação através da utilização de convoluções separáveis em profundidade.
  2. Amostragem descendente dissociada de canal espacial: Desacopla a redução espacial e a modulação de canal para minimizar a perda de informação e o custo computacional.
  3. Conceção de blocos guiada por classificação: Adapta a conceção de blocos com base na redundância intrínseca das fases, assegurando uma utilização óptima dos parâmetros.

Melhorias de precisão

  1. Convolução de núcleo grande: Aumenta o campo recetivo para melhorar a capacidade de extração de caraterísticas.
  2. Partial Self-Attention (PSA): Incorpora módulos de auto-atenção para melhorar a aprendizagem da representação global com um mínimo de sobrecarga.

Experiências e resultados

O YOLOv10 foi amplamente testado em benchmarks padrão como o COCO, demonstrando desempenho e eficiência superiores. O modelo alcança resultados de ponta em diferentes variantes, apresentando melhorias significativas na latência e precisão em comparação com versões anteriores e outros detectores contemporâneos.

Comparações

Comparação do YOLOv10 com os detectores de objectos SOTA

Em comparação com outros detectores de última geração:

  • O YOLOv10-S / X é 1,8× / 1,3× mais rápido do que o RT-DETR-R18 / R101 com uma precisão semelhante
  • O YOLOv10-B tem menos 25% de parâmetros e uma latência 46% inferior à do YOLOv9-C com a mesma precisão
  • O YOLOv10-L / X é superior ao YOLOv8-L / X em 0,3 AP / 0,5 AP com 1,8× / 2,3× menos parâmetros

Aqui está uma comparação detalhada das variantes do YOLOv10 com outros modelos topo de gama:

Modelo Parâmetros
(M)
FLOPs
(G)
mAPval
50-95
Latência
(ms)
Latência para a frente
(ms)
YOLOv6-3.0-N 4.7 11.4 37.0 2.69 1.76
Ouro-YOLO-N 5.6 12.1 39.6 2.92 1.82
YOLOv8-N 3.2 8.7 37.3 6.16 1.77
YOLOv10-N 2.3 6.7 39.5 1.84 1.79
YOLOv6-3.0-S 18.5 45.3 44.3 3.42 2.35
Ouro-YOLO-S 21.5 46.0 45.4 3.82 2.73
YOLOv8-S 11.2 28.6 44.9 7.07 2.33
YOLOv10-S 7.2 21.6 46.8 2.49 2.39
RT-DETR-R18 20.0 60.0 46.5 4.58 4.49
YOLOv6-3.0-M 34.9 85.8 49.1 5.63 4.56
Ouro-YOLO-M 41.3 87.5 49.8 6.38 5.45
YOLOv8-M 25.9 78.9 50.6 9.50 5.09
YOLOv10-M 15.4 59.1 51.3 4.74 4.63
YOLOv6-3.0-L 59.6 150.7 51.8 9.02 7.90
Ouro-YOLO-L 75.1 151.7 51.8 10.65 9.78
YOLOv8-L 43.7 165.2 52.9 12.39 8.06
RT-DETR-R50 42.0 136.0 53.1 9.20 9.07
YOLOv10-L 24.4 120.3 53.4 7.28 7.21
YOLOv8-X 68.2 257.8 53.9 16.86 12.83
RT-DETR-R101 76.0 259.0 54.3 13.71 13.58
YOLOv10-X 29.5 160.4 54.4 10.70 10.60

Exemplos de utilização

Para prever novas imagens com o YOLOv10:

Exemplo

from ultralytics import YOLO

# Load a pre-trained YOLOv10n model
model = YOLO("yolov10n.pt")

# Perform object detection on an image
results = model("image.jpg")

# Display the results
results[0].show()
# Load a COCO-pretrained YOLOv10n model and run inference on the 'bus.jpg' image
yolo detect predict model=yolov10n.pt source=path/to/bus.jpg

Para treinar o YOLOv10 num conjunto de dados personalizado:

Exemplo

from ultralytics import YOLO

# Load YOLOv10n model from scratch
model = YOLO("yolov10n.yaml")

# Train the model
model.train(data="coco8.yaml", epochs=100, imgsz=640)
# Build a YOLOv10n model from scratch and train it on the COCO8 example dataset for 100 epochs
yolo train model=yolov10n.yaml data=coco8.yaml epochs=100 imgsz=640

# Build a YOLOv10n model from scratch and run inference on the 'bus.jpg' image
yolo predict model=yolov10n.yaml source=path/to/bus.jpg

Tarefas e modos suportados

A série de modelos YOLOv10 oferece uma gama de modelos, cada um optimizado para a Deteção de Objectos de elevado desempenho. Estes modelos respondem a diferentes necessidades computacionais e requisitos de precisão, tornando-os versáteis para uma vasta gama de aplicações.

Modelo Nomes de ficheiros Tarefas Inferência Validação Formação Exportação
YOLOv10 yolov10n.pt yolov10s.pt yolov10m.pt yolov10l.pt yolov10x.pt Deteção de objectos

Exportação do YOLOv10

Devido às novas operações introduzidas com o YOLOv10, nem todos os formatos de exportação fornecidos por Ultralytics são atualmente suportados. A tabela a seguir descreve quais formatos foram convertidos com sucesso usando Ultralytics para YOLOv10. Sinta-se à vontade para abrir uma solicitação de pull se você puder fornecer uma alteração de contribuição para adicionar suporte à exportação de formatos adicionais para YOLOv10.

Formato de exportação Apoio à exportação Inferência de modelos exportados Notas
TorchScript Formato padrão PyTorch formato do modelo.
ONNX Amplamente suportado para implantação.
OpenVINO Optimizado para hardware Intel .
TensorRT Optimizado para NVIDIA GPUs.
CoreML Limitado a dispositivos Apple.
TF SavedModel TensorFlowdo modelo de formato padrão da empresa.
TF GraphDef Formato herdado TensorFlow .
TF Leve Optimizado para dispositivos móveis e incorporado.
TF Borda TPU Específico para os dispositivos Google's Edge TPU .
TF.js Ambiente JavaScript para utilização no browser.
PaddlePaddle Popular na China; menos apoio a nível mundial.
NCNN Camada torch.topk não existe nem está registado

Conclusão

O YOLOv10 estabelece um novo padrão na deteção de objectos em tempo real, resolvendo as deficiências das versões anteriores do YOLO e incorporando estratégias de conceção inovadoras. A sua capacidade de fornecer alta precisão com baixo custo computacional torna-o a escolha ideal para uma ampla gama de aplicações do mundo real.

Citações e agradecimentos

Gostaríamos de agradecer aos autores do YOLOv10 da Universidade de Tsinghua pela sua extensa investigação e contribuições significativas para o Ultralytics estrutura:

@article{THU-MIGyolov10,
  title={YOLOv10: Real-Time End-to-End Object Detection},
  author={Ao Wang, Hui Chen, Lihao Liu, et al.},
  journal={arXiv preprint arXiv:2405.14458},
  year={2024},
  institution={Tsinghua University},
  license = {AGPL-3.0}
}

Para uma implementação detalhada, inovações arquitectónicas e resultados experimentais, consulte o artigo de investigação YOLOv10 e o repositório GitHub da equipa da Universidade de Tsinghua.

FAQ

O que é o YOLOv10 e em que é que difere das versões anteriores do YOLO ?

O YOLOv10, desenvolvido por investigadores da Universidade de Tsinghua, introduz várias inovações importantes na deteção de objectos em tempo real. Elimina a necessidade de supressão não máxima (NMS), empregando atribuições duplas consistentes durante o treino e componentes de modelo optimizados para um desempenho superior com uma sobrecarga computacional reduzida. Para mais detalhes sobre a sua arquitetura e principais caraterísticas, consulte a secção de visão geral do YOLOv10.

Como posso começar a executar a inferência utilizando o YOLOv10?

Para facilitar a inferência, pode utilizar a biblioteca Ultralytics YOLO Python ou a interface de linha de comandos (CLI). Abaixo estão exemplos de previsão de novas imagens usando YOLOv10:

Exemplo

from ultralytics import YOLO

# Load the pre-trained YOLOv10-N model
model = YOLO("yolov10n.pt")
results = model("image.jpg")
results[0].show()
yolo detect predict model=yolov10n.pt source=path/to/image.jpg

Para mais exemplos de utilização, visite a nossa secção Exemplos de utilização.

Que variantes de modelo oferece o YOLOv10 e quais são os seus casos de utilização?

O YOLOv10 oferece várias variantes de modelos para responder a diferentes casos de utilização:

  • YOLOv10-N: Adequado para ambientes com recursos extremamente limitados
  • YOLOv10-S: Equilíbrio entre velocidade e precisão
  • YOLOv10-M: Utilização geral
  • YOLOv10-B: Maior precisão com maior largura
  • YOLOv10-L: Alta precisão à custa de recursos computacionais
  • YOLOv10-X: Máxima precisão e desempenho

Cada variante foi concebida para diferentes necessidades computacionais e requisitos de precisão, tornando-as versáteis para uma variedade de aplicações. Explore a secção Variantes do modelo para obter mais informações.

Como é que a abordagem sem NMS no YOLOv10 melhora o desempenho?

O YOLOv10 elimina a necessidade de supressão não máxima (NMS) durante a inferência, empregando atribuições duplas consistentes para treinamento. Esta abordagem reduz a latência da inferência e melhora a eficiência da previsão. A arquitetura também inclui uma cabeça um-para-um para inferência, garantindo que cada objeto obtém uma única melhor previsão. Para uma explicação detalhada, consulte a secção Atribuições duplas consistentes para formação sem NMS.

Onde posso encontrar as opções de exportação para os modelos YOLOv10?

O YOLOv10 suporta vários formatos de exportação, incluindo TorchScript, ONNX, OpenVINO, e TensorRT. No entanto, nem todos os formatos de exportação fornecidos por Ultralytics são atualmente suportados pelo YOLOv10 devido às suas novas operações. Para obter detalhes sobre os formatos suportados e instruções de exportação, visite a secção Exportar YOLOv10.

Quais são as referências de desempenho dos modelos YOLOv10?

O YOLOv10 supera as versões anteriores do YOLO e outros modelos de última geração, tanto em termos de precisão como de eficiência. Por exemplo, o YOLOv10-S é 1,8x mais rápido do que o RT-DETR-R18 com um PA semelhante no conjunto de dados COCO. O YOLOv10-B apresenta 46% menos latência e 25% menos parâmetros do que o YOLOv9-C com o mesmo desempenho. Os parâmetros de referência detalhados podem ser encontrados na secção Comparações.

📅C riado há 6 meses ✏️ Atualizado há 1 mês

Comentários