Saltar para o conteúdo

YOLO-Modelo Mundial

O YOLO-World Model apresenta um modelo avançado, em tempo real Ultralytics YOLOv8-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 simultaneamente um desempenho competitivo, o YOLO-World surge como uma ferramenta versátil para inúmeras aplicações baseadas na visão.



Ver: YOLO Fluxo de trabalho de formação mundial num conjunto de dados personalizado

YOLO-Visão geral da arquitetura do World Model

Visão geral

YOLO-O -World aborda os desafios enfrentados pelos modelos tradicionais de deteção de Vocabulário Aberto, que muitas vezes dependem de modelos de Transformação pesados que requerem recursos computacionais extensos. A dependência destes modelos em categorias de objectos pré-definidas também restringe a sua utilidade em cenários dinâmicos. YOLO-O -World revitaliza a estrutura do YOLOv8 com capacidades de deteção de vocabulário aberto, empregandomodelação de linguagem de visão e pré-treino em conjuntos de dados expansivos para se destacar na identificação de uma vasta gama de objectos em cenários de disparo zero com uma eficiência inigualável.

Caraterísticas principais

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

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

  3. Inferência com vocabulário offline: YOLO-World introduz uma estratégia "prompt-then-detect", utilizando um vocabulário offline para aumentar ainda mais a eficiência. Esta abordagem permite a utilização de avisos personalizados calculados a priori, incluindo legendas ou categorias, para serem codificados e armazenados como vocabulário offline incorporado, simplificando o processo de deteção.

  4. Desenvolvido por YOLOv8: Construído sobre Ultralytics YOLOv8YOLO-World utiliza os últimos avanços na deteção de objectos em tempo real para facilitar a deteção de vocabulário aberto com uma precisão e velocidade inigualáveis.

  5. Excelência em benchmark: YOLO O -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 num único NVIDIA V100 GPU.

  6. Aplicações versáteis: YOLO A abordagem inovadora da -World abre novas possibilidades para uma multiplicidade de tarefas de visão, proporcionando melhorias de velocidade de ordens de magnitude em relação aos métodos existentes.

Modelos disponíveis, tarefas suportadas e modos de funcionamento

Esta secção detalha os modelos disponíveis com os seus pesos pré-treinados específicos, as tarefas que suportam e a sua compatibilidade com vários modos de funcionamento, tais como Inferência, Validação, Treino e Exportação, denotados por ✅ para modos suportados e ❌ para modos não suportados.

Nota

Todos os pesos de YOLOv8-World foram migrados diretamente do repositório oficial YOLO-World, destacando as suas excelentes contribuições.

Tipo de modelo Pesos pré-treinados Tarefas suportadas Inferência Validação Formação Exportação
YOLOv8s-mundo yolov8s-mundo.pt Deteção de objectos
YOLOv8s-mundov2 yolov8s-worldv2.pt Deteção de objectos
YOLOv8m-mundo yolov8m-mundo.pt Deteção de objectos
YOLOv8m-mundov2 yolov8m-worldv2.pt Deteção de objectos
YOLOv8l-mundo yolov8l-mundo.pt Deteção de objectos
YOLOv8l-mundov2 yolov8l-worldv2.pt Deteção de objectos
YOLOv8x-mundo yolov8x-mundo.pt Deteção de objectos
YOLOv8x-mundov2 yolov8x-worldv2.pt Deteção de objectos

Transferência de zero-shot no conjunto de dados COCO

Tipo de modelo mAP mAP50 mAP75
yolov8s-mundo 37.4 52.0 40.6
yolov8s-mundov2 37.7 52.2 41.0
yolov8m-mundo 42.0 57.0 45.6
yolov8m-mundov2 43.0 58.4 46.8
yolov8l-mundo 45.7 61.3 49.8
yolov8l-mundov2 45.8 61.3 49.8
yolov8x-mundo 47.0 63.0 51.2
yolov8x-mundov2 47.1 62.8 51.4

