Modelo YOLO-World
O Modelo YOLO-World introduz uma abordagem avançada e em tempo real baseada no Ultralytics YOLOv8 para tarefas de Detecção de Vocabulário Aberto. Essa inovação permite a detecção de qualquer objeto dentro de uma imagem com base em textos descritivos. Ao diminuir significativamente as demandas computacionais, mantendo o desempenho competitivo, o YOLO-World surge como uma ferramenta versátil para inúmeras aplicações baseadas em visão.
Assista: Fluxo de trabalho de treinamento do YOLO World em conjunto de dados personalizado
Visão geral
O YOLO-World enfrenta os desafios dos modelos tradicionais de detecção de Vocabulário Aberto, que geralmente dependem de modelos Transformer complexos que exigem extensos recursos computacionais. A dependência desses modelos em categorias de objetos predefinidas também restringe sua utilidade em cenários dinâmicos. O YOLO-World revitaliza a estrutura YOLOv8 com recursos de detecção de vocabulário aberto, empregando modelagem de visão-linguagem e pré-treinamento em conjuntos de dados expansivos para se destacar na identificação de uma ampla gama de objetos em cenários zero-shot com eficiência incomparável.
Principais Características
-
Solução em Tempo Real: Aproveitando a velocidade computacional das CNNs, o YOLO-World oferece uma solução rápida de detecção de vocabulário aberto, atendendo às indústrias que precisam de resultados imediatos.
-
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 a uma fração do custo computacional, permitindo aplicações em tempo real.
-
Inferência com Vocabulário Offline: O YOLO-World introduz uma estratégia de "prompt-then-detect", empregando um vocabulário offline para aprimorar ainda mais a eficiência. Essa abordagem permite o uso de prompts personalizados computados apriori, incluindo legendas ou categorias, para serem codificados e armazenados como embeddings de vocabulário offline, agilizando o processo de detecção.
-
Desenvolvido por YOLOv8: Construído sobre o Ultralytics YOLOv8, o YOLO-World aproveita os mais recentes avanços na detecção de objetos em tempo real para facilitar a detecção de vocabulário aberto com precisão e velocidade incomparáveis.
-
Excelência em Benchmarks: O YOLO-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 em uma única GPU NVIDIA V100.
-
Aplicações Versáteis: A abordagem inovadora do YOLO-World desbloqueia novas possibilidades para uma infinidade de tarefas de visão, proporcionando melhorias de velocidade em ordens de magnitude em relação aos métodos existentes.
Modelos Disponíveis, Tarefas Suportadas e Modos de Operação
Esta seção detalha os modelos disponíveis com seus pesos pré-treinados específicos, as tarefas que suportam e sua compatibilidade com vários modos de operação, como Inferência, Validação, Treinamento e Exportação, 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 YOLO-World, destacando suas excelentes contribuições.
Tipo de Modelo | Pesos Pré-treinados | Tarefas Suportadas | Inferência | Validação | Treinamento | Exportar |
---|---|---|---|---|---|---|
YOLOv8s-world | yolov8s-world.pt | Detecção de Objetos | ✅ | ✅ | ✅ | ❌ |
YOLOv8s-worldv2 | yolov8s-worldv2.pt | Detecção de Objetos | ✅ | ✅ | ✅ | ✅ |
YOLOv8m-world | yolov8m-world.pt | Detecção de Objetos | ✅ | ✅ | ✅ | ❌ |
YOLOv8m-worldv2 | yolov8m-worldv2.pt | Detecção de Objetos | ✅ | ✅ | ✅ | ✅ |
YOLOv8l-world | yolov8l-world.pt | Detecção de Objetos | ✅ | ✅ | ✅ | ❌ |
YOLOv8l-worldv2 | yolov8l-worldv2.pt | Detecção de Objetos | ✅ | ✅ | ✅ | ✅ |
YOLOv8x-world | yolov8x-world.pt | Detecção de Objetos | ✅ | ✅ | ✅ | ❌ |
YOLOv8x-worldv2 | yolov8x-worldv2.pt | Detecção de Objetos | ✅ | ✅ | ✅ | ✅ |
Transferência Zero-shot no Conjunto de Dados COCO
Desempenho
Tipo de Modelo | mAP | mAP50 | mAP75 |
---|---|---|---|
yolov8s-world | 37.4 | 52.0 | 40.6 |
yolov8s-worldv2 | 37.7 | 52.2 | 41.0 |
yolov8m-world | 42.0 | 57.0 | 45.6 |
yolov8m-worldv2 | 43.0 | 58.4 | 46.8 |
yolov8l-world | 45.7 | 61.3 | 49.8 |
yolov8l-worldv2 | 45.8 | 61.3 | 49.8 |
yolov8x-world | 47.0 | 63.0 | 51.2 |
yolov8x-worldv2 | 47.1 | 62.8 | 51.4 |
Exemplos de uso
Os modelos YOLO-World são fáceis de integrar em seus aplicativos Python. A Ultralytics fornece uma API Python e comandos CLI fáceis de usar para otimizar o desenvolvimento.
Uso do Treino
Dica
Recomendamos vivamente a utilização do yolov8-worldv2
modelo para treino personalizado, pois suporta treino determinístico e também é fácil de exportar para outros formatos, como onnx/tensorrt.
A deteção de objetos é simples com o método train
, conforme ilustrado abaixo:
Exemplo
PyTorch pré-treinados *.pt
modelos, bem como a configuração *.yaml
os arquivos podem ser passados para o YOLOWorld()
classe 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
Uso da Predição
A deteção de objetos é simples com o 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()
# Perform object detection using a YOLO-World model
yolo predict model=yolov8s-world.pt source=path/to/image.jpg imgsz=640
Este trecho demonstra a simplicidade de carregar um modelo pré-treinado e executar uma previsão numa imagem.
Uso da 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")
# 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
Uso do Rastreamento
O rastreamento de objetos com o modelo YOLO-World em um 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")
# 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.mp4"
Nota
Os modelos YOLO-World fornecidos pela Ultralytics vêm pré-configurados com 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 necessitar de configuração ou personalização adicional.
Definir prompts
A estrutura YOLO-World permite a especificação dinâmica de classes por meio de prompts personalizados, capacitando os usuários a adaptar o modelo às suas necessidades específicas sem retreinar. Esse recurso é particularmente útil para adaptar o modelo a novos domínios ou tarefas específicas que não faziam parte originalmente dos dados de treinamento. Ao definir prompts personalizados, os usuários podem essencialmente orientar o foco do modelo para objetos de interesse, aumentando a relevância e a precisão dos resultados da detecção.
Por exemplo, se a sua aplicação exigir apenas a deteção de objetos '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 pode guardar um modelo depois de definir classes personalizadas. Ao fazer isto, cria uma versão do modelo YOLO-World especializada para o seu caso de uso específico. Este processo incorpora as suas definições de classe personalizadas diretamente no ficheiro do modelo, tornando o modelo pronto a usar com as classes especificadas sem ajustes adicionais. Siga estes passos para guardar e carregar o 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")
Após guardar, o modelo custom_yolov8s.pt comporta-se como qualquer outro modelo YOLOv8 pré-treinado, mas com uma diferença fundamental: agora está otimizado 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()
Benefícios de Salvar com Vocabulário Personalizado
- Eficiência: Simplifica o processo de deteção, concentrando-se em objetos relevantes, reduzindo a sobrecarga computacional e acelerando a inferência.
- Flexibilidade: Permite uma fácil adaptação do modelo a tarefas de deteção novas ou de nicho, sem a necessidade de um extenso re-treino 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 detecção para classes especificadas, concentrando a atenção e os recursos do modelo no reconhecimento dos objetos definidos.
Esta abordagem oferece um meio poderoso de personalizar modelos de detecçã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 resultados oficiais do zero (Experimental)
Preparar conjuntos de dados
- Dados de treino
Conjunto de dados | Tipo | Amostras | Boxes | Ficheiros de Anotação |
---|---|---|---|---|
Objects365v1 | Detecção | 609k | 9621k | objects365_train.json |
GQA | Grounding | 621k | 3681k | final_mixed_train_no_coco.json |
Flickr30k | Grounding | 149k | 641k | final_flickr_separateGT_train.json |
- Dados de validação
Conjunto de dados | Tipo | Ficheiros de Anotação |
---|---|---|
LVIS minival | Detecção | minival.txt |
Iniciar o treinamento do zero
Nota
WorldTrainerFromScratch
é altamente personalizado para permitir o treino de modelos YOLO-World em conjuntos de dados de deteção e conjuntos de dados de grounding simultaneamente. Para mais detalhes, consulte 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="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"]),
)
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 objetos de vocabulário aberto em tempo real com o 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 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 em fazer avançar o campo e partilhar os seus valiosos conhecimentos com a comunidade.
FAQ
O que é o modelo YOLO-World e como ele funciona?
O modelo YOLO-World é uma abordagem avançada de deteção de objetos em tempo real baseada na framework Ultralytics YOLOv8. Destaca-se em tarefas de Deteção de Vocabulário Aberto, identificando objetos dentro de uma imagem com base em textos descritivos. Utilizando modelagem de visão-linguagem e pré-treino em grandes conjuntos de dados, o YOLO-World alcança alta eficiência e desempenho com exigências computacionais significativamente reduzidas, tornando-o ideal para aplicações em tempo real em vários setores.
Como o YOLO-World lida com a inferência com 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 de objetos específicos, são pré-codificados e armazenados como embeddings de vocabulário offline. Esta abordagem agiliza o processo de deteção sem a necessidade de re-treino. Pode definir dinamicamente estes prompts dentro do modelo para o adaptar a tarefas de deteçã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()
Por que devo escolher o YOLO-World em vez dos modelos tradicionais de detecção de Vocabulário Aberto?
O YOLO-World oferece várias vantagens sobre os modelos tradicionais de detecçã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 Baixo Requisito de Recursos: O YOLO-World mantém um alto desempenho, reduzindo significativamente as exigências computacionais e de recursos.
- Prompts Personalizáveis: O modelo suporta a definição de prompts dinâmicos, permitindo que os usuários especifiquem classes de detecção personalizadas sem novo treinamento.
- 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.
Como faço para treinar 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 da CLI. Veja como começar 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 a 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 suas tarefas suportadas?
A Ultralytics oferece vários modelos YOLO-World pré-treinados que suportam várias tarefas e modos de operação:
Tipo de Modelo | Pesos Pré-treinados | Tarefas Suportadas | Inferência | Validação | Treinamento | Exportar |
---|---|---|---|---|---|---|
YOLOv8s-world | yolov8s-world.pt | Detecção de Objetos | ✅ | ✅ | ✅ | ❌ |
YOLOv8s-worldv2 | yolov8s-worldv2.pt | Detecção de Objetos | ✅ | ✅ | ✅ | ✅ |
YOLOv8m-world | yolov8m-world.pt | Detecção de Objetos | ✅ | ✅ | ✅ | ❌ |
YOLOv8m-worldv2 | yolov8m-worldv2.pt | Detecção de Objetos | ✅ | ✅ | ✅ | ✅ |
YOLOv8l-world | yolov8l-world.pt | Detecção de Objetos | ✅ | ✅ | ✅ | ❌ |
YOLOv8l-worldv2 | yolov8l-worldv2.pt | Detecção de Objetos | ✅ | ✅ | ✅ | ✅ |
YOLOv8x-world | yolov8x-world.pt | Detecção de Objetos | ✅ | ✅ | ✅ | ❌ |
YOLOv8x-worldv2 | yolov8x-worldv2.pt | Detecção de Objetos | ✅ | ✅ | ✅ | ✅ |
Como 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 a criação de um dicionário de dados e a execução do train
método 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)