Ultralytics YOLO27:

Modelo YOLO-World#

O modelo YOLO-World introduz uma abordagem avançada e em tempo real baseada no Ultralytics YOLOv8 para tarefas de deteção de vocabulário aberto. Esta inovação permite detetar qualquer objeto numa imagem com base em textos descritivos. Ao reduzir significativamente as exigências computacionais e preservar 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 YOLO-World

Visão geral#

O YOLO-World aborda os desafios dos modelos tradicionais de deteção de vocabulário aberto, que frequentemente dependem de modelos Transformer complexos e que exigem muitos recursos computacionais. A dependência destes modelos em categorias de objetos predefinidas também limita a sua utilidade em cenários dinâmicos. O YOLO-World revitaliza a estrutura YOLOv8 com capacidades de deteção de vocabulário aberto, recorrendo a modelação de linguagem visual e a pré-treino em conjuntos de dados abrangentes para se destacar na identificação de uma grande variedade de objetos em cenários zero-shot, com uma eficiência incomparável.

Para trabalhos de vocabulário aberto que também necessitem de máscaras de instância, prompts visuais ou de um modo sem prompts, consulta o YOLOE, que mantém a mesma API set_classes().

Principais funcionalidades#

  1. Solução em tempo real: Tirando partido da velocidade computacional das CNNs, o YOLO-World oferece uma solução rápida de deteção de vocabulário aberto, adequada para setores 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 com uma fração do custo computacional, o que permite aplicações em tempo real.

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

  4. Baseado no YOLOv8: Construído sobre o Ultralytics YOLOv8, o YOLO-World tira partido dos avanços mais recentes na deteção de objetos em tempo real para permitir a deteção de vocabulário aberto com precisão e velocidade incomparáveis.

  5. Excelência em benchmarks: O YOLO-World supera os detetores de vocabulário aberto existentes, incluindo as séries MDETR e GLIP, em velocidade e eficiência nos benchmarks padrão, demonstrando a capacidade superior do YOLOv8 numa única GPU NVIDIA V100.

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

Modelos disponíveis, tarefas compatíveis e modos de operação#

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

Nota

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

Tipo de modeloPesos pré-treinadosTarefas suportadasTreinoValidaçãoInferênciaExportação
YOLOv8s-worldyolov8s-world.ptDeteção de objetos
YOLOv8s-worldv2yolov8s-worldv2.ptDeteção de objetos
YOLOv8m-worldyolov8m-world.ptDeteção de objetos
YOLOv8m-worldv2yolov8m-worldv2.ptDeteção de objetos
YOLOv8l-worldyolov8l-world.ptDeteção de objetos
YOLOv8l-worldv2yolov8l-worldv2.ptDeteção de objetos
YOLOv8x-worldyolov8x-world.ptDeteção de objetos
YOLOv8x-worldv2yolov8x-worldv2.ptDeteçã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 utilização#

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



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

Utilização do treino#

Dica

Recomendamos vivamente utilizar yolov8-worldv2 para o treino personalizado, porque suporta treino determinístico e exporta mais facilmente para formatos como ONNX e TensorRT.

A deteção de objetos é simples com o método train, conforme ilustrado abaixo:

Exemplo

Os modelos *.pt pré-treinados do PyTorch, bem como os ficheiros de configuração *.yaml, podem ser transmitidos à 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")

Utilização de Predict#

A deteção de objetos é simples com o método 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()

Este fragmento demonstra a simplicidade de carregar um modelo pré-treinado e executar uma prediçã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")

Utilização de Track#

O rastreamento de objetos com o modelo YOLO-World num 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 já vêm pré-configurados com categorias do conjunto de dados COCO como parte do seu vocabulário offline, aumentando a eficiência para utilizaçã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 configuração ou personalização adicionais.

Definir prompts#

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

A estrutura YOLO-World permite especificar classes dinamicamente através de prompts personalizados, dando-te controlo para adaptares o modelo às tuas necessidades específicas sem novo treino. Esta funcionalidade é 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 definires prompts personalizados, podes essencialmente orientar o foco do modelo para os objetos de interesse, melhorando a relevância e a precisão dos resultados da deteção.

Por exemplo, se a tua aplicação apenas precisar de detetar objetos 'person' e 'bus', podes especificar diretamente estas classes:

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 utilizadores descobriram que acrescentar uma string vazia "" como classe de fundo pode melhorar o desempenho da deteção em determinados cenários. Este comportamento parece depender do cenário e o mecanismo exato ainda não é totalmente compreendido:

model.set_classes(["person", "bus", ""])

