YOLOE: deteção e segmentação em tempo real com vocabulário aberto#
O Ultralytics YOLOE (Real-Time Seeing Anything) é um modelo de deteção com vocabulário aberto e segmentação de instâncias: em vez de usar uma lista de classes fixada durante o treino, recebe as categorias pretendidas no momento da inferência, como um prompt de texto, um exemplo visual ou um vocabulário integrado com 4 585 nomes. Baseado nas arquiteturas Ultralytics YOLO — YOLOv8, YOLO11 e YOLO26 — e inspirado no YOLO-World, o YOLOE alcança uma precisão zero-shot de ponta, com uma velocidade próxima à do YOLO de conjunto fechado.
Assista: Como usar Ultralytics YOLOE-26 (novo) | Vocabulário aberto e percepção de qualquer coisa em tempo real 🚀
Início rápido#
Indica as classes pretendidas e executa. O YOLOE-26 devolve caixas e máscaras de segmentação de instâncias para categorias nas quais nunca foi treinado.
from ultralytics import YOLOE
model = YOLOE("yoloe-26s-seg.pt")
# "double-decker bus" não é uma classe COCO; o YOLOE identifica-a apenas pelas palavras
model.set_classes(["double-decker bus", "person"])
results = model.predict("https://ultralytics.com/images/bus.jpg")
results[0].show()A primeira chamada set_classes() transfere um codificador de texto; consulta Instalação e requisitos antes de implementares o sistema numa máquina sem acesso à rede.
Escolher um modo de prompting#
O YOLOE suporta três modos de prompting. A escolha determina qual checkpoint carregas e o aspeto das etiquetas das classes. Escolhe a linha correspondente ao que podes fornecer no momento da inferência.