Exemplos de utilização

Os modelos YOLO-World são fáceis de integrar nas suas aplicações Python . Ultralytics fornece uma API Python e comandos CLI fáceis de utilizar para simplificar o desenvolvimento.

Utilização do comboio

Dica

Recomendamos vivamente a utilização de yolov8-worldv2 modelo para formação personalizada, porque suporta formação determinística e também é fácil de exportar outros formatos, ou seja, onnx/tensorrt.

Deteção de objectos é simples com o train como ilustrado abaixo:

Exemplo

PyTorch pré-treinado *.pt modelos, bem como a configuração *.yaml podem ser passados para os ficheiros 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 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

Prever a utilização

A deteção de objectos é 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()
# Perform object detection using a YOLO-World model
yolo predict model=yolov8s-world.pt source=path/to/image.jpg imgsz=640

Este snippet demonstra a simplicidade de carregar um modelo pré-treinado e executar uma previsão numa imagem.

Utilização de Val

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

Utilização da faixa

O rastreio de objectos com o modelo YOLO-World num vídeo/imagem é 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/file.mp4"

Nota

Os modelos YOLO-World fornecidos por Ultralytics vêm pré-configurados com as 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 necessidade de configuração ou personalização adicional.

Definir prompts

YOLO-Visão geral dos nomes das classes de prompt do mundo

A estrutura YOLO-World permite a especificação dinâmica de classes através de prompts personalizados, permitindo que os utilizadores adaptem o modelo às suas necessidades específicas sem necessidade de reciclagem. Esta caraterística é particularmente útil para adaptar o modelo a novos domínios ou tarefas específicas que não faziam originalmente parte dos dados de treino. Ao definir avisos personalizados, os utilizadores podem essencialmente orientar a atenção do modelo para objectos de interesse, melhorando a relevância e a precisão dos resultados da deteção.

Por exemplo, se a sua aplicação apenas requer a deteção de objectos "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 é possível salvar um modelo depois de 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 de modelo, tornando o modelo pronto para ser usado com as classes especificadas sem ajustes adicionais. Siga estas etapas para salvar e carregar 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")

Depois de guardado, o modelo custom_yolov8s.pt comporta-se como qualquer outro modelo YOLOv8 pré-treinado, mas com uma diferença fundamental: está agora optimizado 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()

Vantagens de poupar com vocabulário personalizado

  • Eficiência: Simplifica o processo de deteção, concentrando-se em objectos relevantes, reduzindo a sobrecarga computacional e acelerando a inferência.
  • Flexibilidade: Permite a fácil adaptação do modelo a tarefas de deteção novas ou de nicho, sem necessidade de reciclagem ou recolha de dados extensiva.
  • 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: Aumenta a precisão da deteção para classes especificadas, concentrando a atenção e os recursos do modelo no reconhecimento dos objectos definidos.

Esta abordagem proporciona um meio poderoso de personalizar modelos de deteção de objectos de última geração para tarefas específicas, tornando a IA avançada mais acessível e aplicável a uma gama mais vasta de aplicações práticas.

Reproduzir resultados oficiais a partir do zero (Experimental)

Preparar conjuntos de dados

  • Dados do comboio
Conjunto de dados Tipo Amostras Caixas Ficheiros de anotações
Objectos365v1 Deteção 609k 9621k objectos365_train.json
GQA Ligação à terra 621k 3681k final_mixed_train_no_coco.json
Flickr30k Ligação à terra 149k 641k final_flickr_separateGT_train.json
  • Dados de valor
Conjunto de dados Tipo Ficheiros de anotações
LVIS minival Deteção minival.txt

Lançar a formação a partir do zero

Nota

