Skip to main content

Modelo YOLO-World

O modelo YOLO-World apresenta uma abordagem avançada de tempo real baseada em Ultralytics YOLOv8-based para tarefas de Detecção de Vocabulário Aberto. Esta inovação possibilita a detecção de qualquer objeto em 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 da arquitetura do modelo YOLO-World

Visão geral

O YOLO-World resolve os desafios enfrentados pelos modelos tradicionais de detecção de vocabulário aberto, que frequentemente dependem de modelos Transformer pesados 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 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 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

  1. 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 a setores que precisam de resultados imediatos.

  2. Eficiência e Desempenho: O YOLO-World corta os requisitos computacionais e de recursos sem sacrificar o desempenho, oferecendo uma alternativa robusta a modelos como SAM, mas a uma fração do custo computacional, permitindo aplicações em tempo real.

  3. Inferência com Vocabulário Offline: O YOLO-World introduz uma estratégia de "solicitar-então-detectar", 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.

  4. Desenvolvido 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 inigualáveis.

  5. 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.

  6. 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 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 suportam e sua compatibilidade com vários modos de operação, como Inference, Validação, Treinamento, e Export, 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 ModeloPesos Pré-treinadosTarefas SuportadasInferenceValidaçãoTreinamentoExport
YOLOv8s-worldyolov8s-world.ptDetecção de objetos
YOLOv8s-worldv2yolov8s-worldv2.ptDetecção de objetos
YOLOv8m-worldyolov8m-world.ptDetecção de objetos
YOLOv8m-worldv2yolov8m-worldv2.ptDetecção de objetos
YOLOv8l-worldyolov8l-world.ptDetecção de objetos
YOLOv8l-worldv2yolov8l-worldv2.ptDetecção de objetos
YOLOv8x-worldyolov8x-world.ptDetecção de objetos
YOLOv8x-worldv2yolov8x-worldv2.ptDetecção de objetos

Transferência Zero-shot no conjunto de dados COCO

Desempenho
Tipo de ModelomAPmAP50mAP75
yolov8s-world37.452.040.6
yolov8s-worldv237.752.241.0
yolov8m-world42.057.045.6
yolov8m-worldv243.058.446.8
yolov8l-world45.761.349.8
yolov8l-worldv245.861.349.8
yolov8x-world47.063.051.2
yolov8x-worldv247.162.851.4

Exemplos de Uso

Os modelos YOLO-World são fáceis de integrar nas suas aplicações Python. A Ultralytics fornece um Python API e CLI commands amigável para simplificar o desenvolvimento.



Watch: YOLO-World Model Usage examples with Ultralytics | Open Vocab, Prompt-Free & others 🚀

Uso de Treinamento

Dica

Recomendamos fortemente usar o modelo yolov8-worldv2 para treinamento personalizado, pois ele suporta treinamento determinístico e também é fácil de exportar para outros formatos, como onnx/tensorrt.

Detecção de objetos é simples com o método train, como ilustrado abaixo:

Exemplo

Modelos PyTorch*.pt pré-treinados, 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")

Uso de Predição

A detecção de objetos é simples com o predict, como 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()

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 em um 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")

Uso de 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")
Nota

Os modelos YOLO-World fornecidos pela Ultralytics vêm pré-configurados com COCO dataset categorias como parte do seu vocabulário offline, aumentando a eficiência para aplicação imediata. Essa 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

Visão geral dos nomes de classe dos prompts do YOLO-World

O framework 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 retreinamento. Esse recurso é particularmente útil para adaptar o modelo a novos domínios ou tarefas específicas que não faziam parte originalmente do são essenciais para melhorar a robustez e o desempenho do modelo YOLO ao introduzir variabilidade nos . Ao definir prompts personalizados, os usuários podem essencialmente guiar o foco do modelo para objetos de interesse, aumentando a relevância e accuracy dos resultados de detecção.

Por exemplo, se sua aplicação exige apenas a detecção de objetos 'pessoa' e 'ônibus', você pode especificar essas 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()
Classe de Fundo