| Modo | Checkpoint | O que forneces | Nomes das classes nos resultados | Quando usar |
|---|---|---|---|---|
| Prompt de texto | *-seg.pt | Nomes de classes como strings | Exatamente os nomes que forneceste | Podes descrever o alvo por palavras — a opção habitual |
| Prompt visual | *-seg.pt | Caixas de exemplo numa imagem de referência | Genéricos object0, object1, … | Não consegues descrever o alvo por palavras: uma peça específica, um logótipo ou um defeito |
| Sem prompt | *-seg-pf.pt | Nada | Nomes do vocabulário integrado com 4 585 nomes | Estás a catalogar ou a explorar e não sabes antecipadamente o que procurar |
- Os prompts visuais não incluem as tuas etiquetas. Os IDs de classe em
visual_promptsagrupam os exemplos; o modelo devolve-os comoobject0,object1e assim por diante. Tens de os associar manualmente aos teus próprios nomes. - Os checkpoints sem prompt rejeitam
set_classes(). Chamá-lo num modelo*-seg-pf.ptgeraAssertionError: Prompt-free model does not support setting classes. Please try with Text/Visual prompt models.. Carrega um checkpoint*-seg.ptquando precisares das tuas próprias classes.
Instalação e requisitos#
O YOLOE está incluído no pacote principal da Ultralytics:
pip install -U ultralyticsAlém disso, o prompting por texto precisa de um codificador de texto, que é transferido na primeira utilização, e não durante a instalação:
- A primeira chamada
set_classes()instala ultralytics/CLIP do GitHub compip(que fornece o tokenizador) e transfere um codificador de texto TorchScript para o diretório de trabalho atual. O YOLOE-26 obtémmobileclip2_b.ts, com cerca de 254 MB; o YOLOE-11 e o YOLOE-v8 obtêmmobileclip_blt.ts. Executa a transferência uma vez a partir do diretório onde vais executar o sistema ou copia o ficheiro para lá; caso contrário, será transferido novamente. - Ambas as etapas precisam de acesso à rede. Por isso, executa uma previsão com prompt antes de implementar o sistema numa máquina offline ou isolada da rede.
- Os prompts visuais e os checkpoints sem prompt não precisam de nenhum codificador de texto.
Os checkpoints YOLOE-26 exigem ultralytics 8.4.0 ou posterior; as famílias YOLOE-11 e YOLOE-v8 estão disponíveis em versões anteriores. Uma previsão com prompt de texto testa todo o processo — transferência do checkpoint, instalação do CLIP, codificador de texto e inferência:
yolo predict model=yoloe-26s-seg.pt source="https://ultralytics.com/images/bus.jpg" classes="person"Para evitar por completo a transferência do codificador de texto no momento da inferência, incorpora os prompts nos pesos uma vez e reutiliza-os — consulta Reutilizar embeddings de prompts.
Visão geral da arquitetura#
O YOLOE mantém a estrutura YOLO padrão — um backbone convolucional para extração de características, um neck para fusão em várias escalas e uma head desacoplada sem âncoras que prevê classes e caixas — e acrescenta três módulos, um para cada modo de prompting:
- O Alinhamento Região-Texto Reparametrizável (RepRTA) refina os embeddings de texto do CLIP através de uma pequena rede auxiliar. Essa rede é executada uma vez por chamada
set_classes()e removida durante a exportação, por isso não tem custo por frame. O que é executado em cada passagem forward é a comparação entre os embeddings de prompt armazenados e as características das regiões; consulta Limitações para saber o custo de usar um conjunto grande de prompts. - O Codificador de Prompt Visual Ativado por Semântica (SAVPE) codifica características semânticas e de ativação a partir de uma caixa de exemplo, condicionando o modelo a objetos com aspeto semelhante. Este é o caminho de disparo único para alvos difíceis de nomear, como um logótipo ou uma peça específica.
- O Contraste Preguiçoso entre Região e Prompt (LRPC) compara embeddings de regiões com um vocabulário integrado com 4 585 nomes, permitindo que os checkpoints sem prompt reconheçam objetos sem prompt externo nem codificador de texto.
A segmentação de instâncias é feita por um ramo de máscaras na head de deteção, como no YOLOv8-Seg, e cada previsão inclui uma máscara em results[0].masks. Depois de exportado, os módulos de mundo aberto são reparametrizados numa head YOLO padrão, pelo que o ficheiro exportado executa o fluxo normal de deteção/segmentação.
Modelos disponíveis#
Todos os checkpoints abaixo são modelos de segmentação de instâncias e suportam val, predict, export e track. Carrega um ficheiro *-seg.pt para prompting de texto ou visual e um ficheiro *-seg-pf.pt para inferência sem prompt; não são intercambiáveis. Consulta Escolher um modo de prompting. Apenas os ficheiros *-seg.pt suportam train; um checkpoint sem prompt é criado a partir de um modelo treinado com prompts de texto. Consulta Treinar os modelos oficiais do zero.
| Modelo | Prompt de texto/visual | Sem prompt |
|---|---|---|
| YOLOE-26n | yoloe-26n-seg.pt | yoloe-26n-seg-pf.pt |
| YOLOE-26s | yoloe-26s-seg.pt | yoloe-26s-seg-pf.pt |
| YOLOE-26m | yoloe-26m-seg.pt | yoloe-26m-seg-pf.pt |
| YOLOE-26l | yoloe-26l-seg.pt | yoloe-26l-seg-pf.pt |
| YOLOE-26x | yoloe-26x-seg.pt | yoloe-26x-seg-pf.pt |
| YOLOE-11s | yoloe-11s-seg.pt | yoloe-11s-seg-pf.pt |
| YOLOE-11m | yoloe-11m-seg.pt | yoloe-11m-seg-pf.pt |
| YOLOE-11l | yoloe-11l-seg.pt | yoloe-11l-seg-pf.pt |
| YOLOE-v8s | yoloe-v8s-seg.pt | yoloe-v8s-seg-pf.pt |
| YOLOE-v8m | yoloe-v8m-seg.pt | yoloe-v8m-seg-pf.pt |
| YOLOE-v8l | yoloe-v8l-seg.pt | yoloe-v8l-seg-pf.pt |
Desempenho do YOLOE no LVIS#
Resultados zero-shot no minival do LVIS a 640 píxeis, retirados do artigo do Ultralytics YOLO26.
Prompts de texto e visuais#
Cada célula de precisão e parâmetros apresenta prompt de texto / prompt visual; os FLOPs são indicados uma única vez. Os parâmetros e FLOPs correspondem à configuração de deteção avaliada no artigo. A precisão é o valor Non-E2E do artigo, o único protocolo reportado para todos os modelos da comparação; a head end-to-end do YOLOE-26 fica, no máximo, 1,1 AP abaixo com prompts de texto e 2,6 AP abaixo com prompts visuais.
| Modelo | mAP50-95 | mAPr | mAPc | mAPf | parâmetros (M) | FLOPs (B) |
|---|---|---|---|---|---|---|
| YOLOE-26n | 24.7 / 21.9 | 20.5 / 17.6 | 24.1 / 22.3 | 26.1 / 22.4 | 3.9 / 3.1 | 6.1 |
| YOLOE-26s | 30.8 / 28.6 | 23.9 / 25.1 | 29.6 / 27.8 | 33.0 / 29.9 | 10.7 / 11.0 | 21.9 |
| YOLOE-26m | 35.4 / 33.9 | 31.1 / 33.4 | 34.7 / 34.0 | 36.9 / 33.8 | 21.3 / 25.1 | 70.6 |
| YOLOE-26l | 37.8 / 36.3 | 35.1 / 37.6 | 37.6 / 36.2 | 38.5 / 36.1 | 25.5 / 29.3 | 89.0 |
| YOLOE-26x | 40.6 / 38.5 | 37.4 / 35.3 | 40.9 / 38.8 | 41.0 / 38.8 | 55.2 / 65.2 | 197.7 |
| YOLOE-11s | 27.5 / 26.3 | 21.4 / 22.5 | 26.8 / 27.1 | 29.3 / 26.4 | 10.7 / 10.9 | 22.7 |
| YOLOE-11m | 33.0 / 31.4 | 26.9 / 27.1 | 32.5 / 31.9 | 34.5 / 31.7 | 21.0 / 24.8 | 70.4 |
| YOLOE-11l | 35.2 / 33.7 | 29.1 / 28.1 | 35.0 / 34.6 | 36.5 / 33.8 | 26.0 / 29.8 | 89.5 |
| YOLOE-v8s | 27.9 / 26.2 | 22.3 / 21.3 | 27.8 / 27.7 | 29.0 / 25.7 | 12.3 / 12.6 | 29.8 |
| YOLOE-v8m | 32.6 / 31.0 | 26.9 / 27.0 | 31.9 / 31.7 | 34.4 / 31.1 | 26.4 / 28.4 | 80.7 |
| YOLOE-v8l | 35.9 / 34.2 | 33.2 / 33.2 | 34.8 / 34.6 | 37.3 / 34.1 | 43.5 / 47.3 | 167.6 |
Sem prompt#
Os checkpoints sem prompt respondem usando o vocabulário integrado, sem receber qualquer prompt. Cada célula de precisão apresenta end-to-end / Non-E2E, os dois protocolos em que o artigo avalia o YOLOE-26; a página do YOLO26 apresenta a coluna Non-E2E.
| Modelo | mAP50-95 | mAPr | mAPc | mAPf | parâmetros (M) | FLOPs (B) |
|---|---|---|---|---|---|---|
| YOLOE-26n-pf | 16.6 / 17.7 | 15.7 / 15.8 | 15.3 / 16.4 | 17.9 / 19.2 | 2.3 | 5.3 |
| YOLOE-26s-pf | 21.4 / 22.6 | 16.2 / 20.2 | 20.1 / 20.9 | 23.5 / 24.5 | 9.0 | 20.8 |
| YOLOE-26m-pf | 25.7 / 26.4 | 26.7 / 24.5 | 24.0 / 25.0 | 26.9 / 27.9 | 19.4 | 68.4 |
| YOLOE-26l-pf | 27.2 / 28.0 | 26.3 / 25.7 | 25.7 / 26.8 | 28.7 / 29.5 | 23.6 | 86.8 |
| YOLOE-26x-pf | 29.9 / 31.1 | 27.5 / 28.9 | 29.1 / 30.7 | 31.1 / 31.7 | 53.1 | 194.4 |
Com prompts de texto e visuais, os modelos YOLOE-26 superam seus equivalentes YOLOE-11 e YOLOE-v8 em todas as escalas correspondentes no mAP50-95, mantendo-se abaixo da linha v8 em número de parâmetros e FLOPs. Na mesma divisão, o artigo relata 24.4 (S), 32.4 (M) e 35.5 (L) para o YOLO-Worldv2, e 26.0 para o GLIP-T, 27.4 para o GDINO-T e 34.4 para o DetCLIP-T, detectores baseados em Transformer, cada um com 155 a 232 M de parâmetros. O artigo original do YOLOE acrescenta dois resultados para os modelos na escala v8 que apresentou. No LVIS, o YOLOE-v8s supera o YOLO-Worldv2-S em 3.5 AP, com um terço do custo de treinamento e velocidade de inferência 1.4× maior. Transferido para o COCO, o YOLOE-v8l ganha 0.6 box AP e 0.4 mask AP em relação ao YOLOv8-L de conjunto fechado, com quase 4× menos tempo de treinamento.
O artigo do YOLO26 avalia uma configuração de detecção. Os pesos lançados são checkpoints de segmentação e incluem um ramo de máscara, SAVPE e a projeção de texto, por isso um yoloe-26l-seg.pt carregado informa 35.4 M e 142.0 B em vez dos 25.5 M e 89.0 B acima. Em ambos os casos, o valor de FLOPs exclui a similaridade entre região e texto, então o custo real aumenta com o tamanho do conjunto de prompts, embora o valor da coluna não mude; consulte Limitações.
Exemplos de uso#
Todos os exemplos de YOLOE abaixo são executados pela API do Python. A predição com prompts de texto, a validação, a exportação, o rastreamento e o treinamento simples também funcionam pela CLI; as receitas de ajuste fino e o prompting visual recebem uma classe de trainer ou predictor como argumento, algo aceito somente pela API do Python.
Utilização no treino#
Ajusta qualquer checkpoint *-seg.pt lançado usando seu próprio conjunto de dados YOLO. Isso segue em grande parte o procedimento padrão de treinamento YOLO; a diferença está no trainer que você passa. YOLOEPESegTrainer incorpora os nomes das suas classes à cabeça e ajusta o modelo a partir daí, que é o que você quer para seus próprios rótulos; o trainer padrão não treina com os nomes das suas classes.
Assista: Como treinar YOLOE no conjunto de dados de segmentação de peças de automóveis | Modelo de vocabulário aberto, predição e exportação 🚀
from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEPESegTrainer
model = YOLOE("yoloe-26s-seg.pt")
results = model.train(
data="coco128-seg.yaml",
epochs=80,
patience=10,
trainer=YOLOEPESegTrainer, # <- Importante: o trainer de ajuste fino, não o padrão
)Todos os checkpoints lançados são modelos de segmentação. Para treinar um detector, crie o modelo a partir do YAML correspondente, carregue os pesos de segmentação da mesma escala e substitua pelo trainer de detecção. Todo o resto permanece igual.
from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEPETrainer
model = YOLOE("yoloe-26s.yaml").load("yoloe-26s-seg.pt")
results = model.train(data="coco128.yaml", epochs=80, patience=10, trainer=YOLOEPETrainer)Uso de predição#
A chamada com prompt de texto é a mostrada em Início rápido. Cada um dos outros dois modos precisa de um argumento extra:
Os prompts visuais mostram ao modelo um exemplo, em vez de descrevê-lo. visual_prompts recebe um array bboxes de caixas de exemplo e um array cls de IDs de classe, um por caixa. Os IDs são agrupamentos temporários, não rótulos — precisam ser sequenciais a partir de 0, e os resultados são retornados como object0, object1, …, e não com os nomes que você escolher.
As caixas de exemplo podem estar na imagem em que você está fazendo a predição:
import numpy as np
from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEVPSegPredictor
model = YOLOE("yoloe-26l-seg.pt")
# Uma caixa de exemplo por alvo, cada uma com seu próprio ID de classe
visual_prompts = {
"bboxes": np.array([[221.52, 405.8, 344.98, 857.54], [120, 425, 160, 445]]), # pessoa, óculos
"cls": np.array([0, 1]),
}
results = model.predict(
"ultralytics/assets/bus.jpg",
visual_prompts=visual_prompts,
predictor=YOLOEVPSegPredictor,
)
results[0].show()Ou em uma imagem de referência separada, passada como refer_image; nesse caso, bboxes e cls descrevem objetos nessa referência, não no alvo:
import numpy as np
from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEVPSegPredictor
model = YOLOE("yoloe-26l-seg.pt")
visual_prompts = {"bboxes": np.array([[221.52, 405.8, 344.98, 857.54]]), "cls": np.array([0])} # person
results = model.predict(
"ultralytics/assets/zidane.jpg", # Imagem-alvo
refer_image="ultralytics/assets/bus.jpg", # Onde ficam as caixas de exemplo
visual_prompts=visual_prompts,
predictor=YOLOEVPSegPredictor,
)
results[0].show()
# refer_image também define as classes permanentemente, então as chamadas seguintes não precisam de prompts
results = model("ultralytics/assets/bus.jpg")
model.export(format="onnx") # E a exportação as mantémQuando source é um vídeo ou stream, o primeiro quadro se torna automaticamente o refer_image, então os prompts que você passa são aplicados a esse quadro e mantidos ao longo do restante do vídeo. Passe refer_image explicitamente para escolher outro quadro.
Tanto source quanto refer_image aceitam diretamente tensores torch, o que é útil quando as imagens já vêm de um pipeline existente. Informe as caixas nas próprias coordenadas de pixel do tensor:
import numpy as np
import torch
from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEVPSegPredictor
model = YOLOE("yoloe-11l-seg.pt")
img_tensor = torch.rand(1, 3, 480, 480) # tensor float (1, 3, H, W) em [0, 1]
visual_prompts = {"bboxes": np.array([[10, 10, 50, 50]]), "cls": np.array([0])}
results = model.predict(
img_tensor,
refer_image=img_tensor,
visual_prompts=visual_prompts,
predictor=YOLOEVPSegPredictor,
imgsz=640,
)Para fazer predições em várias imagens de uma vez, aninhe os prompts em mais um nível: um array bboxes e um array cls para cada imagem de origem, na mesma ordem das imagens de origem.
import numpy as np
from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEVPSegPredictor
model = YOLOE("yoloe-26l-seg.pt")
visual_prompts = {
"bboxes": [
np.array([[221.52, 405.8, 344.98, 857.54], [120, 425, 160, 445]]), # bus.jpg: pessoa, óculos
np.array([[150, 200, 1150, 700]]), # zidane.jpg: pessoa
],
"cls": [np.array([0, 1]), np.array([0])],
}
results = model.predict(
["ultralytics/assets/bus.jpg", "ultralytics/assets/zidane.jpg"],
visual_prompts=visual_prompts,
predictor=YOLOEVPSegPredictor,
)
results[0].show()Uso de validação#
A validação é executada como em qualquer outro modelo, usando um conjunto de dados de segmentação:
from ultralytics import YOLOE
model = YOLOE("yoloe-26l-seg.pt") # ou yoloe-26s/m-seg.pt para outros tamanhos
metrics = model.val(data="coco128-seg.yaml")Duas variantes da mesma chamada abrangem os outros modos de prompting:
- Prompts visuais —
model.val(data="coco128-seg.yaml", load_vp=True)extrai do próprio conjunto de dados um embedding visual por categoria. Adicionerefer_data="coco.yaml"para obter os embeddings de outro conjunto de dados, que precisa conter exatamente as mesmas categorias. - Sem prompt — carregue um checkpoint
*-seg-pf.pte passesingle_cls=True.
Uso da exportação#
Os embeddings de prompt podem ser salvos uma vez e reutilizados ao gerar exportações estáticas como ONNX, OpenVINO, TensorRT, CoreML, LiteRT e RKNN. O perfil NPZ é carregado pelo modelo original PyTorch antes da exportação; não é uma entrada adicional em tempo de execução, e o modelo exportado não precisa do arquivo NPZ.
As classes configuradas com set_classes() (ou por meio de refer_image para prompts visuais) são incorporadas aos pesos exportados. Após a exportação, o modelo não pode mais aceitar novos prompts: chamar set_classes() ou passar visual_prompts=... para predict() em uma exportação carregada causará um erro. Para alterar as classes detectadas, exporte novamente a partir do checkpoint original .pt com os novos prompts configurados. O arquivo exportado funciona como um modelo YOLO padrão e também pode ser carregado com YOLO() em vez de YOLOE().
from ultralytics import YOLOE
model = YOLOE("yoloe-26n-seg.pt")
model.set_classes(["person", "bus"])
model.save_prompt_embeddings("person-bus.npz")
# O perfil está vinculado ao checkpoint de origem e pode ser reutilizado em exportações posteriores.
model = YOLOE("yoloe-26n-seg.pt")
model.load_prompt_embeddings("person-bus.npz")
model.export(format="onnx")O mesmo perfil de prompt também pode configurar um modelo apenas de detecção, criado a partir da arquitetura YOLOE correspondente. Isso remove o ramo de máscara, mantendo as classes solicitadas por prompt:
from ultralytics import YOLOE
model = YOLOE("yoloe-26n.yaml").load("yoloe-26n-seg.pt")
model.load_prompt_embeddings("person-bus.npz")
model.export(format="rknn", name="rk3588", quantize=16)Uso do rastreamento#
As classes solicitadas por prompt são transferidas diretamente para o rastreamento, para que você possa acompanhar objetos para os quais o tracker nunca foi treinado:
from ultralytics import YOLOE
model = YOLOE("yoloe-26s-seg.pt")
model.set_classes(["forklift", "pallet"])
# persist=True mantém os IDs de rastreamento estáveis entre os quadros
for result in model.track("path/to/video.mp4", stream=True, persist=True):
print(result.boxes.id)Comparação do YOLOE#
O YOLOE fica entre um detector de conjunto fechado e um modelo de vocabulário aberto mais pesado. Três comparações ajudam a decidir se é a escolha certa:
- Em comparação com um YOLO de conjunto fechado. Depois de definir os prompts, o YOLOE faz predições pelo fluxo comum de detecção/segmentação e é exportado como qualquer outro modelo. O que ele acrescenta é a capacidade de alterar a lista de classes no momento da inferência, sem retreinar; o custo é uma precisão zero-shot muito inferior à de um modelo treinado com suas próprias classes.
- Em comparação com as famílias YOLOE anteriores. O YOLOE-26 herda a cabeça end-to-end sem NMS do YOLO26 e abrange cinco escalas (n/s/m/l/x), em comparação com as três anteriores (s/m/l), além de liderar em todas as escalas correspondentes em Desempenho.
- Em comparação com detectores de vocabulário aberto baseados em Transformer. O GLIP e o OWL-ViT executam um Transformer de visão e linguagem durante a inferência. O YOLOE codifica os prompts uma vez e depois os compara com os recursos das regiões dentro de uma cabeça convolucional.
As alternativas mais próximas aceitam todas um prompt de texto, mas apenas o YOLOE e o SAM 3 retornam máscaras, e os três respondem a perguntas diferentes:
| YOLOE | SAM 3 | YOLO-World | |
|---|---|---|---|
| Criado para | Detecção e segmentação em tempo real de classes nomeadas | Segmentação de conceitos e rastreamento com prompts | Detecção de vocabulário aberto em tempo real |
| Máscaras | Sim, com os checkpoints *-seg.pt | Sim | Não, apenas caixas |
| Prompts visuais | Sim (SAVPE) | Sim | Não |
| Modo sem prompt | Sim, vocabulário de 4,585 nomes | Não | Não |
| Escolha quando | Você precisa de alto rendimento e consegue nomear as classes | Você precisa da segmentação de conceitos mais robusta e pode usar mais recursos computacionais | Você já usa essa opção — consulte a nota de migração abaixo |
Vindo do YOLO-World? A API tem o mesmo formato: substitua YOLOWorld por YOLOE, carregue um checkpoint *-seg.pt e mantenha sua chamada set_classes() como está. Você ganha máscaras e prompts visuais; a nota sobre exportação referente às classes congeladas se aplica a ambos.
Casos de uso e aplicações#
A detecção de vocabulário aberto elimina a etapa de retreinamento por classe, o que é especialmente importante quando a lista de alvos não é conhecida de antemão:
- Detecção em ambientes abertos — robótica e sistemas de segurança que encontram objetos não enumerados durante o treinamento.
- Detecção one-shot a partir de um exemplo — os prompts visuais identificam uma peça, um logotipo ou um defeito específico usando uma única caixa de referência, algo útil na inspeção industrial.
- Catalogação de cauda longa — o vocabulário integrado de 4,585 nomes é amplo o bastante para levantamentos de monitoramento da biodiversidade ou de estoque no varejo.
- Inicialização de conjuntos de dados — faça a pré-rotulagem de imagens com caixas e máscaras antes da revisão humana e, em seguida, treine um modelo rápido de conjunto fechado com os resultados.
- Segmentação de alvos arbitrários — os checkpoints
*-seg.ptlançados retornam uma máscara para cada predição, então a imagiologia médica e a análise de imagens de satélite obtêm resultados precisos ao nível do pixel sem precisar de um segundo modelo.
Um padrão comum combina dois modos: execute uma vez sem prompt para descobrir o que está presente e, em seguida, use prompts de texto para as categorias relevantes.
Limitações#
O YOLOE troca precisão pela capacidade de alterar classes no momento da inferência. Estas são as consequências que você deve conhecer antes de adotá-lo:
- A precisão zero-shot é muito inferior à de um modelo treinado com suas classes. Os checkpoints com prompts ficam aproximadamente na faixa de 22-40 mAP no LVIS minival; um YOLO de conjunto fechado treinado com seus próprios dados terá melhor desempenho nessas classes. Use o YOLOE para abranger classes para as quais você não pode treinar, não para substituir o treinamento.
- Categorias raras são o ponto fraco. A coluna mAPr em Desempenho informa a precisão especificamente nas classes raras do LVIS e, com prompts de texto, fica abaixo das colunas de classes comuns e frequentes em todas as linhas. Confira esse valor, não apenas o mAP principal, quando seus alvos forem incomuns.
- Um prompt descreve a aparência, não as relações. A detecção funciona comparando os recursos das regiões com o embedding do prompt, então prompts que dependem de estado, contexto ou comparação — "danificado", "o mais à esquerda", "o que está sendo carregado" — não oferecem um critério confiável para correspondência. Prefira termos próximos aos nomes de categorias usados no dia a dia.
- Conjuntos grandes de prompts aumentam a latência. Os embeddings de prompt são calculados uma vez, mas são comparados com os recursos das regiões em cada passagem forward. Medida na CPU com
yoloe-26s-seg.pt, uma passagem forward aumenta cerca de 19% ao passar de 80 para 1,203 classes e cerca de 89% com o vocabulário completo de 4,585 nomes. Os FLOPs informados não mudam, pois a similaridade entre região e texto não é contabilizada, então o perfil não vai alertar você. - Os nomes das classes são provisórios até você definir os prompts. Um checkpoint
*-seg.ptrecém-carregado informanc=80com nomes numéricos ("0","1", …), então chameset_classes()antes de ler os rótulos. Os checkpoints sem prompt já vêm com o vocabulário completo.
Notas de implantação#
- Hardware. A inferência precisa de uma GPU NVIDIA com 4-8 GB de VRAM; as escalas
nesfuncionam em GPUs de borda como Jetson ou na CPU com resolução reduzida. O ajuste fino precisa de uma única GPU. - Por padrão, o NMS não considera as classes. O YOLOE faz predições com
agnostic_nms=True. Por padrão, isso suprime caixas sobrepostas com pontuação menor entre classes diferentes, em vez de apenas dentro da mesma classe, evitando duplicatas quando um objeto corresponde a várias categorias. Comnms=False, o YOLOE-26 não aplica supressão por IoU; o modo independente de classe mantém apenas a melhor classe por âncora, em vez de permitir que uma âncora emita vários rótulos de classe. Passeagnostic_nms=Falsepara substituir esse comportamento. - Processamento em lote. A inferência em lote funciona diretamente, e os prompts visuais podem ser diferentes para cada imagem na mesma chamada.
Treinar os modelos oficiais do zero#
A maioria das pessoas não precisa fazer isso. Esse processo reproduz os checkpoints de vocabulário aberto publicados a partir do Objects365, GQA e Flickr30k — cerca de 1.4 M de amostras de treinamento em 8× RTX 4090 — e não tem relação com o ajuste fino nos seus próprios dados, abordado acima em Uso do treinamento.
Todos os trainers que herdam YOLOETrainer recusam compile=True, incluindo o YOLOESegTrainer padrão e todos os trainers de treinamento do zero abaixo. Passe compile=False (o padrão). Os dois trainers de ajuste fino usados acima, YOLOEPESegTrainer e YOLOEPETrainer, não têm essa restrição.
O treinamento precisa de anotações de segmentos. Você pode baixar os arquivos processados abaixo ou gerar os seus com o script fornecido pela equipe oficial, baseado no SAM 2.1. A validação usa o LVIS minival.
| Conjunto de dados | Tipo | Amostras | Caixas | Anotações de segmentos processadas |
|---|---|---|---|---|
| Objects365v1 | Deteção | 609k | 9621k | objects365_train_segm.json |
| GQA | Aterramento | 621k | 3681k | final_mixed_train_no_coco_segm.json |
| Flickr30k | Aterramento | 149k | 641k | final_flickr_separateGT_train_segm.json |
O modelo com prompt de texto é treinado primeiro, e os outros dois modos de prompting são refinamentos dele:
from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOESegTrainerFromScratch
data = {
"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 = YOLOE("yoloe-26l-seg.yaml")
model.train(
data=data, # ou o caminho para um arquivo YAML com a mesma estrutura
batch=128,
epochs=30,
close_mosaic=2,
optimizer="AdamW",
lr0=2e-3,
warmup_bias_lr=0.0,
weight_decay=0.025,
momentum=0.9,
workers=4,
trainer=YOLOESegTrainerFromScratch,
device="0,1,2,3,4,5,6,7",
)Os checkpoints de prompt visual e sem prompt partem desse modelo treinado com prompt de texto e atualizam um módulo cada. YOLOESegVPTrainer é a receita de prompt visual e YOLOEPEFreeTrainer é a receita sem prompt, mas nenhuma das classes congela nada por si só: o treinamento seletivo vem da lista freeze que você passa junto, que inclui todos os filhos da cabeça, exceto savpe (ou todas as torres de classificação), e a execução sem prompt também precisa de single_cls=True. O repositório upstream do YOLOE contém as receitas completas para os modelos da escala v8.
Uma execução sem prompt concluída é reparametrizada em um checkpoint que apresenta seus nomes sem prompt durante a inferência, usando get_vocab e set_vocab:
from ultralytics import YOLOE
# Pesos gravados pela execução sem prompt e pela execução com prompt de texto a partir da qual ela começou. Cada
# nova execução cria um diretório (train-2, train-3, ...), então use os caminhos exibidos pelas execuções.
model = YOLOE("runs/segment/train-2/weights/best.pt") # execução sem prompt, a cabeça já está fundida
text_model = YOLOE("runs/segment/train/weights/best.pt") # execução com prompt de texto, a cabeça ainda não está fundida
names = list(YOLOE("yoloe-26l-seg-pf.pt").model.names.values()) # o vocabulário de 4.585 nomes ou sua própria lista
vocab = text_model.get_vocab(names)
model.set_vocab(vocab, names)
model.save("yoloe-26l-seg-pf-custom.pt") # nunca sobrescreva o checkpoint publicadoget_vocab retorna o ramo selecionado pela flag end2end do modelo, e set_vocab reparametriza esse ramo. Já os arquivos YOLOE-26 publicados trazem um vocabulário por ramo, o que permite que nms continue selecionando entre eles; reproduza esse comportamento obtendo o segundo vocabulário de outra cópia do modelo com prompt de texto. YOLOE-11 e YOLOE-v8 têm um único ramo, então usam a chamada acima sem alterações.
one2one_model = YOLOE("runs/segment/train/weights/best.pt") # get_vocab funde a cabeça que lê, então carregue uma segunda cópia
one2one_model.model.end2end = True # leia o ramo sem NMS
model.set_vocab(vocab, names, one2one_vocab=one2one_model.get_vocab(names))Citações e agradecimentos#
Se o YOLOE contribuiu para sua pesquisa ou projeto, cite o artigo original de Ao Wang, Lihao Liu, Hui Chen, Zijia Lin, Jungong Han e Guiguang Ding, da Universidade Tsinghua:
@misc{wang2025yoloerealtimeseeing,
title={YOLOE: Real-Time Seeing Anything},
author={Ao Wang and Lihao Liu and Hui Chen and Zijia Lin and Jungong Han and Guiguang Ding},
year={2025},
eprint={2503.07465},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2503.07465},
}Para saber mais, o artigo original do YOLOE está disponível no arXiv. O código-fonte do projeto e recursos adicionais podem ser acessados pelo repositório no GitHub.
Perguntas frequentes#
O Ultralytics YOLOE adiciona dois recursos que o YOLO-World não tem: prompts visuais, em que uma caixa de exemplo substitui o nome da classe, e checkpoints sem prompt, que respondem usando um vocabulário integrado de 4.585 nomes, sem nenhum prompt. Todas as previsões dos checkpoints
*-seg.ptpublicados também incluem uma máscara de segmentação de instâncias. Em termos de precisão, o artigo original do YOLOE mostra o YOLOE-v8s 3,5 AP à frente do YOLO-Worldv2-S no LVIS, com um terço do custo de treinamento e 1,4× a velocidade de inferência. A migração exige uma única alteração — consulte Comparação do YOLOE.O Ultralytics YOLOE oferece suporte a três modos de prompt. Um prompt de texto consiste em nomes de classes como strings em um checkpoint
*-seg.pte é a opção mais comum. Um prompt visual consiste em uma ou mais caixas de exemplo em uma imagem de referência, para objetos difíceis de descrever com palavras. A inferência sem prompt usa um checkpoint*-seg-pf.ptseparado, que responde com base em um vocabulário integrado de 4.585 nomes, sem receber nenhuma entrada. Os prompts de texto e visuais usam os mesmos checkpoints; os checkpoints sem prompt são arquivos diferentes e rejeitamset_classes(). Consulte Escolher um modo de prompt para ver a comparação completa.Comece com
yoloe-26s-seg.pt: a família YOLOE-26 supera YOLOE-11 e YOLOE-v8 em todas as escalas correspondentes, e a escalasé a menor que passa de 30 mAP no minival do LVIS. Passe param,louxquando a precisão em categorias raras for mais importante que a latência — a coluna mAPr em Desempenho é a que você deve comparar. Usenapenas para implantação em dispositivos de borda. Em vez disso, carregue o arquivo*-seg-pf.ptda mesma escala quando quiser usar o vocabulário integrado, e não seus próprios nomes de classe.Rótulos como
object0eobject1indicam que a previsão veio de um prompt visual, que agrupa as caixas de exemplo em classes numeradas temporárias, em vez de usar os nomes que você definiu. Os IDs de classe que você passa emvisual_prompts["cls"]servem apenas para esse agrupamento. O modelo os apresenta comoobject0,object1e assim por diante, na ordem dos IDs atribuídos; portanto, associe-os aos seus próprios rótulos no resultado. Se quiser que a saída inclua seus nomes, use um prompt de texto.Os checkpoints sem prompt (
*-seg-pf.pt) resolvem as classes usando seu próprio vocabulário integrado e rejeitam prompts externos comAssertionError: Prompt-free model does not support setting classes. Please try with Text/Visual prompt models.. Carregue um checkpoint*-seg.ptquando precisar da sua própria lista de classes. Consulte Escolher um modo de prompt.O primeiro prompt de texto faz o Ultralytics YOLOE instalar ultralytics/CLIP do GitHub com
pipe baixar um codificador de texto TorchScript para o diretório de trabalho atual — cerca de 254 MB no YOLOE-26; consulte Instalação e requisitos para ver o recurso exato de cada família de modelos. Os prompts visuais e os checkpoints sem prompt não precisam de nenhum dos dois. Para evitar o download na máquina de destino, defina os prompts uma vez e salve-os comsave_prompt_embeddings(), ou exporte o modelo com as classes já configuradas.Não — o YOLOE incorpora as classes do prompt aos pesos durante a exportação, então uma exportação carregada rejeita tanto
set_classes()quantovisual_prompts=. Exporte novamente a partir do checkpoint original.ptcom os novos prompts configurados. O arquivo exportado funciona como um modelo YOLO padrão e também pode ser carregado comYOLO()eYOLOE().Use YOLOE quando precisar de alto desempenho em tempo real e puder nomear as classes, e SAM 3 quando a qualidade da segmentação de um conceito for mais importante que a velocidade. Ambos aceitam exemplos visuais; só o YOLOE tem um modo sem prompt. A comparação completa está em Comparação do YOLOE.