Modelo YOLO-World
O modelo YOLO-World apresenta uma abordagem avançada e em tempo real baseada no Ultralytics YOLOv8 para tarefas de detecção de vocabulário aberto (Open-Vocabulary Detection). Esta inovação permite a detecção de qualquer objeto dentro de uma imagem com base em textos descritivos. Ao reduzir significativamente as demandas computacionais enquanto mantém um desempenho competitivo, o YOLO-World surge como uma ferramenta versátil para inúmeras aplicações baseadas em visão.
Watch: YOLO World training workflow on custom dataset

Visão geral
O YOLO-World enfrenta os desafios encontrados pelos modelos tradicionais de detecção de vocabulário aberto, que frequentemente dependem de modelos Transformer complexos que exigem vastos recursos computacionais. A dependência desses modelos em categorias de objetos pré-definidas também restringe sua utilidade em cenários dinâmicos. O YOLO-World revitaliza a estrutura do YOLOv8 com capacidades de detecção de vocabulário aberto, empregando modelagem de linguagem visual e pré-treinamento em conjuntos de dados expansivos para se destacar na identificação de uma ampla gama de objetos em cenários zero-shot com eficiência inigualável.
Principais recursos
-
Solução em tempo real: Aproveitando a velocidade computacional das CNNs, o YOLO-World entrega uma solução rápida de detecção de vocabulário aberto, atendendo a setores que precisam de resultados imediatos.
-
Eficiência e desempenho: O YOLO-World reduz drasticamente os requisitos computacionais e de recursos sem sacrificar o desempenho, oferecendo uma alternativa robusta a modelos como o SAM, mas a uma fração do custo computacional, permitindo aplicações em tempo real.
-
Inferência com vocabulário offline: O YOLO-World introduz uma estratégia de "prompt-then-detect", empregando um vocabulário offline para aumentar ainda mais a eficiência. Esta abordagem permite o uso de prompts personalizados calculados a priori, incluindo legendas ou categorias, para serem codificados e armazenados como embeddings de vocabulário offline, simplificando o processo de detecção.
-
Potencializado pelo YOLOv8: Construído sobre o Ultralytics YOLOv8, o YOLO-World aproveita os últimos avanços em detecção de objetos em tempo real para facilitar a detecção de vocabulário aberto com precisão e velocidade sem precedentes.
-
Excelência em benchmarks: O YOLO-World supera os detectores de vocabulário aberto existentes, incluindo as séries MDETR e GLIP, em termos de velocidade e eficiência em benchmarks padrão, demonstrando a capacidade superior do YOLOv8 em uma única GPU NVIDIA V100.
-
Aplicações versáteis: A abordagem inovadora do YOLO-World desbloqueia novas possibilidades para uma infinidade de tarefas de visão, entregando melhorias de velocidade por ordens de magnitude em relação aos métodos existentes.
Modelos Disponíveis, Tarefas Suportadas e Modos de Operação
Esta seção detalha os modelos disponíveis com seus pesos pré-treinados específicos, as tarefas que eles suportam e sua compatibilidade com vários modos de operação, como Inference, Validation, Training e Export, denotados por ✅ para modos suportados e ❌ para modos não suportados.
Todos os pesos do YOLOv8-World foram migrados diretamente do repositório oficial YOLO-World, destacando suas excelentes contribuições.
| Tipo de Modelo | Pesos Pré-treinados | Tarefas Suportadas | Inferência (Inference) | Validação | Treinamento | Export |
|---|---|---|---|---|---|---|
| YOLOv8s-world | yolov8s-world.pt | Detecção de Objetos | ✅ | ✅ | ✅ | ❌ |
| YOLOv8s-worldv2 | yolov8s-worldv2.pt | Detecção de Objetos | ✅ | ✅ | ✅ | ✅ |
| YOLOv8m-world | yolov8m-world.pt | Detecção de Objetos | ✅ | ✅ | ✅ | ❌ |
| YOLOv8m-worldv2 | yolov8m-worldv2.pt | Detecção de Objetos | ✅ | ✅ | ✅ | ✅ |
| YOLOv8l-world | yolov8l-world.pt | Detecção de Objetos | ✅ | ✅ | ✅ | ❌ |
| YOLOv8l-worldv2 | yolov8l-worldv2.pt | Detecção de Objetos | ✅ | ✅ | ✅ | ✅ |
| YOLOv8x-world | yolov8x-world.pt | Detecção de Objetos | ✅ | ✅ | ✅ | ❌ |
| YOLOv8x-worldv2 | yolov8x-worldv2.pt | Detecção de Objetos | ✅ | ✅ | ✅ | ✅ |
Transferência Zero-shot no conjunto de dados COCO
| Tipo de Modelo | mAP | mAP50 | mAP75 |
|---|---|---|---|
| yolov8s-world | 37.4 | 52.0 | 40,6 |
| yolov8s-worldv2 | 37.7 | 52.2 | 41.0 |
| yolov8m-world | 42.0 | 57.0 | 45.6 |
| yolov8m-worldv2 | 43.0 | 58.4 | 46.8 |
| yolov8l-world | 45.7 | 61.3 | 49.8 |
| yolov8l-worldv2 | 45.8 | 61.3 | 49.8 |
| yolov8x-world | 47.0 | 63.0 | 51.2 |
| yolov8x-worldv2 | 47.1 | 62.8 | 51.4 |
Exemplos de Uso
Os modelos YOLO-World são fáceis de integrar em suas aplicações Python. O Ultralytics fornece uma Python API e CLI commands amigáveis para agilizar o desenvolvimento.
Watch: YOLO-World Model Usage examples with Ultralytics | Open Vocab, Prompt-Free & others 🚀
Uso de treinamento
Recomendamos fortemente o uso do modelo yolov8-worldv2 para treinamento personalizado, pois ele suporta treinamento determinístico e também a exportação fácil para outros formatos, como onnx/tensorrt.
Object detection é simples com o método train, como ilustrado abaixo:
Modelos PyTorch pré-treinados *.pt, bem como arquivos de configuração *.yaml, podem ser passados para a classe YOLOWorld() para criar uma instância de modelo em python:
from ultralytics import YOLOWorld
# Load a pretrained YOLOv8s-worldv2 model
model = YOLOWorld("yolov8s-worldv2.pt")
# Train the model on the COCO8 example dataset for 100 epochs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
# Run inference with the YOLO-World model on the 'bus.jpg' image
results = model("path/to/bus.jpg")Utilização da Previsão
A detecção de objetos é simples com o método predict, como ilustrado abaixo:
from ultralytics import YOLOWorld
# Initialize a YOLO-World model
model = YOLOWorld("yolov8s-world.pt") # or select yolov8m/l-world.pt for different sizes
# Execute inference with the YOLOv8s-world model on the specified image
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()Este snippet demonstra a simplicidade de carregar um modelo pré-treinado e executar uma previsão numa imagem.
Utilização da Validação
A validação de modelo em um conjunto de dados é simplificada da seguinte forma:
from ultralytics import YOLO
# Create a YOLO-World model
model = YOLO("yolov8s-world.pt") # or select yolov8m/l-world.pt for different sizes
# Conduct model validation on the COCO8 example dataset
metrics = model.val(data="coco8.yaml")Utilização do Rastreamento
Object tracking com o modelo YOLO-World em vídeos/imagens é simplificado da seguinte forma:
from ultralytics import YOLO
# Create a YOLO-World model
model = YOLO("yolov8s-world.pt") # or select yolov8m/l-world.pt for different sizes
# Track with a YOLO-World model on a video
results = model.track(source="path/to/video.mp4")Os modelos YOLO-World fornecidos pelo Ultralytics vêm pré-configurados com as categorias do COCO dataset como parte de seu vocabulário offline, aumentando a eficiência para aplicação imediata. Esta integração permite que os modelos YOLOv8-World reconheçam e prevejam diretamente as 80 categorias padrão definidas no conjunto de dados COCO sem exigir configuração ou personalização adicional.
Definir prompts

