Modelo YOLO-World
O modelo YOLO introduz um sistema avançado de UltralyticsYOLOv8-para tarefas de deteção de vocabulário aberto. Esta inovação permite a deteção de qualquer objeto numa imagem com base em textos descritivos. Ao reduzir significativamente as exigências computacionais, preservando ao mesmo tempo um desempenho competitivo, YOLO surge como uma ferramenta versátil para inúmeras aplicações baseadas na visão.
Assista: Fluxo de trabalho de treinamento do YOLO World em conjunto de dados personalizado

Visão geral
O YOLO-World enfrenta os desafios dos modelos tradicionais de detecção de Vocabulário Aberto, que geralmente dependem de modelos Transformer complexos que exigem extensos recursos computacionais. A dependência desses modelos em categorias de objetos predefinidas também restringe sua utilidade em cenários dinâmicos. O YOLO-World revitaliza a estrutura YOLOv8 com recursos de detecção de vocabulário aberto, empregando modelagem de visão-linguagem 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 incomparável.
Principais Características
Solução em Tempo Real: Aproveitando a velocidade computacional das CNNs, o YOLO-World oferece uma solução rápida de detecção de vocabulário aberto, atendendo às indústrias 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 aprimorar ainda mais a eficiência. Essa abordagem permite o uso de prompts personalizados computados apriori, incluindo legendas ou categorias, para serem codificados e armazenados como embeddings de vocabulário offline, agilizando o processo de detecção.
Desenvolvido por YOLOv8: Construído sobre o Ultralytics YOLOv8, o YOLO-World aproveita os mais recentes avanços na detecção de objetos em tempo real para facilitar a detecção de vocabulário aberto com precisão e velocidade incomparáveis.
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, proporcionando melhorias de velocidade em 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 suportam e sua compatibilidade com vários modos de operação, como Inferência, Validação, Treinamento e Exportação, denotados por ✅ para modos suportados e ❌ para modos não suportados.
Nota
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 | Validação | Treinamento | Exportar |
|---|---|---|---|---|---|---|
| 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
Desempenho
| 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 seus aplicativos Python. A Ultralytics fornece uma API Python e comandos CLI fáceis de usar para otimizar o desenvolvimento.
Assista: Exemplos de utilização do modelo YOLO com Ultralytics | Open Vocab, Prompt-Free e outros 🚀
Uso do Treino
Dica
Recomendamos vivamente a utilização do yolov8-worldv2 modelo para treino personalizado, pois suporta treino determinístico e também é fácil de exportar para outros formatos, como onnx/tensorrt.
A deteção de objetos é simples com o método train , conforme ilustrado abaixo:
Exemplo
PyTorch pré-treinados *.pt modelos, bem como a configuração *.yaml os arquivos podem ser passados para o YOLOWorld() classe 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")
# Load a pretrained YOLOv8s-worldv2 model and train it on the COCO8 example dataset for 100 epochs
yolo train model=yolov8s-worldv2.yaml data=coco8.yaml epochs=100 imgsz=640
Uso da Predição
A deteção de objetos é simples com o predict , conforme ilustrado abaixo:
Exemplo
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()
# Perform object detection using a YOLO-World model
yolo predict model=yolov8s-world.pt source=path/to/image.jpg imgsz=640
Este trecho demonstra a simplicidade de carregar um modelo pré-treinado e executar uma previsão numa imagem.
Uso da Validação
A validação do modelo num conjunto de dados é simplificada da seguinte forma:
Exemplo
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")
# Validate a YOLO-World model on the COCO8 dataset with a specified image size
yolo val model=yolov8s-world.pt data=coco8.yaml imgsz=640
Uso do Rastreamento
O rastreamento de objetos com o modelo YOLO-World em um vídeo/imagens é simplificado da seguinte forma:
Exemplo
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")
# Track with a YOLO-World model on the video with a specified image size
yolo track model=yolov8s-world.pt imgsz=640 source="path/to/video.mp4"
Nota
Os modelos YOLO-World fornecidos pela Ultralytics vêm pré-configurados com categorias do conjunto de dados COCO como parte do 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 necessitar de configuração ou personalização adicional.
Definir prompts

