YOLOE: Phát hiện và phân đoạn từ vựng mở theo thời gian thực#
Ultralytics YOLOE (Seeing Anything theo thời gian thực) là model phát hiện từ vựng mở và phân đoạn instance: thay vì sử dụng danh sách lớp cố định tại thời điểm training, model nhận các danh mục bạn muốn tại thời điểm inference dưới dạng prompt văn bản, ví dụ trực quan hoặc bộ từ vựng tích hợp gồm 4.585 tên. Được xây dựng trên các kiến trúc Ultralytics YOLO — YOLOv8, YOLO11 và YOLO26 — và lấy cảm hứng từ YOLO-World, YOLOE đạt độ chính xác zero-shot tiên tiến với tốc độ gần bằng YOLO closed-set.
Watch: How to use Ultralytics YOLOE-26 (New) | Open Vocabulary & Real-Time Seeing Anything 🚀
Bắt đầu nhanh#
Đặt tên cho các lớp bạn muốn rồi chạy. YOLOE-26 trả về các box và mask phân đoạn instance cho những danh mục mà model chưa từng được training.
from ultralytics import YOLOE
model = YOLOE("yoloe-26s-seg.pt")
# "double-decker bus" is not a COCO class; YOLOE resolves it from the words alone
model.set_classes(["double-decker bus", "person"])
results = model.predict("https://ultralytics.com/images/bus.jpg")
results[0].show()Lần gọi set_classes() đầu tiên sẽ tải xuống text encoder; xem Cài đặt và yêu cầu trước khi triển khai trên máy không có quyền truy cập mạng.
Chọn chế độ prompting#
YOLOE hỗ trợ ba chế độ prompting, và lựa chọn này quyết định checkpoint bạn tải cũng như cách các nhãn lớp xuất hiện. Hãy chọn hàng phù hợp với dữ liệu bạn có thể cung cấp tại thời điểm inference.