Alguns usuários descobriram que anexar 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 que é especializada para o seu caso de uso específico. Esse processo incorpora suas definições de classe personalizadas diretamente no arquivo do modelo, tornando o modelo pronto para uso com as classes especificadas sem ajustes adicionais. Siga estas etapas para salvar e carregar seu modelo YOLO-World personalizado:

Exemplo

Primeiro carregue um modelo YOLO-World, defina 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 comporta-se como qualquer outro modelo YOLOv8 pré-treinado, mas com uma diferença fundamental: ele está agora otimizado para detectar apenas as classes que definiste. Esta personalização pode melhorar significativamente o desempenho e a eficiência da detecçã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 salvar com vocabulário personalizado

  • Efficiency: Agiliza o processo de detecção ao focar em objetos relevantes, reduzindo a carga computacional e acelerando a inferência.
  • Flexibilidade: Permite uma adaptação fácil do modelo a tarefas de detecção novas ou específicas sem a necessidade de um re-treinamento extensivo ou coleta de dados.
  • Simplicidade: Simplifica a implantaçã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 detecção para classes especificadas ao focar a atenção e os recursos do modelo no reconhecimento dos objetos definidos.

Esta abordagem oferece um meio poderoso de personalizar modelos de última geração object detection 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 datasets

  • Treinar dados
DatasetTipoAmostrasBoxesArquivos de anotação
Objects365v1Detection609k9621kobjects365_train.json
GQAGrounding621k3681kfinal_mixed_train_no_coco.json
Flickr30kGrounding149k641kfinal_flickr_separateGT_train.json
  • Dados de validação
DatasetTipoArquivos de anotação
LVIS minivalDetectionminival.txt

Iniciar treinamento do zero

Nota

WorldTrainerFromScratch é altamente customizado para permitir o treinamento de modelos yolo-world tanto em datasets de detecção quanto em datasets de grounding simultaneamente. Para mais detalhes, por favor verifica ultralytics.model.yolo.world.train_world.py.

Exemplo
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 a 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 YOLO-World:

Citação
@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 em arXiv. O código-fonte do projeto e recursos adicionais podem ser acessados via repositório GitHub. Apreciamos o seu compromisso em avançar o campo e compartilhar os seus insights valiosos com a comunidade.

Perguntas Frequentes

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 Open-Vocabulary Detection 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 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 específicas de objetos, são pré-codificados e armazenados como vocabulário offline embeddings. Esta abordagem agiliza o processo de detecção sem a necessidade de re-treinamento. Podes definir dinamicamente estes prompts 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 Open-Vocabulary detection?

O YOLO-World oferece várias vantagens sobre os modelos tradicionais de Open-Vocabulary detection:

  • Desempenho em tempo real: Ele aproveita a velocidade computacional das CNNs para oferecer detecção rápida e eficiente.
  • Eficiência e baixa exigência de recursos: O YOLO-World mantém um alto desempenho enquanto reduz significativamente as exigências 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 re-treinamento.
  • 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 teu dataset é simples através da API Python fornecida ou comandos CLI. Aqui está 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 múltiplos modelos YOLO-World pré-treinados que suportam várias tarefas e modos de operação:

Tipo de ModeloPesos Pré-treinadosTarefas SuportadasInferenceValidaçãoTreinamentoExport
YOLOv8s-worldyolov8s-world.ptDetecção de objetos
YOLOv8s-worldv2yolov8s-worldv2.ptDetecção de objetos
YOLOv8m-worldyolov8m-world.ptDetecção de objetos
YOLOv8m-worldv2yolov8m-worldv2.ptDetecção de objetos
YOLOv8l-worldyolov8l-world.ptDetecção de objetos
YOLOv8l-worldv2yolov8l-worldv2.ptDetecção de objetos
YOLOv8x-worldyolov8x-world.ptDetecção de objetos
YOLOv8x-worldv2yolov8x-worldv2.ptDetecção de objetos

Como posso reproduzir os resultados oficiais do YOLO-World do zero?

Para reproduzir os resultados oficiais do zero, precisas 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)

Comentários