Modelo YOLO-World#
O YOLO-World Model introduz uma abordagem avançada e em tempo real baseada no Ultralytics YOLOv8 para tarefas de Detecção de Vocabulário Aberto. 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 preserva o 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 aborda os desafios enfrentados pelos modelos tradicionais de detecção de vocabulário aberto, que frequentemente dependem de modelos Transformer complexos que exigem recursos computacionais extensivos. 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 o framework YOLOv8 com capacidades de detecção de vocabulário aberto, empregando modelagem de visão-linguagem e pré-treinamento em conjuntos de dados extensivos para se destacar na identificação de uma ampla gama de objetos em cenários zero-shot com eficiência incomparável.
Para trabalho de vocabulário aberto que também precise de máscaras de instâncias, prompts visuais ou um modo sem prompt, consulta YOLOE, que mantém a mesma API set_classes().
Principais recursos#
-
Solução em tempo real: Aproveitando a velocidade computacional das CNNs, o YOLO-World oferece uma solução rápida de deteção de vocabulário aberto, atendendo a indústrias que necessitam de resultados imediatos.
-
Eficiência e Desempenho: O YOLO-World reduz 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 "detetar após pedir" (prompt-then-detect), empregando um vocabulário offline para aumentar ainda mais a eficiência. Esta abordagem permite que prompts personalizados calculados a priori, incluindo legendas ou categorias, sejam codificados e armazenados como embeddings de vocabulário offline, simplificando o processo de deteção.
-
Desenvolvido com YOLOv8: Construído sobre o Ultralytics YOLOv8, o YOLO-World aproveita os mais recentes avanços em 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 detetores 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 num único GPU NVIDIA V100.
-
Aplicações Versáteis: A abordagem inovadora do YOLO-World desbloqueia novas possibilidades para uma multiplicidade de tarefas de visão, proporcionando melhorias de velocidade por ordens de magnitude em comparação com os 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 do YOLO-World, destacando suas excelentes contribuições.
| Tipo de Modelo | Pesos Pré-treinados | Tarefas Suportadas | Treinamento | Validação | Inferência | 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#
| 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 nas tuas aplicações em Python. A Ultralytics fornece uma Python API amigável e comandos CLI para agilizar o desenvolvimento.
Watch: YOLO-World Model Usage examples with Ultralytics | Open Vocab, Prompt-Free & others 🚀
Utilização do Treino#
Recomendamos fortemente o uso de yolov8-worldv2 para treinos personalizados, pois ele suporta treinamento determinístico e exporta com mais facilidade para formatos como ONNX e TensorRT.
A Object detection é simples com o método train, conforme ilustrado abaixo:
Modelos *.pt pré-treinados em PyTorch, bem como ficheiros 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")Uso de Predição#
A detecção de objetos é simples com o método predict, conforme 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 trecho demonstra a simplicidade de carregar um modelo pré-treinado e executar uma predição em uma imagem.
Uso de Validação#
A validação do modelo num 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")Uso de Rastreamento#
O Object tracking com o modelo YOLO-World em um vídeo/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 pela Ultralytics vêm pré-configurados com as categorias do COCO dataset como parte de seu vocabulário offline, aprimorando a eficiência para aplicação imediata. Essa integração permite que os modelos YOLOv8-World reconheçam e predigam diretamente as 80 categorias padrão definidas no COCO dataset sem exigir configuração ou personalização adicional.
Definir prompts#

O framework YOLO-World permite a especificação dinâmica de classes por meio de prompts personalizados, capacitando os utilizadores a adaptar o modelo às suas necessidades específicas sem necessidade de retreinamento. Esse recurso é particularmente útil para adaptar o modelo a novos domínios ou tarefas específicas que não faziam parte originalmente do training data. Ao definir prompts personalizados, tu podes essencialmente guiar o foco do modelo para os objetos de interesse, aprimorando a relevância e a accuracy dos resultados de detecção.
Por exemplo, se a tua aplicação apenas necessitar de detetar objetos 'person' e 'bus', podes especificar estas 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 utilizadores descobriram que adicionar uma string vazia "" como classe de fundo pode melhorar o desempenho da detecção em determinados cenários. Esse comportamento parece depender do cenário e o mecanismo exato não é totalmente compreendido:
model.set_classes(["person", "bus", ""])Também podes guardar um modelo após definir classes personalizadas. Ao fazê-lo, crias uma versão do modelo YOLO-World que é especializada para o teu caso de uso específico. Este processo incorpora as tuas definições de classes personalizadas diretamente no ficheiro do modelo, tornando o modelo pronto a utilizar com as classes especificadas sem ajustes adicionais. Segue estes passos para guardar e carregar o teu modelo YOLO-World personalizado:
Primeiro, carrega um modelo YOLO-World, define classes personalizadas para o mesmo e guarda-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: está agora otimizado para detetar apenas as classes que definiste. Esta personalização pode melhorar significativamente o desempenho e a eficiência da deteção para os teus 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 Guardar com Vocabulário Personalizado#
- Eficiência: Simplifica o processo de deteção ao focar-se em objetos relevantes, reduzindo a carga computacional e acelerando a inferência.
- Flexibilidade: Permite uma adaptação fácil do modelo a tarefas de deteção novas ou de nicho, sem a necessidade de um re-treino extensivo ou recolha de dados.
- Simplicidade: Simplifica a implementação ao eliminar 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: Melhora a precisão da deteção para as classes especificadas, focando 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 ponta 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 a partir do zero (Experimental)#
Preparar conjuntos de dados#
- Dados de treino
| Conjunto de dados | Tipo | Amostras | Caixas (Boxes) | Ficheiros de Anotação |
|---|---|---|---|---|
| Objects365v1 | Deteçã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 | Deteção | minival.txt |
Iniciar 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, consulta ultralytics.models.yolo.world.train_world.py.
from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch
# Option 1: Use Python dictionary
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"]},
}
# 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#
Expressamos nossa gratidão ao Tencent AILab Computer Vision Center pelo 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 do projeto e recursos adicionais podem ser acessados através do seu GitHub repository. Agradecemos o compromisso deles em avançar na área e compartilhar seus valiosos insights com a comunidade.
FAQ#
O YOLO-World model é 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. Utilizando modelagem de visão-linguagem e pré-treinamento em grandes conjuntos de dados, 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 vários setores.
O YOLO-World suporta uma estratégia de "prompt-then-detect", que utiliza um vocabulário offline para aprimorar 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. Podes definir dinamicamente estes prompts dentro do modelo para adaptá-lo a tarefas de detecção específicas, conforme 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()O YOLO-World oferece várias 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 em velocidade e eficiência em benchmarks padrão.
Treinar um modelo YOLO-World no seu conjunto de dados é simples através da API Python ou dos comandos CLI fornecidos. Veja como iniciar 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 CLI:
yolo train model=yolov8s-worldv2.yaml data=coco8.yaml epochs=100 imgsz=640A 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 Treinamento Validação Inferência 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 ✅ ✅ ✅ ✅ Para reproduzir os resultados oficiais do zero, precisas de 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 método
traincom 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)