| Chế độ | Checkpoint | Bạn cung cấp | Tên lớp trong kết quả | Sử dụng khi |
|---|---|---|---|---|
| Prompt văn bản | *-seg.pt | Tên lớp dưới dạng chuỗi | Chính xác các tên bạn đã truyền vào | Bạn có thể mô tả mục tiêu bằng từ ngữ — lựa chọn thông thường |
| Prompt trực quan | *-seg.pt | Các box ví dụ trên ảnh tham chiếu | object0, object1, … chung chung | Bạn không thể diễn đạt mục tiêu bằng từ ngữ: một bộ phận cụ thể, logo hoặc lỗi |
| Không cần prompt | *-seg-pf.pt | Không có gì | Tên từ bộ từ vựng tích hợp gồm 4.585 tên | Bạn đang lập catalog hoặc khám phá và chưa biết trước cần tìm gì |
- Prompt trực quan không chứa nhãn của bạn. Các ID lớp trong
visual_promptsdùng để nhóm các ví dụ; model báo cáo chúng dưới dạngobject0,object1và tiếp tục như vậy. Bạn phải tự ánh xạ chúng trở lại tên riêng của mình. - Checkpoint không cần prompt từ chối
set_classes(). Gọi nó trên model*-seg-pf.ptsẽ phát sinh lỗiAssertionError: Prompt-free model does not support setting classes. Please try with Text/Visual prompt models.Load. Thay vào đó, hãy tải checkpoint*-seg.ptkhi cần các lớp riêng của bạn.
Cài đặt và yêu cầu#
YOLOE được cung cấp trong package Ultralytics chính:
pip install -U ultralyticsPrompt văn bản cần thêm một text encoder, được tải xuống ở lần sử dụng đầu tiên thay vì lúc cài đặt:
- Lần gọi
set_classes()đầu tiên sẽ cài đặt ultralytics/CLIP từ GitHub cùng vớipip(cung cấp tokenizer) và tải xuống một text encoder TorchScript vào thư mục làm việc hiện tại. YOLOE-26 tảimobileclip2_b.ts, có kích thước khoảng 254 MB; YOLOE-11 và YOLOE-v8 tảimobileclip_blt.ts. Hãy chạy lệnh tải xuống một lần từ thư mục bạn sẽ chạy chương trình, hoặc sao chép file vào đó; nếu không, file sẽ được tải lại. - Cả hai bước đều cần quyền truy cập mạng, vì vậy hãy chạy một lần dự đoán có prompt trước khi triển khai trên máy offline hoặc bị cô lập mạng.
- Prompt trực quan và checkpoint không cần prompt hoàn toàn không cần text encoder.
Các checkpoint YOLOE-26 yêu cầu ultralytics 8.4.0 trở lên; các họ YOLOE-11 và YOLOE-v8 có sẵn trong những bản phát hành trước đó. Một lần dự đoán có prompt văn bản sẽ kiểm tra toàn bộ quy trình — tải checkpoint, cài đặt CLIP, text encoder, inference:
yolo predict model=yoloe-26s-seg.pt source="https://ultralytics.com/images/bus.jpg" classes="person"Để hoàn toàn bỏ qua việc tải text encoder tại thời điểm inference, hãy nhúng prompt vào weights một lần rồi tái sử dụng — xem Tái sử dụng embedding của prompt.
Tổng quan kiến trúc#
YOLOE duy trì cấu trúc YOLO tiêu chuẩn — backbone tích chập để trích xuất đặc trưng, neck để hợp nhất đa tỷ lệ và head không anchor, tách biệt dự đoán lớp và box — đồng thời bổ sung ba module, mỗi module tương ứng với một chế độ prompting:
- Re-parameterizable Region-Text Alignment (RepRTA) tinh chỉnh embedding văn bản từ CLIP thông qua một mạng phụ trợ nhỏ. Mạng này chạy một lần cho mỗi lệnh gọi
set_classes()và được gộp lại khi export, nên không tốn chi phí trên mỗi frame. Thành phần thực sự chạy trong mỗi forward pass là phép so sánh embedding prompt đã lưu với các đặc trưng vùng; xem Hạn chế để biết chi phí khi dùng tập prompt lớn. - Semantic-Activated Visual Prompt Encoder (SAVPE) mã hóa các đặc trưng ngữ nghĩa và activation từ một box ví dụ, điều kiện hóa model trên các đối tượng có hình dạng tương tự. Đây là quy trình one-shot dành cho những mục tiêu khó gọi tên, chẳng hạn như logo hoặc một bộ phận cụ thể.
- Lazy Region-Prompt Contrast (LRPC) đối sánh embedding vùng với bộ từ vựng tích hợp gồm 4.585 tên, vì vậy checkpoint không cần prompt có thể nhận diện đối tượng mà không cần prompt bên ngoài hay text encoder.
Phân đoạn instance đến từ một nhánh mask trên detection head, tương tự YOLOv8-Seg, và mỗi dự đoán mang theo một mask trên results[0].masks. Sau khi model được export, các module open-world được tái tham số hóa thành một YOLO head tiêu chuẩn, nên file đã export chạy theo quy trình detect/segment thông thường.
Các model có sẵn#
Mọi checkpoint bên dưới đều là model phân đoạn instance và hỗ trợ val, predict, export và track. Tải file *-seg.pt để prompting bằng văn bản hoặc trực quan và file *-seg-pf.pt để inference không cần prompt; chúng không thể thay thế cho nhau, xem Chọn chế độ prompting. Chỉ các file *-seg.pt hỗ trợ train; checkpoint không cần prompt được tạo từ model text-prompt đã training, xem Training các model chính thức từ đầu.
| Model | Prompt văn bản / trực quan | Không cần 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 |
Hiệu năng YOLOE trên LVIS#
Kết quả zero-shot trên LVIS minival ở kích thước 640 pixel, lấy từ bài báo Ultralytics YOLO26.
Prompt văn bản và trực quan#
Mỗi ô độ chính xác và tham số được đọc là prompt văn bản / prompt trực quan; FLOPs chỉ được ghi một lần. Các tham số và FLOPs áp dụng cho cấu hình detection được đánh giá trong bài báo. Độ chính xác là con số Non-E2E của bài báo, giao thức duy nhất được báo cáo cho mọi model trong phép so sánh; end-to-end head của YOLOE-26 thấp hơn tối đa 1.1 AP với prompt văn bản và 2.6 AP với prompt trực quan.
| Model | mAP50-95 | mAPr | mAPc | mAPf | tham số (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 |
Không cần prompt#
Các checkpoint không cần prompt đưa ra kết quả dựa trên bộ từ vựng tích hợp mà không cần cung cấp prompt. Mỗi ô độ chính xác được đọc là end-to-end / Non-E2E, hai giao thức mà bài báo chấm điểm cho YOLOE-26; trang YOLO26 trích dẫn cột Non-E2E.
| Model | mAP50-95 | mAPr | mAPc | mAPf | tham số (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 |
Với prompt văn bản và trực quan, các model YOLOE-26 dẫn trước các phiên bản YOLOE-11 và YOLOE-v8 tương ứng ở mọi scale tương đồng về mAP50-95, đồng thời vẫn thấp hơn dòng v8 về số tham số và FLOPs. Trên cùng split, bài báo báo cáo YOLO-Worldv2 đạt 24.4 (S), 32.4 (M) và 35.5 (L), còn các detector dựa trên Transformer là GLIP-T đạt 26.0, GDINO-T đạt 27.4 và DetCLIP-T đạt 34.4, mỗi model có từ 155 đến 232 M tham số. Bài báo YOLOE gốc bổ sung hai kết quả cho các model ở scale v8 mà họ giới thiệu. Trên LVIS, YOLOE-v8s vượt YOLO-Worldv2-S 3.5 AP với chi phí training bằng một phần ba và tốc độ inference cao hơn 1.4 lần. Khi chuyển sang COCO, YOLOE-v8l tăng 0.6 box AP và 0.4 mask AP so với YOLOv8-L closed-set, với thời gian training ít hơn gần 4 lần.
Bài báo YOLO26 đánh giá một cấu hình detection. Các weights đã phát hành là checkpoint segmentation và có thêm nhánh mask, SAVPE cùng phép chiếu văn bản, nên một yoloe-26l-seg.pt được tải sẽ báo cáo 35.4 M và 142.0 B thay vì 25.5 M và 89.0 B ở trên. Trong cả hai trường hợp, số FLOPs không bao gồm độ tương đồng vùng-văn bản, vì vậy chi phí thực tế tăng theo kích thước tập prompt dù cột này không thay đổi; xem Hạn chế.
Ví dụ sử dụng#
Mọi ví dụ YOLOE bên dưới đều chạy từ Python API. Dự đoán bằng prompt văn bản, validation, export, tracking và training thông thường cũng hoạt động từ CLI; các công thức fine-tuning và prompting trực quan truyền một trainer hoặc predictor class dưới dạng tham số, điều mà chỉ Python API hỗ trợ.
Cách sử dụng Train#
Fine-tune bất kỳ checkpoint *-seg.pt nào đã phát hành trên dataset YOLO của riêng bạn. Quy trình này chủ yếu tuân theo quy trình training YOLO tiêu chuẩn; điểm khác biệt là trainer bạn truyền vào. YOLOEPESegTrainer hợp nhất tên lớp của bạn vào head rồi fine-tune từ đó, đây là lựa chọn phù hợp khi dùng nhãn riêng; trainer mặc định không training dựa trên tên lớp của bạn.
Watch: How to Train YOLOE on Car Parts Segmentation Dataset | Open-Vocabulary Model, Prediction & Export 🚀
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, # <- Important: the fine-tuning trainer, not the default
)Mọi checkpoint đã phát hành đều là model segmentation. Để huấn luyện detector, hãy dựng model từ YAML tương ứng, nạp các segmentation weights cùng scale và thay bằng detection trainer. Mọi thứ khác giữ nguyên.
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)Cách sử dụng Predict#
Lệnh gọi text-prompt là lệnh được trình bày trong Quick Start. Hai mode còn lại mỗi mode cần thêm một đối số:
Visual prompt cho model xem một ví dụ thay vì mô tả đối tượng. visual_prompts nhận một array bboxes gồm các example box và một array cls gồm các class ID, mỗi box tương ứng một ID. Các ID này chỉ là nhóm tạm thời, không phải label — chúng phải tuần tự bắt đầu từ 0, và kết quả được trả về dưới dạng object0, object1, … thay vì các tên do bạn chọn.
Các example box có thể nằm trên chính ảnh mà bạn đang dự đoán:
import numpy as np
from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEVPSegPredictor
model = YOLOE("yoloe-26l-seg.pt")
# One example box per target, each with its own class ID
visual_prompts = {
"bboxes": np.array([[221.52, 405.8, 344.98, 857.54], [120, 425, 160, 445]]), # person, glasses
"cls": np.array([0, 1]),
}
results = model.predict(
"ultralytics/assets/bus.jpg",
visual_prompts=visual_prompts,
predictor=YOLOEVPSegPredictor,
)
results[0].show()Hoặc nằm trên một ảnh tham chiếu riêng được truyền dưới dạng refer_image; khi đó, bboxes và cls mô tả các object trong ảnh tham chiếu, không phải trong ảnh đích:
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", # Target image
refer_image="ultralytics/assets/bus.jpg", # Where the example boxes live
visual_prompts=visual_prompts,
predictor=YOLOEVPSegPredictor,
)
results[0].show()
# refer_image also sets the classes permanently, so later calls need no prompts at all
results = model("ultralytics/assets/bus.jpg")
model.export(format="onnx") # And the export keeps themKhi source là video hoặc stream, frame đầu tiên tự động trở thành refer_image, vì vậy các prompt bạn truyền sẽ được áp dụng cho frame đó và duy trì xuyên suốt phần còn lại của video. Truyền tường minh refer_image để chọn một frame khác.
Cả source và refer_image đều nhận trực tiếp tensor torch, rất hữu ích khi ảnh đã có từ một pipeline hiện có. Cung cấp các box theo tọa độ pixel riêng của 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) # (1, 3, H, W) float tensor in [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,
)Để dự đoán trên nhiều ảnh cùng lúc, hãy lồng các prompt sâu hơn một cấp: một array bboxes và một array cls cho mỗi ảnh nguồn, theo cùng thứ tự với các nguồn.
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: person, glasses
np.array([[150, 200, 1150, 700]]), # zidane.jpg: person
],
"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()Cách sử dụng Val#
Validation hoạt động như với mọi model khác trên dataset segmentation:
from ultralytics import YOLOE
model = YOLOE("yoloe-26l-seg.pt") # or yoloe-26s/m-seg.pt for other sizes
metrics = model.val(data="coco128-seg.yaml")Hai biến thể của cùng một lệnh gọi bao phủ các mode prompting còn lại:
- Visual prompt —
model.val(data="coco128-seg.yaml", load_vp=True)trích xuất một visual embedding cho mỗi category trực tiếp từ dataset. Thêmrefer_data="coco.yaml"để lấy embedding từ một dataset khác; dataset đó phải chứa chính xác cùng các category. - Prompt-free — nạp checkpoint
*-seg-pf.ptvà truyềnsingle_cls=True.
Cách sử dụng khi Export#
Có thể lưu prompt embedding một lần và tái sử dụng khi tạo các static export như ONNX, OpenVINO, TensorRT, CoreML, LiteRT và RKNN. Profile NPZ được model PyTorch gốc nạp trước khi export; đây không phải là input bổ sung lúc runtime, và model đã export không yêu cầu file NPZ.
Các class được cấu hình bằng set_classes() (hoặc qua refer_image đối với visual prompt) được tích hợp cố định vào weights đã export. Sau khi export, model không còn nhận prompt mới: gọi set_classes() hoặc truyền visual_prompts=... vào predict() trên một bản export đã nạp sẽ gây lỗi. Để thay đổi các class được detection, hãy export lại từ checkpoint .pt gốc với prompt mới đã được cấu hình. File đã export hoạt động như một model YOLO tiêu chuẩn và cũng có thể được nạp bằng YOLO() thay cho YOLOE().
from ultralytics import YOLOE
model = YOLOE("yoloe-26n-seg.pt")
model.set_classes(["person", "bus"])
model.save_prompt_embeddings("person-bus.npz")
# The profile is bound to the source checkpoint and can be reused for later exports.
model = YOLOE("yoloe-26n-seg.pt")
model.load_prompt_embeddings("person-bus.npz")
model.export(format="onnx")Profile prompt tương tự cũng có thể cấu hình cho một model detection-only được dựng từ kiến trúc YOLOE tương ứng. Cách này loại bỏ nhánh mask nhưng vẫn giữ các class đã 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)Cách sử dụng Track#
Các class đã prompt được truyền thẳng vào tracking, nên bạn có thể theo dõi những object mà tracker chưa từng được huấn luyện:
from ultralytics import YOLOE
model = YOLOE("yoloe-26s-seg.pt")
model.set_classes(["forklift", "pallet"])
# persist=True keeps track IDs stable across frames
for result in model.track("path/to/video.mp4", stream=True, persist=True):
print(result.boxes.id)YOLOE so sánh như thế nào#
YOLOE nằm giữa detector closed-set và model open-vocabulary nặng hơn. Ba so sánh sau quyết định liệu đây có phải lựa chọn phù hợp hay không:
- So với YOLO closed-set. Khi đã thiết lập prompt, YOLOE dự đoán qua pipeline detect/segment thông thường và export như mọi model khác. Điểm bổ sung là khả năng thay đổi danh sách class tại thời điểm inference thay vì retrain; đổi lại, độ chính xác zero-shot thấp hơn đáng kể so với model được huấn luyện trên các class của riêng bạn.
- So với các dòng YOLOE trước đây. YOLOE-26 kế thừa head end-to-end không cần NMS của YOLO26 và hỗ trợ năm scale (n/s/m/l/x), so với ba scale trước đây (s/m/l), đồng thời dẫn đầu ở mọi scale tương ứng trong Performance.
- So với các detector open-vocabulary dựa trên Transformer. GLIP và OWL-ViT chạy một vision-language Transformer khi inference. YOLOE encode prompt một lần, sau đó so sánh chúng với các region feature bên trong convolutional head.
Các lựa chọn thay thế gần nhất đều nhận text prompt, nhưng chỉ YOLOE và SAM 3 trả về mask, và ba model trả lời các câu hỏi khác nhau:
| YOLOE | SAM 3 | YOLO-World | |
|---|---|---|---|
| Được xây dựng cho | Detection và segmentation theo thời gian thực của các class được đặt tên | Segmentation theo concept và tracking có thể prompt | Detection open-vocabulary theo thời gian thực |
| Mask | Có, với các checkpoint *-seg.pt | Có | Không, chỉ có box |
| Visual prompt | Có (SAVPE) | Có | Không |
| Mode prompt-free | Có, vocabulary gồm 4,585 tên | Không | Không |
| Chọn model này khi | Bạn cần throughput cao và có thể nêu tên các class | Bạn cần segmentation concept mạnh nhất và chấp nhận dùng nhiều compute | Bạn đã sử dụng model này — xem ghi chú migration bên dưới |
Đang chuyển từ YOLO-World? API có cùng cấu trúc: thay YOLOWorld bằng YOLOE, nạp checkpoint *-seg.pt và giữ nguyên lệnh gọi set_classes(). Bạn có thêm mask và visual prompt; ghi chú export về class bị cố định áp dụng cho cả hai.
Các trường hợp sử dụng và ứng dụng#
Detection open-vocabulary loại bỏ bước retrain cho từng class, đặc biệt hữu ích khi danh sách mục tiêu chưa được biết trước:
- Detection trong thế giới mở — robotics và security system phải xử lý các object chưa từng được liệt kê trong thời gian huấn luyện.
- Detection one-shot từ một ví dụ — visual prompt có thể nhận diện một linh kiện, logo hoặc lỗi cụ thể từ một reference box duy nhất, hữu ích trong industrial inspection.
- Lập catalog cho long-tail — vocabulary tích hợp gồm 4,585 tên đủ rộng cho các đợt giám sát đa dạng sinh học hoặc kiểm kê hàng bán lẻ.
- Khởi tạo dataset — pre-label ảnh bằng box và mask trước khi con người review, sau đó huấn luyện model closed-set nhanh trên kết quả đó.
- Segmentation các mục tiêu tùy ý — các checkpoint
*-seg.ptđã phát hành trả về một mask cùng mỗi prediction, vì vậy medical imaging và phân tích ảnh vệ tinh nhận được output chính xác đến từng pixel mà không cần model thứ hai.
Một pattern phổ biến kết hợp hai mode: chạy prompt-free một lần để khám phá những gì hiện diện, sau đó chuyển sang text prompt cho các category quan trọng.
Hạn chế#
YOLOE đánh đổi accuracy để có khả năng thay đổi class tại thời điểm inference. Những hệ quả cần biết trước khi lựa chọn:
- Độ chính xác zero-shot thấp hơn đáng kể so với model được huấn luyện trên các class của bạn. Các checkpoint có prompt đạt khoảng 22-40 mAP trên LVIS minival; YOLO closed-set được huấn luyện trên dữ liệu riêng của bạn sẽ vượt qua mức đó trên các class tương ứng. Hãy chọn YOLOE để bao phủ các class bạn không thể huấn luyện, không phải để thay thế việc training.
- Category hiếm là điểm yếu. Cột mAPr trong Performance báo cáo accuracy riêng trên các class hiếm của LVIS, và khi dùng text prompt, chỉ số này thấp hơn các cột common và frequent ở mọi hàng. Khi mục tiêu của bạn khác thường, hãy kiểm tra chỉ số này thay vì mAP nổi bật.
- Prompt mô tả appearance, không mô tả mối quan hệ. Detection hoạt động bằng cách so sánh region feature với prompt embedding, vì vậy các prompt phụ thuộc vào trạng thái, ngữ cảnh hoặc phép so sánh — "damaged", "left-most", "the one being carried" — không có đặc điểm đáng tin cậy để đối chiếu. Nên dùng cách diễn đạt gần với tên category thông dụng.
- Tập prompt lớn làm tăng latency. Prompt embedding được tính một lần, nhưng chúng được so sánh với region feature ở mọi forward pass. Đo trên CPU với
yoloe-26s-seg.pt, thời gian forward pass tăng khoảng 19% khi chuyển từ 80 lên 1,203 class và khoảng 89% với vocabulary đầy đủ gồm 4,585 tên. FLOPs được báo cáo hoàn toàn không thay đổi vì độ tương đồng region-text không được tính, nên profile sẽ không cảnh báo bạn. - Tên class chỉ là placeholder cho đến khi bạn prompt. Một checkpoint
*-seg.ptmới được nạp sẽ trả vềnc=80với các tên dạng số ("0","1", …), vì vậy hãy gọiset_classes()trước khi đọc label. Checkpoint prompt-free đã chứa sẵn toàn bộ vocabulary.
Ghi chú triển khai#
- Hardware. Inference cần GPU NVIDIA với 4-8 GB VRAM; các scale
nvàscó thể chạy trên edge GPU như Jetson hoặc trên CPU ở resolution thấp hơn. Fine-tuning cần một GPU duy nhất. - NMS hoạt động độc lập với lớp theo mặc định. YOLOE thực hiện dự đoán với
agnostic_nms=True. Theo mặc định, thao tác này triệt tiêu các hộp chồng chéo có điểm số thấp hơn trên các lớp khác nhau thay vì chỉ trong cùng một lớp, giúp ngăn ngừa các bản sao khi một đối tượng khớp với nhiều danh mục. Vớinms=False, YOLOE-26 không áp dụng việc triệt tiêu IoU; chế độ độc lập chỉ giữ lại một lớp tốt nhất duy nhất cho mỗi anchor thay vì cho phép một anchor phát ra nhiều nhãn lớp. Truyềnagnostic_nms=Falseđể ghi đè. - Batching. Batch inference hoạt động trực tiếp, và visual prompt có thể khác nhau theo từng ảnh trong cùng một lệnh gọi.
Huấn luyện các model chính thức từ đầu#
Phần lớn người đọc không bao giờ cần đến mục này. Quy trình này tái tạo các checkpoint open-vocabulary đã công bố từ Objects365, GQA và Flickr30k — khoảng 1.4 M mẫu training trên 8× RTX 4090 — và không liên quan đến fine-tuning trên dữ liệu riêng, nội dung này được trình bày trong Train Usage ở trên.
Mọi trainer kế thừa YOLOETrainer đều từ chối compile=True, bao gồm YOLOESegTrainer mặc định và tất cả trainer from-scratch bên dưới. Hãy truyền compile=False (giá trị mặc định). Hai trainer fine-tuning được dùng ở trên, YOLOEPESegTrainer và YOLOEPETrainer, không bị giới hạn này.
Training cần annotation segment. Bạn có thể tải các file đã xử lý bên dưới hoặc tự tạo bằng script do team chính thức cung cấp, sử dụng SAM 2.1. Validation sử dụng LVIS minival.
| Dataset | Kiểu | Mẫu | Box | Annotation segment đã xử lý |
|---|---|---|---|---|
| Objects365v1 | Phát hiện | 609k | 9621k | objects365_train_segm.json |
| GQA | Grounding | 621k | 3681k | final_mixed_train_no_coco_segm.json |
| Flickr30k | Grounding | 149k | 641k | final_flickr_separateGT_train_segm.json |
Model text-prompt được huấn luyện trước, còn hai mode prompting kia là các bước tinh chỉnh từ model này:
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, # or the path to a YAML file holding the same structure
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",
)Các checkpoint visual-prompt và prompt-free bắt đầu từ model text-prompt đã huấn luyện đó và cập nhật mỗi checkpoint một module. YOLOESegVPTrainer là recipe visual-prompt và YOLOEPEFreeTrainer là recipe prompt-free, nhưng bản thân không checkpoint nào tự đóng băng thành phần: quá trình training chọn lọc đến từ danh sách freeze mà bạn truyền kèm, trong đó chỉ rõ mọi phần tử con của head ngoại trừ savpe (tương ứng, mọi classification tower), và run prompt-free còn cần thêm single_cls=True. Repository YOLOE upstream chứa đầy đủ recipe cho các model scale v8.
Một run prompt-free hoàn tất sẽ được re-parameterize thành checkpoint có thể báo cáo tên mà không cần prompt khi inference, sử dụng get_vocab và set_vocab:
from ultralytics import YOLOE
# Weights written by the prompt-free run and by the text-prompt run it started from. Each
# rerun creates a new directory (train-2, train-3, ...), so take the paths the runs printed.
model = YOLOE("runs/segment/train-2/weights/best.pt") # prompt-free run, its head is already fused
text_model = YOLOE("runs/segment/train/weights/best.pt") # text-prompt run, its head is still unfused
names = list(YOLOE("yoloe-26l-seg-pf.pt").model.names.values()) # the 4,585-name vocabulary, or your own list
vocab = text_model.get_vocab(names)
model.set_vocab(vocab, names)
model.save("yoloe-26l-seg-pf-custom.pt") # never overwrite the released checkpointTrích dẫn và ghi nhận đóng góp#
Nếu YOLOE đóng góp cho nghiên cứu hoặc dự án của bạn, vui lòng trích dẫn paper gốc của Ao Wang, Lihao Liu, Hui Chen, Zijia Lin, Jungong Han và Guiguang Ding thuộc Đại học Thanh Hoa:
@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},
}Để đọc thêm, paper YOLOE gốc có trên arXiv. Mã nguồn của dự án và các tài nguyên bổ sung có thể được truy cập qua repository GitHub của dự án.
FAQ#
Ultralytics YOLOE bổ sung hai capability mà YOLO-World không có: visual prompt, trong đó một example box thay thế tên class, và các checkpoint prompt-free trả lời từ vocabulary tích hợp gồm 4,585 tên mà không cần prompt. Mọi prediction từ các checkpoint
*-seg.ptđã phát hành cũng chứa mask instance segmentation. Về accuracy, paper YOLOE gốc cho thấy YOLOE-v8s cao hơn YOLO-Worldv2-S 3.5 AP trên LVIS, với chi phí training bằng một phần ba và tốc độ inference cao hơn 1.4 lần. Việc migration chỉ cần thay đổi một dòng — xem YOLOE so sánh như thế nào.Ultralytics YOLOE hỗ trợ ba mode prompting. Text prompt là tên class dưới dạng string trên checkpoint
*-seg.pt, và là lựa chọn thông thường. Visual prompt là một hoặc nhiều example box trên ảnh tham chiếu, dành cho các mục tiêu khó diễn đạt bằng lời. Inference prompt-free sử dụng checkpoint*-seg-pf.ptriêng, trả lời từ vocabulary tích hợp gồm 4,585 tên mà không cần cung cấp gì. Text prompt và visual prompt dùng chung checkpoint; prompt-free dùng các file khác và từ chốiset_classes(). Xem Chọn mode Prompting để biết đầy đủ so sánh.Hãy bắt đầu với
yoloe-26s-seg.pt: dòng YOLOE-26 dẫn đầu YOLOE-11 và YOLOE-v8 ở mọi scale tương ứng, và scaleslà scale nhỏ nhất đạt trên 30 mAP trên LVIS minival. Chuyển lênm,lhoặcxkhi accuracy trên các category hiếm quan trọng hơn latency — cột mAPr trong Performance là chỉ số cần so sánh. Chỉ giảm xuốngnkhi triển khai trên edge. Thay vào đó, hãy nạp file*-seg-pf.ptcùng scale khi bạn muốn dùng vocabulary tích hợp thay vì tên class riêng.Các label như
object0vàobject1cho biết prediction đến từ visual prompt, trong đó các example box được nhóm thành các class được đánh số tạm thời thay vì giữ tên bạn cung cấp. Các class ID bạn truyền trongvisual_prompts["cls"]chỉ dùng để thực hiện việc nhóm đó. Model báo cáo chúng dưới dạngobject0,object1và tiếp tục như vậy, theo thứ tự các ID bạn đã gán, vì vậy hãy ánh xạ chúng trở lại label riêng của bạn trong result. Nếu muốn output chứa tên của mình, hãy dùng text prompt.Checkpoint prompt-free (
*-seg-pf.pt) phân giải class thông qua vocabulary tích hợp riêng và từ chối prompt bên ngoài vớiAssertionError: Prompt-free model does not support setting classes. Please try with Text/Visual prompt models.. Hãy nạp checkpoint*-seg.ptkhi cần danh sách class riêng. Xem Chọn mode Prompting.Text prompt đầu tiên khiến Ultralytics YOLOE cài đặt ultralytics/CLIP từ GitHub bằng
pipvà tải text encoder TorchScript vào thư mục làm việc hiện tại — khoảng 254 MB đối với YOLOE-26; xem Installation and Requirements để biết asset chính xác cho từng dòng model. Visual prompt và checkpoint prompt-free không cần hai thành phần này. Để tránh tải xuống trên máy đích, hãy thiết lập prompt một lần và lưu chúng bằngsave_prompt_embeddings(), hoặc export model với các class đã được cấu hình sẵn.Không — YOLOE tích hợp cố định các class đã prompt vào weights tại thời điểm export, vì vậy bản export đã nạp sẽ từ chối cả
set_classes()vàvisual_prompts=. Hãy export lại từ checkpoint.ptgốc với prompt mới đã được cấu hình. File đã export hoạt động như một model YOLO tiêu chuẩn và có thể được nạp bằngYOLO()cũng nhưYOLOE().Sử dụng YOLOE khi bạn cần thông lượng theo thời gian thực và có thể chỉ định tên các class, còn sử dụng SAM 3 khi chất lượng phân đoạn trên một khái niệm quan trọng hơn tốc độ. Cả hai đều chấp nhận các ví dụ trực quan; chỉ YOLOE có chế độ không cần prompt. So sánh đầy đủ có trong YOLOE So sánh như thế nào.