Também podes guardar um modelo depois de definires classes personalizadas. Desta forma, crias uma versão do modelo YOLO-World especializada para o teu caso de utilização específico. Este processo incorpora as definições das tuas classes personalizadas diretamente no ficheiro do modelo, deixando-o pronto para utilização com as classes especificadas, sem ajustes adicionais. Segue estes passos para guardar e carregar o teu modelo YOLO-World personalizado:

Exemplo

Primeiro, carrega um modelo YOLO-World, define classes personalizadas para ele e guarda-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 importante: está agora otimizado para detetar apenas as classes que definiste. Esta personalização pode melhorar significativamente o desempenho e a eficiência da deteção nos cenários específicos da tua aplicação.

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 guardar com vocabulário personalizado#

  • Eficiência: Simplifica o processo de deteção ao concentrar-se nos objetos relevantes, reduzindo a sobrecarga computacional e acelerando a inferência.
  • Flexibilidade: Permite adaptar facilmente o modelo a tarefas de deteção novas ou específicas, sem necessidade de um novo treino extenso ou de recolha de dados.
  • 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 vocabulário incorporado.
  • Desempenho: Melhora a precisão da deteção das classes especificadas ao concentrar a atenção e os recursos do modelo no reconhecimento dos objetos definidos.

Esta abordagem proporciona uma forma poderosa de personalizar modelos de deteçã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 os resultados oficiais de raiz (Experimental)#

Preparar conjuntos de dados#

  • Dados de treino
Conjunto de dadosTipoAmostrasCaixasFicheiros de anotação
Objects365v1Deteção609k9621kobjects365_train.json
GQAGrounding621k3681kfinal_mixed_train_no_coco.json
Flickr30kGrounding149k641kfinal_flickr_separateGT_train.json
  • Dados de validação
Conjunto de dadosTipoFicheiros de anotação
LVIS minivalDeteçãominival.txt

Iniciar o treino de raiz#

Nota

WorldTrainerFromScratch é altamente personalizado para permitir o treino de modelos yolo-world em conjuntos de dados de deteção e de grounding em simultâneo. Para mais detalhes, consulta ultralytics.models.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 = {
    "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"]},
}

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

Agradecemos profundamente 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:

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 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 com o avanço da área e a partilha dos seus conhecimentos valiosos com a comunidade.

Perguntas frequentes#

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

  • 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íficas, são pré-codificados e armazenados como embeddings de vocabulário offline. Esta abordagem simplifica o processo de deteção sem necessidade de novo treino. Podes definir estes prompts dinamicamente no modelo para o adaptares a tarefas de deteção específicas, conforme 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()
  • O YOLO-World oferece várias vantagens em relação aos modelos tradicionais de deteção de vocabulário aberto:

    • Desempenho em tempo real: Tira partido da velocidade computacional das CNNs para oferecer uma deteção rápida e eficiente.
    • Eficiência e baixo consumo de recursos: O YOLO-World mantém um desempenho elevado, reduzindo significativamente as exigências computacionais e de recursos.
    • Prompts personalizáveis: O modelo suporta a definição dinâmica de prompts, permitindo especificar classes de deteção personalizadas sem novo treino.
    • Excelência em benchmarks: Supera outros detetores de vocabulário aberto, como MDETR e GLIP, tanto em velocidade como em eficiência nos benchmarks padrão.
  • Treinar um modelo YOLO-World no teu conjunto de dados é simples através da API Python ou dos comandos CLI fornecidos. Eis como iniciar o treino 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 CLI:

    yolo train model=yolov8s-worldv2.pt data=coco8.yaml epochs=100 imgsz=640
  • A Ultralytics disponibiliza vários modelos YOLO-World pré-treinados que suportam diversas tarefas e modos de operação:

    Tipo de modeloPesos pré-treinadosTarefas suportadasTreinoValidaçãoInferênciaExportação
    YOLOv8s-worldyolov8s-world.ptDeteção de objetos
    YOLOv8s-worldv2yolov8s-worldv2.ptDeteção de objetos
    YOLOv8m-worldyolov8m-world.ptDeteção de objetos
    YOLOv8m-worldv2yolov8m-worldv2.ptDeteção de objetos
    YOLOv8l-worldyolov8l-world.ptDeteção de objetos
    YOLOv8l-worldv2yolov8l-worldv2.ptDeteção de objetos
    YOLOv8x-worldyolov8x-world.ptDeteção de objetos
    YOLOv8x-worldv2yolov8x-worldv2.ptDeteção de objetos
  • Para reproduzires os resultados oficiais de raiz, tens de preparar os conjuntos de dados e iniciar o treino utilizando o código fornecido. O procedimento de treino envolve criar um dicionário de dados e executar o 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