Modelo YOLO-World#
O modelo YOLO-World apresenta uma abordagem avançada e em tempo real, baseada em Ultralytics YOLOv8, para tarefas de deteção com vocabulário aberto. Esta inovação permite detetar qualquer objeto numa imagem com base em descrições textuais. Ao reduzir significativamente as exigências computacionais e manter um desempenho competitivo, o YOLO-World afirma-se como uma ferramenta versátil para inúmeras aplicações de visão.
Assista: Fluxo de trabalho de treinamento do YOLO World em conjunto de dados personalizado

Visão geral#
O YOLO-World aborda os desafios dos modelos tradicionais de deteção com vocabulário aberto, que muitas vezes dependem de modelos Transformer pesados que exigem amplos recursos computacionais. A dependência destes modelos de categorias de objetos predefinidas também limita a sua utilidade em cenários dinâmicos. O YOLO-World revitaliza a estrutura YOLOv8 com capacidades de deteção de vocabulário aberto, recorrendo à modelação de linguagem visual e ao pré-treino em conjuntos de dados amplos para identificar uma grande variedade de objetos em cenários de zero-shot com uma eficiência incomparável.
Para tarefas de vocabulário aberto que também exijam máscaras de instância, indicações visuais ou um modo sem indicações, consulta YOLOE, que mantém a mesma API set_classes().
Principais funcionalidades#
-
Solução em tempo real: aproveitando a velocidade computacional das CNNs, o YOLO-World oferece uma solução rápida de deteção com vocabulário aberto, adequada a setores que precisam de resultados imediatos.
-
Eficiência e desempenho: o YOLO-World reduz drasticamente as necessidades computacionais e de recursos sem sacrificar o desempenho, oferecendo uma alternativa robusta a modelos como SAM, mas com uma fração do custo computacional e permitindo aplicações em tempo real.
-
Inferência com vocabulário offline: o YOLO-World introduz uma estratégia de «indicar e detetar», que usa um vocabulário offline para aumentar ainda mais a eficiência. Esta abordagem permite usar indicações personalizadas calculadas previamente, incluindo legendas ou categorias, codificá-las e armazená-las como incorporações de vocabulário offline, simplificando o processo de deteção.
-
Com tecnologia YOLOv8: construído com base em Ultralytics YOLOv8, o YOLO-World tira partido dos avanços mais recentes na deteção de objetos em tempo real para facilitar a deteçã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 velocidade e eficiência nos benchmarks padrão, demonstrando as capacidades superiores do YOLOv8 numa única GPU NVIDIA V100.
-
Aplicações versáteis: a abordagem inovadora do YOLO-World abre novas possibilidades para inúmeras tarefas de visão, oferecendo melhorias de velocidade por várias ordens de grandeza em relação aos métodos existentes.
Modelos disponíveis, tarefas compatíveis e modos de operação#
Esta secção descreve os modelos disponíveis e os respetivos pesos pré-treinados, as tarefas compatíveis e a compatibilidade com vários modos de operação, como Inferência, Validação, Treino e Exportação, assinalados com ✅ para os modos compatíveis e ❌ para os modos não compatíveis.
Todos os pesos YOLOv8-World foram migrados diretamente do repositório oficial YOLO-World, destacando os seus excelentes contributos.
| Tipo de modelo | Pesos pré-treinados | Tarefas suportadas | Treinamento | Validação | Inferência | Exportar |
|---|---|---|---|---|---|---|
| YOLOv8s-world | yolov8s-world.pt | Deteção de objetos | ✅ | ✅ | ✅ | ❌ |
| YOLOv8s-worldv2 | yolov8s-worldv2.pt | Deteção de objetos | ✅ | ✅ | ✅ | ✅ |
| YOLOv8m-world | yolov8m-world.pt | Deteção de objetos | ✅ | ✅ | ✅ | ❌ |
| YOLOv8m-worldv2 | yolov8m-worldv2.pt | Deteção de objetos | ✅ | ✅ | ✅ | ✅ |
| YOLOv8l-world | yolov8l-world.pt | Deteção de objetos | ✅ | ✅ | ✅ | ❌ |
| YOLOv8l-worldv2 | yolov8l-worldv2.pt | Deteção de objetos | ✅ | ✅ | ✅ | ✅ |
| YOLOv8x-world | yolov8x-world.pt | Deteção de objetos | ✅ | ✅ | ✅ | ❌ |
| YOLOv8x-worldv2 | yolov8x-worldv2.pt | Deteçã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 Python. A Ultralytics disponibiliza uma API Python e comandos da CLI fáceis de usar para simplificar o desenvolvimento.
Assista: Exemplos de uso do modelo YOLO-World com Ultralytics | Vocabulário aberto, sem prompts e outros 🚀
Utilização no treino#
Recomendamos vivamente usar yolov8-worldv2 para o treino personalizado, porque oferece suporte ao treino determinístico e facilita a exportação para formatos como ONNX e TensorRT.
A deteção de objetos é simples com o método train, como ilustrado abaixo:
Os modelos *.pt pré-treinados em PyTorch, assim como os ficheiros de configuração *.yaml, podem ser passados à classe YOLOWorld() para criar uma instância do modelo em Python:
from ultralytics import YOLOWorld
# Carrega um modelo YOLOv8s-worldv2 pré-treinado
model = YOLOWorld("yolov8s-worldv2.pt")
# Treina o modelo no conjunto de dados de exemplo COCO8 durante 100 épocas
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
# Executa a inferência com o modelo YOLO-World na imagem 'bus.jpg'
results = model("path/to/bus.jpg")Uso de predição#
A deteção de objetos é simples com o método predict, como ilustrado abaixo:
from ultralytics import YOLOWorld
# Inicializa um modelo YOLO-World
model = YOLOWorld("yolov8s-world.pt") # ou seleciona yolov8m/l-world.pt para tamanhos diferentes
# Executa a inferência com o modelo YOLOv8s-world na imagem especificada
results = model.predict("path/to/image.jpg")
# Mostra os resultados
results[0].show()Este trecho demonstra como é simples 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
# Cria um modelo YOLO-World
model = YOLO("yolov8s-world.pt") # ou seleciona yolov8m/l-world.pt para tamanhos diferentes
# Realiza a validação do modelo no conjunto de dados de exemplo COCO8
metrics = model.val(data="coco8.yaml")Uso do rastreamento#
O rastreio de objetos com o modelo YOLO-World num vídeo/imagens é simplificado da seguinte forma:
from ultralytics import YOLO
# Cria um modelo YOLO-World
model = YOLO("yolov8s-world.pt") # ou seleciona yolov8m/l-world.pt para tamanhos diferentes
# Rastreia com um modelo YOLO-World num vídeo
results = model.track(source="path/to/video.mp4")Os modelos YOLO-World disponibilizados pela Ultralytics vêm pré-configurados com as categorias do conjunto de dados COCO como parte do vocabulário offline, o que aumenta a eficiência para utilizaçã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 necessidade de configuração ou personalização adicionais.
Define prompts#

