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

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

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-04-02
Autores: Burhan-Q (1), Laughing-q (4), glenn-jocher (1)

Coment√°rios