Meet YOLO26: next-gen vision AI.

Link to this sectionModelo YOLO-World#

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

Link to this sectionVisão geral#

O YOLO-World aborda os desafios enfrentados pelos modelos tradicionais de deteção de vocabulário aberto, que frequentemente dependem de modelos Transformer complexos que exigem vastos recursos computacionais. A dependência destes modelos em categorias de objetos pré-definidas também restringe a sua utilidade em cenários dinâmicos. O YOLO-World revitaliza a estrutura YOLOv8 com capacidades de deteção de vocabulário aberto, empregando modelação de linguagem e pré-treino em conjuntos de dados expansivos para se destacar na identificação de uma vasta gama de objetos em cenários zero-shot com uma eficiência inigualável.

Link to this sectionPrincipais recursos#

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

  2. Eficiência e Desempenho: O YOLO-World reduz 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 "detetar após pedir" (prompt-then-detect), empregando um vocabulário offline para aumentar ainda mais a eficiência. Esta abordagem permite que prompts personalizados calculados a priori, incluindo legendas ou categorias, sejam codificados e armazenados como embeddings de vocabulário offline, simplificando o processo de deteção.

  4. Potenciado pelo YOLOv8: Construído sobre o Ultralytics YOLOv8, o YOLO-World aproveita os avanços mais recentes na deteção de objetos em tempo real para facilitar a deteção de vocabulário aberto com uma precisão e velocidade inigualá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 termos de velocidade e eficiência em benchmarks padrão, demonstrando a capacidade superior do YOLOv8 num único GPU NVIDIA V100.

  6. Aplicações Versáteis: A abordagem inovadora do YOLO-World desbloqueia novas possibilidades para uma multiplicidade de tarefas de visão, proporcionando melhorias de velocidade por ordens de magnitude em comparação com os métodos existentes.

Link to this sectionModelos Disponíveis, Tarefas Suportadas e Modos de Operação#

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 operação, tais como Inference, Validation, Training e Export, 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 do YOLO-World, destacando as suas excelentes contribuições.

Tipo de ModeloPesos Pré-treinadosTarefas SuportadasInferênciaValidaçãoTreinamentoExportar
YOLOv8s-worldyolov8s-world.ptDetecção de Objetos
YOLOv8s-worldv2yolov8s-worldv2.ptDetecção de Objetos
YOLOv8m-worldyolov8m-world.ptDetecção de Objetos
YOLOv8m-worldv2yolov8m-worldv2.ptDetecção de Objetos
YOLOv8l-worldyolov8l-world.ptDetecção de Objetos
YOLOv8l-worldv2yolov8l-worldv2.ptDetecção de Objetos
YOLOv8x-worldyolov8x-world.ptDetecção de Objetos
YOLOv8x-worldv2yolov8x-worldv2.ptDetecção de Objetos

Link to this sectionTransferê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

Link to this sectionExemplos de uso#

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



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

Link to this sectionUtilização do Treino#

Dica

Recomendamos vivamente que utilizes o modelo yolov8-worldv2 para treinos personalizados, porque suporta treino determinístico e também é fácil de exportar para outros formatos, por exemplo, onnx/tensorrt.

A Object detection é simples com o método train, como ilustrado abaixo:

Exemplo

PyTorch pretrained *.pt models as well as configuration *.yaml files can be passed to the YOLOWorld() class to create a model instance in 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")

Link to this sectionUso de Predição#

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

Este trecho demonstra a simplicidade de carregar um modelo pré-treinado e executar uma predição em uma imagem.

Link to this sectionUso de 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")

Link to this sectionUso de Rastreamento#

O Object tracking 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 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.

Link to this sectionDefinir prompts#

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

A estrutura YOLO-World permite a especificação dinâmica de classes através de prompts personalizados, capacitando os utilizadores a adaptar o modelo às suas necessidades específicas sem necessidade de re-treino. Esta funcionalidade é particularmente útil para adaptar o modelo a novos domínios ou tarefas específicas que não faziam parte originalmente dos training data. Ao definir prompts personalizados, podes guiar o foco do modelo para objetos de interesse, aumentando a relevância e a accuracy dos resultados da deteção.

Por exemplo, se a tua aplicação apenas necessitar de detetar objetos 'person' e 'bus', 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()
Classe de Fundo

Alguns utilizadores descobriram que adicionar uma string vazia "" como classe de fundo pode melhorar o desempenho da deteção em certos cenários. Este comportamento parece depender do cenário e o mecanismo exato não é totalmente compreendido:

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

Também podes guardar um modelo após definir classes personalizadas. Ao fazê-lo, crias uma versão do modelo YOLO-World que é especializada para o teu caso de uso específico. Este processo incorpora as tuas definições de classes personalizadas diretamente no ficheiro do modelo, tornando o modelo pronto a utilizar 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 o mesmo 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")

