Ir para o conteúdo

Modelo YOLO-World

O Modelo YOLO-World introduz uma abordagem avançada e em tempo real baseada no Ultralytics YOLOv8 para tarefas de Detecção de Vocabulário Aberto. Essa inovação permite a detecção de qualquer objeto dentro de uma imagem com base em textos descritivos. Ao diminuir significativamente as demandas computacionais, mantendo o desempenho competitivo, o YOLO-World surge como uma ferramenta versátil para inúmeras aplicações baseadas em visão.



Assista: Fluxo de trabalho de treinamento do YOLO World em conjunto de dados personalizado

Visão geral da arquitetura do Modelo YOLO-World

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

  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 às indústrias que precisam de resultados imediatos.

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

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

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

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

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 YOLOv8n 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

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

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)


📅 Criado há 1 ano ✏️ Atualizado há 22 dias

Comentários