Salta para o conteúdo

YOLO-Modelo Mundial

O YOLO-World Model introduz 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 ao mesmo tempo um desempenho competitivo, o YOLO-World surge como uma ferramenta versátil para inúmeras aplicações baseadas na visão.

YOLO-Visão geral da arquitetura do World Model



Observa: YOLO Fluxo de trabalho de treino mundial num conjunto de dados personalizado

Visão geral

YOLO-O -World enfrenta os desafios dos modelos tradicionais de deteção de Vocabulário Aberto, que muitas vezes se baseiam em modelos Transformer complicados que requerem grandes recursos computacionais. A dependência destes modelos de categorias de objectos pré-definidas também limita 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, empregando modelaçã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.

Características principais

  1. Solução em tempo real: Aproveitando a velocidade de computação das CNNs, o YOLO-World oferece uma solução rápida de deteção de vocabulário aberto, atendendo às indústrias que precisam 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: Criado com base em 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, mostrando a capacidade superior do YOLOv8 em uma única GPU NVIDIA V100.

  6. Aplicações versáteis: YOLO A abordagem inovadora da -World abre novas possibilidades para uma grande variedade 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, 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 de fácil utilização e comandos CLI para simplificar o desenvolvimento.

Utilização do comboio

Dica

Recomendamos vivamente que utilizes yolov8-worldv2 modelo para treino personalizado, porque suporta treino determinístico e também é fácil de exportar outros formatos, ou seja, onnx/tensorrt.

A 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 o 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

Prevê 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 em uma 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.

Define os avisos

YOLO-Visão geral dos nomes das classes da linha de comando mundial

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 o foco do modelo para objectos de interesse, melhorando a relevância e a precisão dos resultados da deteção.

Por exemplo, se a tua aplicação apenas requer a deteção de objectos "pessoa" e "autocarro", podes 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 podes guardar um modelo depois de definires classes personalizadas. Ao fazer isso, 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. Segue estas etapas para salvar e carregar seu modelo personalizado YOLOv8 :

Exemplo

Primeiro carrega um modelo YOLO-World, define classes personalizadas para ele e salva-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 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()

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 a necessidade de reciclagem extensiva 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 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 os resultados oficiais a partir do zero (Experimental)

Prepara os conjuntos de dados

  • Dados do comboio
Conjunto de dados Tipo Amostras Caixas Ficheiros de anotações
Objectos365v1 Deteção 609k 9621k objects365_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ça a formação do zero

Nota

WorldTrainerFromScratch é altamente personalizado para permitir o treino de modelos yolo-world em conjuntos de dados de deteção e de aterramento simultaneamente. Para mais informações, consulta ultralytics.model.yolo.world.train_world.py.

Exemplo

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

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 leres mais, o artigo 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.



Criado em 2024-02-14, Atualizado em 2024-05-02
Autores: RizwanMunawar (2), glenn-jocher (3), Burhan-Q (1), Laughing-q (4)

Comentários