Após guardar, o modelo custom_yolov8s.pt comporta-se como qualquer outro modelo YOLOv8 pré-treinado, mas com uma diferença fundamental: 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 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()

Link to this sectionBenefícios de Guardar com Vocabulário Personalizado#

  • Eficiência: Simplifica o processo de deteção ao focar-se em objetos relevantes, reduzindo a carga computacional e acelerando a inferência.
  • Flexibilidade: Permite uma adaptação fácil do modelo a tarefas de deteção novas ou de nicho, sem a necessidade de um re-treino extensivo ou 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 seu vocabulário incorporado.
  • Desempenho: Melhora a precisão da deteção para as classes especificadas, focando a atenção e os recursos do modelo no reconhecimento dos objetos definidos.

Esta abordagem oferece um meio poderoso de personalizar modelos de object detection 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.

Link to this sectionReproduzir resultados oficiais a partir do zero (Experimental)#

Link to this sectionPreparar conjuntos de dados#

  • Dados de treino
Conjunto de dadosTipoAmostrasCaixas (Boxes)Ficheiros 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

Link to this sectionIniciar o treinamento do zero#

Nota

O WorldTrainerFromScratch é altamente personalizado para permitir o treinamento de modelos yolo-world em conjuntos de dados de detecção e de grounding simultaneamente. Para mais detalhes, confira ultralytics.model.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 = 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"]),
)

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

Link to this sectionCitações e Agradecimentos#

Estendemos nossa gratidão ao Tencent AILab Computer Vision Center pelo seu trabalho pioneiro em detecção de objetos de vocabulário aberto em tempo real com 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 leitura adicional, o artigo original do YOLO-World está disponível no arXiv. O código-fonte do projeto e recursos adicionais podem ser acessados via repositório GitHub. Agradecemos o compromisso deles em avançar a área e compartilhar seus conhecimentos valiosos com a comunidade.

Link to this sectionFAQ#

Link to this sectionO que é o modelo YOLO-World e como ele funciona?#

O modelo YOLO-World é uma abordagem avançada de detecção de objetos em tempo real baseada na estrutura Ultralytics YOLOv8. Ele se destaca em tarefas de Detecção de Vocabulário Aberto ao identificar objetos em uma imagem com base em textos descritivos. Usando modelagem de visão-linguagem e pré-treinamento em grandes conjuntos de dados, o YOLO-World alcança alta eficiência e desempenho com demandas computacionais significativamente reduzidas, tornando-o ideal para aplicações em tempo real em vários setores.

Link to this sectionComo o YOLO-World lida com inferência usando 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 específicas de objetos, são pré-codificados e armazenados como embeddings de vocabulário offline. Essa abordagem simplifica o processo de detecção sem a necessidade de retreinamento. Você pode definir esses prompts dinamicamente dentro do modelo para adaptá-lo a tarefas de detecçã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()

Link to this sectionPor que devo escolher o YOLO-World em vez de modelos tradicionais de detecção de Vocabulário Aberto?#

O YOLO-World oferece várias vantagens em relação aos modelos tradicionais de detecção de Vocabulário Aberto:

  • Desempenho em Tempo Real: Ele aproveita a velocidade computacional das CNNs para oferecer uma detecção rápida e eficiente.
  • Eficiência e Baixa Necessidade de Recursos: O YOLO-World mantém um alto desempenho enquanto reduz significativamente as demandas computacionais e de recursos.
  • Prompts Personalizáveis: O modelo suporta a definição dinâmica de prompts, permitindo que os usuários especifiquem classes de detecção personalizadas sem retreinamento.
  • 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.

Link to this sectionComo 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 ou dos comandos CLI fornecidos. Veja como iniciar 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 CLI:

yolo train model=yolov8s-worldv2.yaml data=coco8.yaml epochs=100 imgsz=640

Link to this sectionQuais são os modelos YOLO-World pré-treinados disponíveis e quais tarefas eles suportam?#

A Ultralytics oferece vários modelos YOLO-World pré-treinados que suportam diversas tarefas e modos de operação:

Tipo de ModeloPesos Pré-treinadosTarefas SuportadasInferênciaValidaçãoTreinamentoExportar
YOLOv8s-worldyolov8s-world.ptDetecção de Objetos
YOLOv8s-worldv2yolov8s-worldv2.ptDetecção de Objetos
YOLOv8m-worldyolov8m-world.ptDetecção de Objetos
YOLOv8m-worldv2yolov8m-worldv2.ptDetecção de Objetos
YOLOv8l-worldyolov8l-world.ptDetecção de Objetos
YOLOv8l-worldv2yolov8l-worldv2.ptDetecção de Objetos
YOLOv8x-worldyolov8x-world.ptDetecção de Objetos
YOLOv8x-worldv2yolov8x-worldv2.ptDetecção de Objetos

Link to this sectionComo 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 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