A estrutura YOLO-World permite a especificação dinâmica de classes por meio de prompts personalizados, capacitando os usuários a adaptar o modelo às suas necessidades específicas sem retreinar. Esse recurso é particularmente útil para adaptar o modelo a novos domínios ou tarefas específicas que não faziam parte originalmente dos dados de treinamento. Ao definir prompts personalizados, os usuários podem essencialmente orientar o foco do modelo para objetos de interesse, aumentando a relevância e a precisão dos resultados da detecção.
Por exemplo, se a sua aplicação exigir apenas a deteção de objetos 'pessoa' e 'autocarro', pode especificar estas classes diretamente:
Exemplo
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()
Também pode guardar um modelo depois de definir classes personalizadas. Ao fazer isto, cria uma versão do modelo YOLO-World especializada para o seu caso de uso específico. Este processo incorpora as suas definições de classe personalizadas diretamente no ficheiro do modelo, tornando o modelo pronto a usar com as classes especificadas sem ajustes adicionais. Siga estes passos para guardar e carregar o seu modelo YOLOv8 personalizado:
Exemplo
Primeiro, carregue um modelo YOLO-World, defina classes personalizadas para ele e guarde-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 guardar, o modelo custom_yolov8s.pt comporta-se como qualquer outro modelo YOLOv8 pré-treinado, mas com uma diferença fundamental: agora está otimizado para detetar apenas as classes que definiu. Esta personalização pode melhorar significativamente o desempenho e a eficiência da deteção para os 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 deteção, concentrando-se em objetos relevantes, reduzindo a sobrecarga computacional e acelerando a inferência.
- Flexibilidade: Permite uma fácil adaptação do modelo a tarefas de deteção novas ou de nicho, sem a necessidade de um extenso re-treino ou recolha de dados.
- Simplicidade: Simplifica a implementação, eliminando a necessidade de especificar repetidamente classes personalizadas em tempo de execução, tornando o modelo diretamente utilizável com o seu vocabulário incorporado.
- Desempenho: Aumenta a precisão da detecção para classes especificadas, concentrando a atenção e os recursos do modelo no reconhecimento dos objetos definidos.
Esta abordagem oferece um meio poderoso de personalizar modelos de detecção de objetos 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 treino
| Conjunto de dados | Tipo | Amostras | Boxes | Ficheiros 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 | Ficheiros de Anotação |
|---|---|---|
| LVIS minival | Detecção | minival.txt |
Iniciar o treinamento do zero
Nota
WorldTrainerFromScratch é altamente personalizado para permitir o treino de modelos YOLO-World em conjuntos de dados de deteção e conjuntos de dados de grounding simultaneamente. Para mais detalhes, consulte ultralytics.model.yolo.world.train_world.py.
Exemplo
from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch
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"]),
)
model = YOLOWorld("yolov8s-worldv2.yaml")
model.train(data=data, batch=128, epochs=100, trainer=WorldTrainerFromScratch)
Citações e Agradecimentos
Agradecemos ao Tencent AILab Computer Vision Center pelo seu trabalho pioneiro na deteçã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 mais informações, o artigo original do YOLO-World está disponível no arXiv. O código fonte do projeto e recursos adicionais podem ser acedidos através do seu repositório GitHub. Agradecemos o seu compromisso em fazer avançar o campo e partilhar os seus valiosos conhecimentos com a comunidade.
FAQ
O que é o modelo YOLO-World e como ele funciona?
O modelo YOLO-World é uma abordagem avançada de deteção de objetos em tempo real baseada na framework Ultralytics YOLOv8. Destaca-se em tarefas de Deteção de Vocabulário Aberto, identificando objetos dentro de uma imagem com base em textos descritivos. Utilizando modelagem de visão-linguagem e pré-treino em grandes conjuntos de dados, o YOLO-World alcança alta eficiência e desempenho com exigências computacionais significativamente reduzidas, tornando-o ideal para aplicações em tempo real em vários setores.
Como o YOLO-World lida com a inferência com prompts personalizados?
O YOLO-World suporta uma estratégia de "prompt-then-detect", que utiliza um vocabulário offline para aumentar a eficiência. Prompts personalizados, como legendas ou categorias de objetos específicos, são pré-codificados e armazenados como embeddings de vocabulário offline. Esta abordagem agiliza o processo de deteção sem a necessidade de re-treino. Pode definir dinamicamente estes prompts dentro do modelo para o adaptar a tarefas de deteçã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 dos modelos tradicionais de detecção de Vocabulário Aberto?
O YOLO-World oferece várias vantagens sobre os modelos tradicionais de detecção de Vocabulário Aberto:
- Desempenho em Tempo Real: Aproveita a velocidade computacional das CNNs para oferecer uma deteção rápida e eficiente.
- Eficiência e Baixo Requisito de Recursos: O YOLO-World mantém um alto desempenho, reduzindo significativamente as exigências computacionais e de recursos.
- Prompts Personalizáveis: O modelo suporta a definição de prompts dinâmicos, permitindo que os usuários especifiquem classes de detecção personalizadas sem novo treinamento.
- Excelência em Benchmarks: Ele supera outros detectores de vocabulário aberto como MDETR e GLIP em velocidade e eficiência em benchmarks padrão.
Como faço para treinar um modelo YOLO-World no meu conjunto de dados?
Treinar um modelo YOLO-World no seu conjunto de dados é simples através da API Python fornecida ou dos comandos da CLI. 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=640
Quais são os modelos YOLO-World pré-treinados disponíveis e suas tarefas suportadas?
A Ultralytics oferece vários modelos YOLO-World pré-treinados que suportam várias tarefas e modos de operação:
| Tipo de Modelo | Pesos Pré-treinados | Tarefas Suportadas | Inferência | Validação | Treinamento | Exportar |
|---|---|---|---|---|---|---|
| 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 reproduzo os resultados oficiais do YOLO-World do zero?
Para reproduzir os resultados oficiais do zero, você precisa preparar os conjuntos de dados 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 train método 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)