YOLOv10: Detecção de Objetos End-to-End em Tempo Real
O YOLOv10, construído no pacote Python Ultralytics por pesquisadores da Universidade de Tsinghua, introduz uma nova abordagem para a detecção de objetos em tempo real, abordando tanto as deficiências de pós-processamento quanto as de arquitetura de modelo encontradas em versões anteriores do YOLO. Ao eliminar a supressão não máxima (NMS) e otimizar vários componentes do modelo, o YOLOv10 alcança um desempenho de última geração com uma sobrecarga computacional significativamente reduzida. Experimentos extensivos demonstram suas vantagens superiores de precisão e latência em várias escalas de modelo.
Assista: Como Treinar o YOLOv10 no Dataset SKU-110k usando Ultralytics | Dataset de Varejo
Visão geral
A detecção de objetos em tempo real visa prever com precisão as categorias e posições dos objetos em imagens com baixa latência. A série YOLO tem estado na vanguarda desta pesquisa devido ao seu equilíbrio entre desempenho e eficiência. No entanto, a dependência do NMS e as ineficiências arquitetônicas têm prejudicado o desempenho ideal. O YOLOv10 aborda essas questões introduzindo atribuições duplas consistentes para treinamento sem NMS e uma estratégia holística de design de modelo orientada à eficiência e precisão.
Arquitetura
A arquitetura do YOLOv10 se baseia nos pontos fortes dos modelos YOLO anteriores, ao mesmo tempo em que introduz várias inovações importantes. A arquitetura do modelo consiste nos seguintes componentes:
- Backbone: Responsável pela extração de características, o backbone no YOLOv10 usa uma versão aprimorada do CSPNet (Cross Stage Partial Network) para melhorar o fluxo de gradiente e reduzir a redundância computacional.
- Neck: O neck é projetado para agregar recursos de diferentes escalas e passá-los para o head. Ele inclui camadas PAN (Path Aggregation Network) para uma fusão eficaz de recursos multiescala.
- Head Um-para-Muitos: Gera múltiplas previsões por objeto durante o treinamento para fornecer sinais de supervisão ricos e melhorar a precisão do aprendizado.
- Head 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.
Principais Características
- Treinamento sem NMS: Utiliza atribuições duplas consistentes para eliminar a necessidade de NMS, reduzindo a latência de inferência.
- Design de Modelo Holístico: Otimização abrangente de vários componentes, tanto da perspectiva de eficiência quanto de precisão, incluindo heads de classificação leves, down sampling espacial-canal desacoplado e design de bloco guiado por classificação.
- Capacidades de Modelo Aprimoradas: Incorpora convoluções de kernel grande e módulos de autoatenção parcial para melhorar o desempenho sem custo computacional significativo.
Variantes de Modelo
O YOLOv10 está disponível em várias escalas de modelo para atender a diferentes necessidades de aplicação:
- YOLOv10n: Versão Nano para ambientes extremamente limitados em recursos.
- YOLOv10s: Versão pequena que equilibra velocidade e precisão.
- YOLOv10m: Versão média para uso geral.
- YOLOv10b: Versão equilibrada com largura aumentada para maior precisão.
- YOLOv10l: Versão grande para maior precisão ao custo de recursos computacionais aumentados.
- YOLOv10x: 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 ponta em termos de precisão e eficiência. Por exemplo, o YOLOv10s é 1,8x mais rápido que o RT-DETR-R18 com AP semelhante no conjunto de dados COCO, e o YOLOv10b tem 46% menos latência e 25% menos parâmetros do que o YOLOv9-C com o mesmo desempenho.
Desempenho
Latência medida com TensorRT FP16 na GPU T4.
Modelo | Tamanho da Entrada | APval | FLOPs (G) | Latência (ms) |
---|---|---|---|---|
YOLOv10n | 640 | 38.5 | 6.7 | 1.84 |
YOLOv10s | 640 | 46.3 | 21.6 | 2.49 |
YOLOv10m | 640 | 51.1 | 59.1 | 4.74 |
YOLOv10b | 640 | 52.5 | 92.0 | 5.74 |
YOLOv10l | 640 | 53.2 | 120.3 | 7.28 |
YOLOv10x | 640 | 54.4 | 160.4 | 10.70 |
Metodologia
Atribuições Duplas Consistentes para Treinamento Livre de NMS
O YOLOv10 emprega atribuições de rótulos duplos, combinando estratégias de 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 ambas as estratégias, aprimorando a qualidade das previsões durante a inferência.
Eficiência Holística - Design de Modelo Impulsionado pela Precisão
Melhorias de Eficiência
- Cabeçalho de Classificação Leve: Reduz a sobrecarga computacional do cabeçalho de classificação usando convoluções separáveis em profundidade.
- Subamostragem Desacoplada Espacial-Canal: Desacopla a redução espacial e a modulação de canal para minimizar a perda de informação e o custo computacional.
- Design de Bloco Guiado por Ranqueamento: Adapta o design do bloco com base na redundância intrínseca do estágio, garantindo a utilização ideal dos parâmetros.
Melhorias de Precisão
- Convolução de Kernel Grande: Amplia o campo receptivo para melhorar a capacidade de extração de recursos.
- Autoatenção Parcial (PSA): Incorpora módulos de autoatenção para melhorar o aprendizado de representação global com sobrecarga mínima.
Experimentos e Resultados
O YOLOv10 foi extensivamente testado em benchmarks padrão como o COCO, demonstrando desempenho e eficiência superiores. O modelo alcança resultados de última geração em diferentes variantes, mostrando melhorias significativas em latência e precisão em comparação com versões anteriores e outros detectores contemporâneos.
Comparações
Comparado com outros detectores de última geração:
- YOLOv10s / x são 1,8× / 1,3× mais rápidos que RT-DETR-R18 / R101 com precisão similar
- YOLOv10b tem 25% menos parâmetros e 46% menor latência do que YOLOv9-C com a mesma precisão
- YOLOv10l / x supera YOLOv8l / x em 0,3 AP / 0,5 AP com 1,8× / 2,3× menos parâmetros
Desempenho
Aqui está uma comparação detalhada das variantes do YOLOv10 com outros modelos de última geração:
Modelo | Parâmetros (M) |
FLOPs (G) |
mAPval 50-95 |
Latência (ms) |
Latência-forward (ms) |
---|---|---|---|---|---|
YOLOv6-3.0-N | 4.7 | 11.4 | 37.0 | 2.69 | 1.76 |
Gold-YOLO-N | 5.6 | 12.1 | 39.6 | 2.92 | 1.82 |
YOLOv8n | 3.2 | 8.7 | 37.3 | 6.16 | 1.77 |
YOLOv10n | 2.3 | 6.7 | 39.5 | 1.84 | 1.79 |
YOLOv6-3.0-S | 18.5 | 45.3 | 44.3 | 3.42 | 2.35 |
Gold-YOLO-S | 21.5 | 46.0 | 45.4 | 3.82 | 2.73 |
YOLOv8s | 11.2 | 28.6 | 44.9 | 7.07 | 2.33 |
YOLOv10s | 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 |
Gold-YOLO-M | 41.3 | 87.5 | 49.8 | 6.38 | 5.45 |
YOLOv8m | 25.9 | 78.9 | 50.6 | 9.50 | 5.09 |
YOLOv10m | 15.4 | 59.1 | 51.3 | 4.74 | 4.63 |
YOLOv6-3.0-L | 59.6 | 150.7 | 51.8 | 9.02 | 7.90 |
Gold-YOLO-L | 75.1 | 151.7 | 51.8 | 10.65 | 9.78 |
YOLOv8l | 43.7 | 165.2 | 52.9 | 12.39 | 8.06 |
RT-DETR-R50 | 42.0 | 136.0 | 53.1 | 9.20 | 9.07 |
YOLOv10l | 24.4 | 120.3 | 53.4 | 7.28 | 7.21 |
YOLOv8x | 68.2 | 257.8 | 53.9 | 16.86 | 12.83 |
RT-DETR-R101 | 76.0 | 259.0 | 54.3 | 13.71 | 13.58 |
YOLOv10x | 29.5 | 160.4 | 54.4 | 10.70 | 10.60 |
Exemplos de uso
Para prever novas imagens com 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 otimizado para Detecção de Objetos de alto desempenho. Estes modelos atendem a diferentes necessidades computacionais e requisitos de precisão, tornando-os versáteis para uma vasta gama de aplicações.
Modelo | Nomes de arquivos | Tarefas | Inferência | Validação | Treinamento | Exportar |
---|---|---|---|---|---|---|
YOLOv10 | yolov10n.pt yolov10s.pt yolov10m.pt yolov10l.pt yolov10x.pt |
Detecção de Objetos | ✅ | ✅ | ✅ | ✅ |
Exportando YOLOv10
Devido às novas operações introduzidas com o YOLOv10, nem todos os formatos de exportação fornecidos pela Ultralytics são atualmente suportados. A tabela seguinte descreve quais os formatos que foram convertidos com sucesso utilizando a Ultralytics para o YOLOv10. Sinta-se à vontade para abrir um pull request se puder fornecer uma alteração de contribuição para adicionar suporte à exportação de formatos adicionais para o YOLOv10.
Formato de Exportação | Suporte à Exportação | Inferência do Modelo Exportado | Notas |
---|---|---|---|
TorchScript | ✅ | ✅ | Formato de modelo PyTorch padrão. |
ONNX | ✅ | ✅ | Amplamente suportado para implementação. |
OpenVINO | ✅ | ✅ | Otimizado para hardware Intel. |
TensorRT | ✅ | ✅ | Otimizado para GPUs NVIDIA. |
CoreML | ✅ | ✅ | Limitado a dispositivos Apple. |
TF SavedModel | ✅ | ✅ | Formato de modelo padrão do TensorFlow. |
TF GraphDef | ✅ | ✅ | Formato TensorFlow legado. |
TF Lite | ✅ | ✅ | Otimizado para dispositivos móveis e embarcados. |
TF Edge TPU | ✅ | ✅ | Específico para dispositivos Edge TPU da Google. |
TF.js | ✅ | ✅ | Ambiente JavaScript para uso no navegador. |
PaddlePaddle | ❌ | ❌ | Popular na China; menor suporte global. |
NCNN | ✅ | ❌ | Camada torch.topk não existe ou não está registada |
Conclusão
O YOLOv10 estabelece um novo padrão na detecção de objetos em tempo real, abordando as deficiências das versões anteriores do YOLO e incorporando estratégias de design inovadoras. A sua capacidade de fornecer alta precisão com baixo custo computacional torna-o uma escolha ideal para uma vasta gama de aplicações do mundo real, incluindo fabrico, retalho e veículos autónomos.
Citações e Agradecimentos
Gostaríamos de agradecer aos autores do YOLOv10 da Universidade de Tsinghua pela sua extensa pesquisa e contribuições significativas para o framework Ultralytics:
@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 arquitetónicas e resultados experimentais, consulte o artigo de pesquisa do YOLOv10 e o repositório GitHub da equipa da Universidade de Tsinghua.
FAQ
O que é YOLOv10 e como ele difere das versões anteriores do YOLO?
O YOLOv10, desenvolvido por pesquisadores da Universidade de Tsinghua, introduz várias inovações importantes para a detecção de objetos em tempo real. Elimina a necessidade de supressão não máxima (NMS) empregando atribuições duplas consistentes durante o treinamento e componentes de modelo otimizados para um desempenho superior com sobrecarga computacional reduzida. Para mais detalhes sobre sua arquitetura e principais recursos, consulte a seção de visão geral do YOLOv10.
Como posso começar a executar a inferência usando YOLOv10?
Para facilitar a inferência, você pode usar a biblioteca Ultralytics YOLO em python ou a interface de linha de comando (CLI). Abaixo estão exemplos de previsão de novas imagens usando YOLOv10:
Exemplo
from ultralytics import YOLO
# Load the pre-trained YOLOv10n 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 uso, visite nossa seção de Exemplos de Uso.
Quais variantes de modelo o YOLOv10 oferece e quais são seus casos de uso?
O YOLOv10 oferece várias variantes de modelo para atender a diferentes casos de uso:
- YOLOv10n: Adequado para ambientes extremamente limitados em recursos
- YOLOv10s: Equilibra velocidade e precisão
- YOLOv10m: Uso geral
- YOLOv10b: Maior precisão com largura aumentada
- YOLOv10l: Alta precisão ao custo de recursos computacionais
- YOLOv10x: Máxima precisão e desempenho
Cada variante é projetada para diferentes necessidades computacionais e requisitos de precisão, tornando-as versáteis para uma variedade de aplicações. Explore a seção de Variantes de Modelo para obter mais informações.
Como a abordagem livre de 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 o treinamento. Essa abordagem reduz a latência de inferência e aumenta a eficiência da previsão. A arquitetura também inclui um cabeçalho individual para inferência, garantindo que cada objeto receba uma única melhor previsão. Para uma explicação detalhada, consulte a seção de Atribuições Duplas Consistentes para Treinamento Livre de NMS.
Onde posso encontrar as opções de exportação para 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 pela Ultralytics são atualmente suportados para YOLOv10 devido às suas novas operações. Para obter detalhes sobre os formatos suportados e instruções sobre como exportar, visite a seção Exportando YOLOv10.
Quais são os benchmarks de desempenho para modelos YOLOv10?
O YOLOv10 supera as versões anteriores do YOLO e outros modelos de ponta em precisão e eficiência. Por exemplo, o YOLOv10s é 1,8x mais rápido que o RT-DETR-R18 com um AP semelhante no conjunto de dados COCO. O YOLOv10b mostra 46% menos latência e 25% menos parâmetros do que o YOLOv9-C com o mesmo desempenho. Benchmarks detalhados podem ser encontrados na seção Comparações.