A estrutura YOLO-World permite especificar classes dinamicamente através de prompts personalizados, dando aos utilizadores a possibilidade de adaptar o modelo às suas necessidades específicas sem novo treino. Esta funcionalidade é especialmente útil para adaptar o modelo a novos domínios ou a tarefas específicas que originalmente não faziam parte dos dados de treino. Ao definir prompts personalizados, os utilizadores podem orientar o foco do modelo para os objetos de interesse, aumentando a relevância e a precisão dos resultados da deteção.
Por exemplo, se a tua aplicação só precisar de detetar objetos das classes 'person' e 'bus', podes especificar estas classes diretamente:
from ultralytics import YOLO
# Inicializa um modelo YOLO-World
model = YOLO("yolov8s-world.pt") # ou escolhe yolov8m/l-world.pt
# Define classes personalizadas
model.set_classes(["person", "bus"])
# Executa a previsão das categorias especificadas numa imagem
results = model.predict("path/to/image.jpg")
# Mostra os resultados
results[0].show()Alguns utilizadores descobriram que adicionar uma string vazia "" como classe de fundo pode melhorar o desempenho da deteção em determinados cenários. Este comportamento parece depender do cenário e o mecanismo exato não é totalmente compreendido:
model.set_classes(["person", "bus", ""])A string vazia permanece em model.names como uma classe própria, inclusive em qualquer modelo que guardes, pelo que as deteções correspondentes são devolvidas com um rótulo vazio. Passa classes=[0, 1] no momento da previsão para manter apenas as tuas classes reais.
Também podes guardar um modelo depois de definir classes personalizadas. Assim, crias uma versão do modelo YOLO-World especializada para o teu caso de utilização específico. Este processo incorpora as definições das classes personalizadas diretamente no ficheiro do modelo, deixando-o pronto para ser usado 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 ele e guarda-o:
from ultralytics import YOLO
# Inicializa um modelo YOLO-World
model = YOLO("yolov8s-world.pt") # ou seleciona yolov8m/l-world.pt
# Define classes personalizadas
model.set_classes(["person", "bus"])
# Guarda o modelo com o vocabulário offline definido
model.save("custom_yolov8s.pt")Depois de guardado, o modelo custom_yolov8s.pt comporta-se como qualquer outro modelo YOLOv8 pré-treinado, mas com uma diferença importante: fica otimizado para detetar apenas as classes que definiste. Esta personalização pode melhorar significativamente o desempenho e a eficiência da deteção nos teus cenários de aplicação específicos.
from ultralytics import YOLO
# Carrega o teu modelo personalizado
model = YOLO("custom_yolov8s.pt")
# Executa a inferência para detetar as tuas classes personalizadas
results = model.predict("path/to/image.jpg")
# Mostra os resultados
results[0].show()Vantagens de guardar com vocabulário personalizado#
- Eficiência: Simplifica o processo de deteção ao concentrar-se nos objetos relevantes, reduzindo a sobrecarga computacional e acelerando a inferência.
- Flexibilidade: Permite adaptar facilmente o modelo a tarefas de deteção novas ou de nicho sem necessidade de treino adicional extensivo nem de recolha de dados.
- Simplicidade: Simplifica a implementação ao eliminar a necessidade de especificar repetidamente classes personalizadas durante a execução, tornando o modelo diretamente utilizável com o vocabulário incorporado.
- Desempenho: Melhora a precisão da deteção das classes especificadas ao concentrar a atenção e os recursos do modelo no reconhecimento dos objetos definidos.
Esta abordagem oferece uma forma poderosa de personalizar modelos de última geração de deteção de objetos para tarefas específicas, tornando a IA avançada mais acessível e aplicável a um leque mais amplo de aplicações práticas.
Reproduzir os resultados oficiais desde o início (experimental)#
Preparar conjuntos de dados#
- Dados de treino
| Conjunto de dados | Tipo | Amostras | Caixas | Ficheiros de anotações |
|---|---|---|---|---|
| Objects365v1 | Deteção | 609k | 9621k | objects365_train.json |
| GQA | Aterramento | 621k | 3681k | final_mixed_train_no_coco.json |
| Flickr30k | Aterramento | 149k | 641k | final_flickr_separateGT_train.json |
- Dados de validação
| Conjunto de dados | Tipo | Ficheiros de anotações |
|---|---|---|
| LVIS minival | Deteção | minival.txt |
Iniciar o treino do zero#
WorldTrainerFromScratch é altamente personalizado para permitir o treino de modelos yolo-world simultaneamente em conjuntos de dados de deteção e de aterramento. Para mais informações, consulta ultralytics.models.yolo.world.train_world.py.
from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch
# Opção 1: Usar um dicionário Python
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"]},
}
# Opção 2: Usar um ficheiro YAML (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, # ou data="yolo_world_data.yaml" se estiveres a usar um ficheiro YAML
batch=128,
epochs=100,
trainer=WorldTrainerFromScratch,
)Citações e agradecimentos#
Agradecemos à Tencent AILab Computer Vision Center pelo seu trabalho pioneiro na deteção de objetos em tempo real com vocabulário aberto usando 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 sobre YOLO-World está disponível no arXiv. O código-fonte do projeto e recursos adicionais podem ser consultados no respetivo repositório GitHub. Apreciamos o compromisso da equipa em promover esta área e em partilhar as suas valiosas perspetivas com a comunidade.
Perguntas frequentes#
O modelo YOLO-World é uma abordagem avançada de deteção de objetos em tempo real, baseada na estrutura Ultralytics YOLOv8. Destaca-se em tarefas de deteção de vocabulário aberto, identificando objetos numa imagem com base em textos descritivos. Ao utilizar modelagem visão-linguagem e pré-treino em grandes conjuntos de dados, o YOLO-World alcança alta eficiência e desempenho com necessidades computacionais significativamente reduzidas, sendo ideal para aplicações em tempo real em vários setores.
O YOLO-World suporta uma estratégia de «prompt e depois detetar», 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 incorporações no vocabulário offline. Esta abordagem simplifica o processo de deteção sem necessidade de novo treino. Podes definir estes prompts dinamicamente no modelo para o adaptar a tarefas de deteção específicas, como mostrado abaixo:
from ultralytics import YOLOWorld # Inicializa um modelo YOLO-World model = YOLOWorld("yolov8s-world.pt") # Define classes personalizadas model.set_classes(["person", "bus"]) # Executa a previsão numa imagem results = model.predict("path/to/image.jpg") # Mostra os resultados results[0].show()O YOLO-World oferece várias vantagens em relação aos modelos tradicionais de deteçã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 baixos requisitos de recursos: O YOLO-World mantém um alto desempenho, reduzindo significativamente as necessidades computacionais e de recursos.
- Prompts personalizáveis: O modelo suporta a definição dinâmica de prompts, permitindo aos utilizadores especificar classes de deteção personalizadas sem novo treino.
- Excelência em benchmarks: Supera outros detetores de vocabulário aberto, como MDETR e GLIP, tanto em velocidade como em eficiência nos benchmarks padrão.
Treinar um modelo YOLO-World com o teu conjunto de dados é simples com a API Python ou os comandos da CLI disponibilizados. Eis como começar o treino usando Python:
from ultralytics import YOLOWorld # Carrega um modelo YOLOv8s-worldv2 pré-treinado model = YOLOWorld("yolov8s-worldv2.pt") # Treina o modelo no conjunto de dados COCO8 durante 100 épocas results = model.train(data="coco8.yaml", epochs=100, imgsz=640)Ou usando CLI:
yolo train model=yolov8s-worldv2.pt 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 Deteção de objetos ✅ ✅ ✅ ❌ YOLOv8s-worldv2 yolov8s-worldv2.pt Deteção de objetos ✅ ✅ ✅ ✅ YOLOv8m-world yolov8m-world.pt Deteção de objetos ✅ ✅ ✅ ❌ YOLOv8m-worldv2 yolov8m-worldv2.pt Deteção de objetos ✅ ✅ ✅ ✅ YOLOv8l-world yolov8l-world.pt Deteção de objetos ✅ ✅ ✅ ❌ YOLOv8l-worldv2 yolov8l-worldv2.pt Deteção de objetos ✅ ✅ ✅ ✅ YOLOv8x-world yolov8x-world.pt Deteção de objetos ✅ ✅ ✅ ❌ YOLOv8x-worldv2 yolov8x-worldv2.pt Deteção de objetos ✅ ✅ ✅ ✅ Para reproduzir os resultados oficiais do zero, tens de preparar os conjuntos de dados e iniciar o treino usando o código fornecido. O procedimento de treino envolve criar um dicionário de dados e executar o 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)