A estrutura YOLO-World permite a especificação dinâmica de classes através de prompts personalizados, capacitando os usuários a adaptar o modelo às suas necessidades específicas sem retreinamento. Este recurso é particularmente útil para adaptar o modelo a novos domínios ou tarefas específicas que não faziam parte originalmente dos training data. Ao definir prompts personalizados, você pode essencialmente guiar o foco do modelo para objetos de interesse, aumentando a relevância e a accuracy dos resultados da detecção.
Por exemplo, se sua aplicação exige apenas a detecção de objetos 'person' (pessoa) e 'bus' (ônibus), você pode especificar essas classes diretamente:
from ultralytics import YOLO
# Initialize a YOLO-World model
model = YOLO("yolov8s-world.pt") # or choose yolov8m/l-world.pt
# Define custom classes
model.set_classes(["person", "bus"])
# Execute prediction for specified categories on an image
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()Alguns usuários descobriram que adicionar uma string vazia "" como uma classe de fundo pode melhorar o desempenho da detecção em certos cenários. Esse comportamento parece depender do cenário e o mecanismo exato não é totalmente compreendido:
model.set_classes(["person", "bus", ""])Você também pode salvar um modelo após definir classes personalizadas. Ao fazer isso, você cria uma versão do modelo YOLO-World especializada para o seu caso de uso específico. Este processo incorpora as definições de suas classes personalizadas diretamente no arquivo do modelo, tornando o modelo pronto para uso com suas classes especificadas sem ajustes adicionais. Siga estes passos para salvar e carregar seu modelo YOLO-World personalizado:
Primeiro, carregue um modelo YOLO-World, defina as classes personalizadas para ele e salve-o:
from ultralytics import YOLO
# Initialize a YOLO-World model
model = YOLO("yolov8s-world.pt") # or select yolov8m/l-world.pt
# Define custom classes
model.set_classes(["person", "bus"])
# Save the model with the defined offline vocabulary
model.save("custom_yolov8s.pt")Após salvar, o modelo custom_yolov8s.pt se comporta como qualquer outro modelo YOLOv8 pré-treinado, mas com uma diferença chave: ele agora está otimizado para detectar apenas as classes que você definiu. Essa personalização pode melhorar significativamente o desempenho e a eficiência da detecção para seus cenários de aplicação específicos.
from ultralytics import YOLO
# Load your custom model
model = YOLO("custom_yolov8s.pt")
# Run inference to detect your custom classes
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()Benefícios de salvar com vocabulário personalizado
- Eficiência: Simplifica o processo de detecção ao focar em objetos relevantes, reduzindo a sobrecarga computacional e acelerando a inferência.
- Flexibilidade: Permite a fácil adaptação do modelo para tarefas de detecção novas ou de nicho sem a necessidade de retreinamento extensivo ou coleta de dados.
- Simplicidade: Simplifica a implantação eliminando a necessidade de especificar repetidamente classes personalizadas em tempo de execução, tornando o modelo diretamente utilizável com seu vocabulário incorporado.
- Desempenho: Aumenta a precisão da detecção para classes especificadas ao focar a atenção e os recursos do modelo no reconhecimento dos objetos definidos.
Esta abordagem fornece um meio poderoso de personalizar modelos de object detection de última geração para tarefas específicas, tornando a IA avançada mais acessível e aplicável a uma gama mais ampla de aplicações práticas.
Reproduzir resultados oficiais do zero (Experimental)
Preparar conjuntos de dados
- Dados de treinamento
| Conjunto de Dados | Tipo | Amostras | Boxes | Arquivos de anotação |
|---|---|---|---|---|
| Objects365v1 | Detecção | 609k | 9621k | objects365_train.json |
| GQA | Grounding | 621k | 3681k | final_mixed_train_no_coco.json |
| Flickr30k | Grounding | 149k | 641k | final_flickr_separateGT_train.json |
- Dados de validação
| Conjunto de Dados | Tipo | Arquivos de anotação |
|---|---|---|
| LVIS minival | Detecção | minival.txt |
Inicie o treinamento do zero
WorldTrainerFromScratch é altamente personalizado para permitir o treinamento de modelos yolo-world tanto em datasets de detecção quanto em datasets de grounding simultaneamente. Para mais detalhes, consulte ultralytics.model.yolo.world.train_world.py.
from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch
# Option 1: Use Python dictionary
data = dict(
train=dict(
yolo_data=["Objects365.yaml"],
grounding_data=[
dict(
img_path="flickr30k/images",
json_file="flickr30k/final_flickr_separateGT_train.json",
),
dict(
img_path="GQA/images",
json_file="GQA/final_mixed_train_no_coco.json",
),
],
),
val=dict(yolo_data=["lvis.yaml"]),
)
# Option 2: Use YAML file (yolo_world_data.yaml)
# train:
# yolo_data:
# - Objects365.yaml
# grounding_data:
# - img_path: flickr/full_images/
# json_file: flickr/annotations/final_flickr_separateGT_train_segm.json
# - img_path: mixed_grounding/gqa/images
# json_file: mixed_grounding/annotations/final_mixed_train_no_coco_segm.json
# val:
# yolo_data:
# - lvis.yaml
model = YOLOWorld("yolov8s-worldv2.yaml")
model.train(
data=data, # or data="yolo_world_data.yaml" if using YAML file
batch=128,
epochs=100,
trainer=WorldTrainerFromScratch,
)Citações e Agradecimentos
Estendemos nossa gratidão ao Tencent AILab Computer Vision Center pelo seu trabalho pioneiro em detecção de objetos de vocabulário aberto em tempo real com o YOLO-World:
@article{cheng2024yolow,
title={YOLO-World: Real-Time Open-Vocabulary Object Detection},
author={Cheng, Tianheng and Song, Lin and Ge, Yixiao and Liu, Wenyu and Wang, Xinggang and Shan, Ying},
journal={arXiv preprint arXiv:2401.17270},
year={2024}
}Para leitura adicional, o artigo original do YOLO-World está disponível no arXiv. O código-fonte e recursos adicionais do projeto podem ser acessados através do seu repositório no GitHub. Agradecemos o seu compromisso em avançar a área e compartilhar seus conhecimentos valiosos com a comunidade.
FAQ
O que é o modelo YOLO-World e como ele funciona?
O modelo YOLO-World é uma abordagem avançada de detecção de objetos em tempo real baseada no framework Ultralytics YOLOv8. Ele se destaca em tarefas de Detecção de Vocabulário Aberto ao identificar objetos dentro de uma imagem com base em textos descritivos. Usando modelagem de visão-linguagem e pré-treinamento em grandes datasets, o YOLO-World alcança alta eficiência e desempenho com demandas computacionais significativamente reduzidas, tornando-o ideal para aplicações em tempo real em diversos setores.
Como o YOLO-World lida com a inferência usando prompts personalizados?
O YOLO-World suporta uma estratégia de "prompt-então-detecta", que utiliza um vocabulário offline para aumentar a eficiência. Prompts personalizados, como legendas ou categorias específicas de objetos, são pré-codificados e armazenados como embeddings de vocabulário offline. Esta abordagem simplifica o processo de detecção sem a necessidade de retreinamento. Você pode definir esses prompts dinamicamente dentro do modelo para adaptá-lo a tarefas de detecção específicas, como mostrado abaixo:
from ultralytics import YOLOWorld
# Initialize a YOLO-World model
model = YOLOWorld("yolov8s-world.pt")
# Define custom classes
model.set_classes(["person", "bus"])
# Execute prediction on an image
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()Por que devo escolher o YOLO-World em vez de modelos tradicionais de detecção de Vocabulário Aberto?
O YOLO-World oferece diversas vantagens em relação aos modelos tradicionais de detecção de Vocabulário Aberto:
- Desempenho em Tempo Real: Ele aproveita a velocidade computacional das CNNs para oferecer uma detecção rápida e eficiente.
- Eficiência e Baixa Necessidade de Recursos: O YOLO-World mantém um alto desempenho enquanto reduz significativamente as demandas computacionais e de recursos.
- Prompts Personalizáveis: O modelo suporta a definição dinâmica de prompts, permitindo que os usuários especifiquem classes de detecção personalizadas sem retreinamento.
- Excelência em Benchmarks: Ele supera outros detectores de vocabulário aberto como MDETR e GLIP tanto em velocidade quanto em eficiência em benchmarks padrão.
Como treino um modelo YOLO-World no meu dataset?
Treinar um modelo YOLO-World no seu dataset é simples através da API Python ou dos comandos CLI fornecidos. Veja como começar o treinamento usando Python:
from ultralytics import YOLOWorld
# Load a pretrained YOLOv8s-worldv2 model
model = YOLOWorld("yolov8s-worldv2.pt")
# Train the model on the COCO8 dataset for 100 epochs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)Ou usando a CLI:
yolo train model=yolov8s-worldv2.yaml data=coco8.yaml epochs=100 imgsz=640Quais são os modelos YOLO-World pré-treinados disponíveis e quais tarefas eles suportam?
A Ultralytics oferece vários modelos YOLO-World pré-treinados que suportam diversas tarefas e modos de operação:
| Tipo de Modelo | Pesos Pré-treinados | Tarefas Suportadas | Inferência (Inference) | Validação | Treinamento | Export |
|---|---|---|---|---|---|---|
| YOLOv8s-world | yolov8s-world.pt | Detecção de Objetos | ✅ | ✅ | ✅ | ❌ |
| YOLOv8s-worldv2 | yolov8s-worldv2.pt | Detecção de Objetos | ✅ | ✅ | ✅ | ✅ |
| YOLOv8m-world | yolov8m-world.pt | Detecção de Objetos | ✅ | ✅ | ✅ | ❌ |
| YOLOv8m-worldv2 | yolov8m-worldv2.pt | Detecção de Objetos | ✅ | ✅ | ✅ | ✅ |
| YOLOv8l-world | yolov8l-world.pt | Detecção de Objetos | ✅ | ✅ | ✅ | ❌ |
| YOLOv8l-worldv2 | yolov8l-worldv2.pt | Detecção de Objetos | ✅ | ✅ | ✅ | ✅ |
| YOLOv8x-world | yolov8x-world.pt | Detecção de Objetos | ✅ | ✅ | ✅ | ❌ |
| YOLOv8x-worldv2 | yolov8x-worldv2.pt | Detecção de Objetos | ✅ | ✅ | ✅ | ✅ |
Como posso reproduzir os resultados oficiais do YOLO-World do zero?
Para reproduzir os resultados oficiais do zero, você precisa preparar os datasets e iniciar o treinamento usando o código fornecido. O procedimento de treinamento envolve a criação de um dicionário de dados e a execução do método train com um treinador personalizado:
from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch
data = {
"train": {
"yolo_data": ["Objects365.yaml"],
"grounding_data": [
{
"img_path": "flickr30k/images",
"json_file": "flickr30k/final_flickr_separateGT_train.json",
},
{
"img_path": "GQA/images",
"json_file": "GQA/final_mixed_train_no_coco.json",
},
],
},
"val": {"yolo_data": ["lvis.yaml"]},
}
model = YOLOWorld("yolov8s-worldv2.yaml")
model.train(data=data, batch=128, epochs=100, trainer=WorldTrainerFromScratch)