WorldTrainerFromScratch é altamente personalizado para permitir o treino de modelos do mundo yolo em conjuntos de dados de deteção e de aterramento simultaneamente. Para mais pormenores, consultar 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="../datasets/flickr30k/images",
                json_file="../datasets/flickr30k/final_flickr_separateGT_train.json",
            ),
            dict(
                img_path="../datasets/GQA/images",
                json_file="../datasets/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 objectos de vocabulário aberto em tempo real com 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 uma leitura mais aprofundada, o documento original 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 empenho em fazer avançar o campo e em partilhar as suas valiosas ideias com a comunidade.

FAQ

O que é o modelo YOLO-World e como funciona?

O modelo YOLO-World é uma abordagem avançada de deteção de objectos em tempo real baseada na Ultralytics YOLOv8 estrutura. Destaca-se em tarefas de deteção de vocabulário aberto, identificando objectos numa imagem com base em textos descritivos. Utilizando a modelação da linguagem de visão e a pré-treino em grandes conjuntos de dados, o YOLO-World atinge uma elevada eficiência e desempenho com exigências computacionais significativamente reduzidas, tornando-o ideal para aplicações em tempo real em vários sectores.

Como é que YOLO-World lida com a inferência com prompts personalizados?

YOLOO -World suporta uma estratégia "prompt-then-detect", que utiliza um vocabulário offline para aumentar a eficiência. Os avisos personalizados, como legendas ou categorias de objectos específicos, são pré-codificados e armazenados como vocabulário offline incorporado. Esta abordagem simplifica o processo de deteção sem a necessidade de reciclagem. Pode definir dinamicamente estes avisos no modelo para o adaptar a tarefas de deteção específicas, como se mostra 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 razão devo escolher YOLO-World em vez dos modelos tradicionais de deteção de vocabulário aberto?

YOLO-O -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 baixa necessidade de recursos: YOLO-World mantém um elevado desempenho, reduzindo significativamente as exigências computacionais e de recursos.
  • Avisos personalizáveis: O modelo suporta a definição dinâmica de avisos, permitindo que os utilizadores especifiquem classes de deteção personalizadas sem necessidade de reciclagem.
  • Excelência em benchmarks: Ultrapassa outros detectores de vocabulário aberto, como o MDETR e o GLIP, tanto em termos de velocidade como de eficiência em benchmarks padrão.

Como é que treino 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 CLI . Veja como começar a treinar 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 utilizando 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 as tarefas que suportam?

Ultralytics oferece vários modelos pré-treinados do YOLO-World que suportam várias tarefas e modos de funcionamento:

Tipo de modelo Pesos pré-treinados Tarefas suportadas Inferência Validação Formação Exportação
YOLOv8s-mundo yolov8s-mundo.pt Deteção de objectos
YOLOv8s-mundov2 yolov8s-worldv2.pt Deteção de objectos
YOLOv8m-mundo yolov8m-mundo.pt Deteção de objectos
YOLOv8m-mundov2 yolov8m-worldv2.pt Deteção de objectos
YOLOv8l-mundo yolov8l-mundo.pt Deteção de objectos
YOLOv8l-mundov2 yolov8l-worldv2.pt Deteção de objectos
YOLOv8x-mundo yolov8x-mundo.pt Deteção de objectos
YOLOv8x-mundov2 yolov8x-worldv2.pt Deteção de objectos

Como é que posso reproduzir os resultados oficiais de YOLO-World a partir do zero?

Para reproduzir os resultados oficiais a partir do zero, é necessário preparar os conjuntos de dados e lançar a formação utilizando o código fornecido. O procedimento de treino envolve a criação de um dicionário de dados e a execução do train com um formador personalizado:

from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch

data = {
    "train": {
        "yolo_data": ["Objects365.yaml"],
        "grounding_data": [
            {
                "img_path": "../datasets/flickr30k/images",
                "json_file": "../datasets/flickr30k/final_flickr_separateGT_train.json",
            },
            {
                "img_path": "../datasets/GQA/images",
                "json_file": "../datasets/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)
📅C riado há 9 meses ✏️ Atualizado há 1 mês

Comentários