YOLOE: Phát hiện và Phân đoạn Mở-Từ-Vựng Thời Gian Thực#
Ultralytics YOLOE (Real-Time Seeing Anything) là một mô hình phát hiện và instance segmentation mở-từ-vựng: thay vì danh sách lớp cố định tại thời điểm huấn luyện, mô hình nhận các danh mục bạn muốn tại thời điểm suy luận (inference), dưới dạng prompt văn bản, ví dụ trực quan hoặc từ vựng 4.585 tên tích hợp sẵ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 nhất (state-of-the-art) với tốc độ gần bằng YOLO tập đóng (closed-set).
Watch: How to use Ultralytics YOLOE-26 (New) | Open Vocabulary & Real-Time Seeing Anything 🚀
Bắt đầu nhanh#
Đặt tên các lớp bạn muốn và chạy. YOLOE-26 trả về các hộp giới hạn (box) và mặt nạ instance segmentation cho các danh mục mà nó chưa từng được huấn luyện.
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()Cuộc gọi set_classes() đầu tiên sẽ tải xuống một bộ mã hóa văn bản (text encoder); hãy xem phần Installation and Requirements trước khi triển khai lên máy không có kết nối mạng.
Chọn Chế độ Prompt#
YOLOE hỗ trợ ba chế độ prompt, và lựa chọn này quyết định checkpoint nào bạn tải cũng như nhãn lớp của bạn trông như thế nào. Hãy chọn hàng khớp với những gì bạn có thể cung cấp tại thời điểm suy luận.

| Chế độ | Checkpoint | Bạn cung cấp | Tên lớp trong kết quả | Sử dụng khi |
|---|---|---|---|---|
| Text prompt | *-seg.pt | Tên lớp dưới dạng chuỗi (string) | Chính xác các tên bạn đã truyền | Bạn có thể mô tả mục tiêu bằng lời nói — lựa chọn thông thường |
| Visual prompt | *-seg.pt | Các hộp ví dụ trên một ảnh tham chiếu | Chung chung object0, object1, … | Bạn không thể diễn tả mục tiêu bằng lời: một bộ phận cụ thể, logo hoặc lỗi |
| Không có prompt (Prompt-free) | *-seg-pf.pt | Không có gì | Tên từ từ vựng 4.585 tên được tích hợp sẵn | Bạn đang phân loại hoặc khám phá và chưa biết trước cần tìm gì |
- Visual prompt không mang theo nhãn của bạn. Các ID lớp trong
visual_promptsnhóm các ví dụ lại với nhau; mô hình báo cáo chúng làobject0,object1, v.v. Bạn phải tự ánh xạ chúng lại với tên của riêng mình. - Checkpoint không có prompt từ chối
set_classes(). Gọi nó trên một mô hình*-seg-pf.ptsẽ gây raAssertionError: Prompt-free model does not support setting classes. Please try with Text/Visual prompt models.. Thay vào đó, hãy tải một checkpoint*-seg.ptkhi bạn cần các lớp của riêng mình.
Cài đặt và Yêu cầu#
YOLOE có sẵn trong gói Ultralytics chính:
pip install -U ultralyticsText prompting cần thêm một bộ mã hóa văn bản bên trên, và nó được lấy về khi sử dụng lần đầu thay vì lúc cài đặt:
- Cuộc gọi
set_classes()đầu tiên sẽ cài đặt ultralytics/CLIP từ GitHub vớipip(cung cấp trình tokenizer) và tải xuống một bộ mã hóa văn bản TorchScript vào thư mục làm việc hiện tại. YOLOE-26 kéo vềmobileclip2_b.ts, khoảng 254 MB; YOLOE-11 và YOLOE-v8 kéo vềmobileclip_blt.ts. Hãy chạy tải xuống một lần từ thư mục bạn sẽ chạy, hoặc sao chép tệp vào đó, nếu không nó sẽ bị 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 dự đoán có prompt trước khi triển khai lên máy ngoại tuyến hoặc cách ly (air-gapped).
- Visual prompt và checkpoint không có prompt hoàn toàn không cần bộ mã hóa văn bản.
Các checkpoint YOLOE-26 yêu cầu ultralytics 8.4.0 trở lên; các dòng YOLOE-11 và YOLOE-v8 có sẵn ở các phiên bản trước đó. Một dự đoán sử dụng text-prompt sẽ kiểm tra toàn bộ luồng — tải checkpoint, cài đặt CLIP, bộ mã hóa văn bản, suy luận:
yolo predict model=yoloe-26s-seg.pt source="https://ultralytics.com/images/bus.jpg" classes="person"Để bỏ qua hoàn toàn việc tải xuống bộ mã hóa văn bản tại thời điểm suy luận, hãy nhúng sẵn các prompt vào trọng số một lần và tái sử dụng chúng — xem phần Reuse prompt embeddings.
Tổng quan về kiến trúc#
YOLOE giữ cấu trúc YOLO chuẩn — một backbone tích chập (convolutional) để trích xuất đặc trưng, một neck để hợp nhất đa tỷ lệ, và một đầu ra phi mỏ neo, phân tách (anchor-free, decoupled head) dự đoán các lớp và hộp — đồng thời bổ sung ba mô-đun, tương ứng với mỗi chế độ prompt:
- Re-parameterizable Region-Text Alignment (RepRTA) tinh chỉnh các embedding văn bản từ CLIP thông qua một mạng phụ nhỏ. Mạng đó chạy một lần cho mỗi lệnh gọi
set_classes()và được gập lại khi xuất mô hình (export), do đó không tốn chi phí cho mỗi khung hình (frame). Thành phần thực sự chạy trên mỗi lần truyền xuôi (forward pass) là việc so sánh các embedding prompt đã lưu trữ với các đặc trưng vùng; xem phần Limitations để biết chi phí khi sử 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à kích hoạt từ một hộp ví dụ, điều kiện hóa mô hình trên các đối tượng trông giống như vậy. Đây là đường dẫn one-shot cho các mục tiêu khó đặt tên, chẳng hạn như logo hoặc một bộ phận cụ thể.
- Lazy Region-Prompt Contrast (LRPC) khớp các embedding vùng với từ vựng 4.585 tên tích hợp sẵn, giúp các checkpoint không có prompt nhận diện được đối tượng mà không cần prompt bên ngoài hay bộ mã hóa văn bản.
Instance segmentation đến từ một nhánh mặt nạ trên đầu ra phát hiện, giống như trong YOLOv8-Seg, và mọi dự đoán đều mang theo một mặt nạ trên results[0].masks. Sau khi mô hình được xuất, các mô-đun thế giới mở được tái tham số hóa thành đầu ra YOLO tiêu chuẩn, do đó tệp đã xuất chạy đường dẫn phát hiện/phân đoạn thông thường.
Các Mô Hình Khả Dụng#
Mọi checkpoint bên dưới đều là mô hình instance segmentation và hỗ trợ val, predict, export và track. Tải tệp *-seg.pt cho text hoặc visual prompting và tệp *-seg-pf.pt cho suy luận không có prompt; chúng không thể thay thế cho nhau, hãy xem Choosing a Prompting Mode. Chỉ các tệp *-seg.pt mới hỗ trợ train; checkpoint không có prompt được tạo ra từ mô hình text-prompt đã được huấn luyện, xem Training the Official Models from Scratch.
| Mô hình | Text / visual prompt | 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 Suất YOLOE trên LVIS#
Kết quả zero-shot trên tập LVIS minival ở độ phân giải 640 pixel, trích từ bài báo Ultralytics YOLO26.
Text và visual prompt#
Mỗi ô độ chính xác và tham số hiển thị text prompt / visual prompt; FLOPs chỉ được cung cấp một lần. Các tham số và FLOPs áp dụng cho cấu hình phát hiện mà bài báo đánh giá. Độ chính xác là chỉ số Non-E2E của bài báo, giao thức duy nhất được báo cáo cho mọi mô hình trong phép so sánh; đầu ra end-to-end của YOLOE-26 thấp hơn tối đa 1.1 AP theo text prompt và 2.6 AP theo visual prompt.
| Mô hình | mAP50-95 | mAPr | mAPc | mAPf | params (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ó prompt trả lời dựa trên từ vựng tích hợp sẵn mà không cần cung cấp prompt. Mỗi ô độ chính xác hiển thị end-to-end / Non-E2E, hai giao thức mà bài báo dùng để đánh giá YOLOE-26; trang YOLO26 trích dẫn cột Non-E2E.
| Mô hình | mAP50-95 | mAPr | mAPc | mAPf | params (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 |
Dưới các prompt văn bản và trực quan, các mô hình YOLOE-26 vượt trội hơn các phiên bản tương đương YOLOE-11 và YOLOE-v8 ở mọi tỷ lệ tương ứng trên mAP50-95, trong khi vẫn duy trì mức thông số và FLOPs thấp hơn dòng v8. Trên cùng một tập chia (split), bài báo báo cáo YOLO-Worldv2 đạt 24.4 (S), 32.4 (M) và 35.5 (L), các bộ phát hiện dựa trên Transformer GLIP-T đạt 26.0, GDINO-T đạt 27.4 và DetCLIP-T đạt 34.4, mỗi mô hình có từ 155 đến 232 triệu tham số. Bài báo YOLOE gốc bổ sung hai kết quả cho các mô hình quy mô v8 mà nó giới thiệu. Trên LVIS, YOLOE-v8s đánh bại YOLO-Worldv2-S với cách biệt 3.5 AP với 1/3 chi phí huấn luyện và tốc độ suy luận nhanh hơn 1.4 lần. Khi chuyển sang COCO, YOLOE-v8l đạt mức tăng 0.6 box AP và 0.4 mask AP so với YOLOv8-L tập đóng với thời gian huấn luyện ít hơn gần 4 lần.
Bài báo YOLO26 đánh giá một cấu hình phát hiện. Các trọng số được phát hành là các checkpoint segmentation và mang một nhánh mặt nạ, SAVPE và phép chiếu văn bản ở trên, do đó 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, chỉ số FLOPs loại trừ độ tương đồng vùng-văn bản, do đó chi phí thực tế tăng theo kích thước của tập prompt mặc dù cột không đổi; xem phần Limitations.
Ví dụ Sử dụng#
Mọi ví dụ YOLOE dưới đây đều chạy từ Python API. Dự đoán text-prompt, xác thực (validation), xuất, theo dõi và huấn luyện thông thường cũng hoạt động từ CLI; các công thức tinh chỉnh (fine-tuning) và visual prompting truyền một lớp trainer hoặc predictor làm đối số, điều này chỉ được hỗ trợ bởi Python API.
Cách sử dụng Train#
Tinh chỉnh bất kỳ checkpoint *-seg.pt nào được phát hành trên tập dữ liệu YOLO của riêng bạn. Quá trình này chủ yếu tuân theo quy trình huấn luyện YOLO chuẩn; sự khác biệt nằm ở trainer bạn truyền vào. YOLOEPESegTrainer tích hợp tên lớp của bạn vào đầu ra và tinh chỉnh từ đó, đó là những gì bạn muốn cho nhãn của riêng mình; trainer mặc định không huấn luyện 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 được phát hành đều là mô hình segmentation. Để huấn luyện một bộ phát hiện, hãy xây dựng mô hình từ tệp YAML tương ứng, tải các trọng số segmentation có cùng tỷ lệ, và đổi sang trainer phát hiện. Mọi thứ khác vẫn 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#
Cuộc gọi text-prompt là lệnh được hiển thị trong phần Quick Start. Hai chế độ còn lại mỗi chế độ cần một đối số bổ sung:
Visual prompt hiển thị cho mô hình một ví dụ thay vì mô tả nó. visual_prompts nhận một mảng bboxes gồm các hộp ví dụ và một mảng cls gồm các ID lớp, mỗi hộp một ID. Các ID là các nhóm tạm thời, không phải nhãn — chúng phải tuần tự từ 0 và kết quả trả về dưới dạng object0, object1, … thay vì theo tên bạn chọn.
Các hộp ví dụ có thể nằm trên chính bức ảnh 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 trên một ảnh tham chiếu riêng biệt được truyền dưới dạng refer_image, trong trường hợp đó bboxes và cls mô tả các đối tượng trong tham chiếu đó, không phải trong mục tiêu:
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à một video hoặc luồng dữ liệu (stream), khung hình đầu tiên sẽ tự động trở thành refer_image, do đó các prompt bạn truyền sẽ được áp dụng cho khung hình đó và duy trì xuyên suốt phần còn lại của video. Truyền rõ ràng refer_image để chọn một khung hình khác.
Cả source và refer_image đều chấp nhận các tensor torch trực tiếp, hữu ích khi các hình ảnh đã đến từ một pipeline có sẵn. Cung cấp các hộp theo tọa độ pixel của chính 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 thêm một cấp: một mảng bboxes và một mảng 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#
Quá trình validation chạy giống như bất kỳ mô hình nào khác trên tập dữ liệu 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 bao gồm các chế độ prompt còn lại:
- Visual prompt —
model.val(data="coco128-seg.yaml", load_vp=True)trích xuất một embedding trực quan cho mỗi danh mục từ chính tập dữ liệu. Thêmrefer_data="coco.yaml"để lấy các embedding từ một tập dữ liệu khác, bắt buộc phải có chính xác các danh mục tương tự. - Không có prompt — tải checkpoint
*-seg-pf.ptvà truyềnsingle_cls=True.
Cách sử dụng xuất (Export)#
Prompt embeddings có thể được lưu một lần và tái sử dụng khi tạo các bản export tĩnh như ONNX, OpenVINO, TensorRT, CoreML, LiteRT và RKNN. Hồ sơ NPZ được load bởi model PyTorch gốc trước khi export; nó không phải là một đầu vào runtime bổ sung, và model đã export không yêu cầu file NPZ.
Các lớp được cấu hình bằng set_classes() (hoặc thông qua refer_image đối với visual prompt) sẽ được nhúng sẵn vào trọng số đã xuất. Sau khi xuất, mô hình không thể nhận thêm prompt mới: gọi set_classes() hoặc truyền visual_prompts=... tới predict() trên một bản xuất đã tải sẽ thất bại. Để thay đổi các lớp được phát hiện, hãy xuất lại từ checkpoint .pt gốc với các prompt mới được cấu hình. Tệp đã xuất hoạt động như một mô hình YOLO chuẩn và cũng có thể được tải bằng YOLO() thay vì 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")Cùng một profile prompt cũng có thể cấu hình một model chỉ dành cho detection được xây dựng từ kiến trúc YOLOE tương ứng. Thao tác này loại bỏ nhánh mask trong khi vẫn giữ lại các lớp được 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 lớp được prompt sẽ đi thẳng vào tracking, cho phép bạn theo dõi các đối tượng mà trình theo dõi 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 một bộ phát hiện tập đóng và một mô hình mở-từ-vựng hạng nặng. Ba phép so sánh quyết định xem đây có phải là lựa chọn phù hợp hay không:
- So với một YOLO tập đóng. Khi các prompt được thiết lập, YOLOE dự đoán qua đường dẫn phát hiện/phân đoạn thông thường và xuất mô hình giống như bất kỳ mô hình nào khác. Điểm cộng là khả năng thay đổi danh sách lớp tại thời điểm suy luận thay vì phải huấn luyện lại; chi phí là độ chính xác zero-shot thấp hơn đáng kể so với mô hình được huấn luyện trên các lớp của riêng bạn.
- So với các dòng YOLOE trước đó. YOLOE-26 kế thừa đầu ra end-to-end không dùng NMS của YOLO26 và bao phủ năm tỷ lệ (n/s/m/l/x) so với ba tỷ lệ trước đây (s/m/l), đồng thời dẫn đầu ở mọi tỷ lệ tương ứng về Performance.
- So với các bộ phát hiện mở-từ-vựng dựa trên Transformer. GLIP và OWL-ViT chạy một transformer thị giác-ngôn ngữ tại thời điểm suy luận. YOLOE mã hóa các prompt một lần và sau đó so sánh chúng với các đặc trưng vùng bên trong một đầu ra tích hợp.
Các giải pháp thay thế gần nhất đều nhận text prompt, nhưng chỉ có YOLOE và SAM 3 trả về mặt nạ, và ba mô hình này trả lời các câu hỏi khác nhau:
| YOLOE | SAM 3 | YOLO-World | |
|---|---|---|---|
| Được xây dựng cho | Phát hiện và phân đoạn thời gian thực các lớp có tên | Phân đoạn khái niệm và theo dõi có thể prompt | Phát hiện từ vựng mở thời gian thực |
| Masks | Có, với các checkpoint *-seg.pt | Có | Không, chỉ có bounding box |
| Prompt trực quan | Có (SAVPE) | Có | Không |
| Chế độ không cần prompt | Có, từ vựng gồm 4.585 tên | Không | Không |
| Chọn khi | Bạn cần throughput cao và có thể đặt tên cho các lớp | Bạn cần phân đoạn khái niệm mạnh nhất và có thể đầu tư compute | Bạn đã ở đây — hãy xem ghi chú di chuyển bên dưới |
Đến từ YOLO-World? API có cùng cấu trúc: thay thế YOLOWorld bằng YOLOE, tải checkpoint *-seg.pt, và giữ nguyên lời gọi set_classes() của bạn. Bạn nhận được các mask và prompt trực quan; ghi chú xuất về các lớp bị đóng băng áp dụng cho cả hai.
Các trường hợp sử dụng và ứng dụng#
Phát hiện từ vựng mở loại bỏ bước huấn luyện lại cho từng lớp, điều này quan trọng nhất khi danh sách mục tiêu chưa được biết trước:
- Phát hiện thế giới mở — robotics và hệ thống an ninh gặp các đối tượng mà không ai liệt kê trong quá trình huấn luyện.
- Phát hiện một mẫu từ một ví dụ — các prompt trực quan chọn ra một bộ phận, logo hoặc lỗi cụ thể từ một bounding box tham chiếu duy nhất, hữu ích trong kiểm tra công nghiệp.
- Lập danh mục đuôi dài — từ vựng tích hợp sẵn gồm 4.585 tên đủ rộng cho giám sát đa dạng sinh học hoặc quét hàng tồn kho bán lẻ.
- Khởi tạo tập dữ liệu — gán nhãn trước cho hình ảnh bằng bounding box và mask trước khi con người xem xét, sau đó huấn luyện một model tập đóng nhanh trên kết quả đó.
- Phân đoạn các mục tiêu tùy ý — các checkpoint
*-seg.ptđược phát hành trả về một mask với mọi dự đoán, do đó hình ảnh y tế và phân tích vệ tinh có được đầu ra chính xác đến từng pixel mà không cần model thứ hai.
Một mẫu phổ biến kết hợp hai chế độ: chạy không cần prompt một lần để khám phá những gì có mặt, sau đó chuyển sang prompt văn bản cho các danh mục quan trọng.
Hạn chế#
YOLOE đánh đổi độ chính xác lấy khả năng thay đổi các lớp tại thời điểm suy luận. Những hệ quả đáng biết trước khi bạn cam kết:
- Độ 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 lớp của bạn. Các checkpoint được prompt nằm ở mức khoảng 22-40 mAP trên LVIS minival; một model YOLO tập đóng được huấn luyện trên dữ liệu của riêng bạn sẽ vượt trội hơn ở các lớp đó. Hãy sử dụng YOLOE để bao phủ các lớp mà bạn không thể huấn luyện, chứ không phải để thay thế việc huấn luyện.
- Các danh mục hiếm là điểm yếu. Cột mAPr trong Hiệu năng báo cáo độ chính xác cụ thể trên các lớp hiếm của LVIS, và dưới dạng prompt văn bản, nó nằm dưới các cột chung và thường xuyên ở mọi hàng. Hãy kiểm tra cột này thay vì mAP chính khi mục tiêu của bạn là bất thường.
- Một prompt mô tả ngoại hình, không phải mối quan hệ. Phát hiện hoạt động bằng cách so sánh các đặc trưng vùng với embedding của prompt, do đó các prompt phụ thuộc vào trạng thái, bối cảnh hoặc so sánh — "bị hỏng", "ở cùng bên trái", "đang được mang" — không có điểm bám đáng tin cậy để khớp. Ưu tiên từ ngữ gần gũi với tên danh mục hàng ngày.
- Các tập prompt lớn làm tăng độ trễ. Các embedding prompt được tính toán một lần, nhưng chúng được so sánh với các đặc trưng vùng trên mọi lượt forward pass. Đo lường trên CPU với
yoloe-26s-seg.pt, một lượt forward pass tăng khoảng 19% khi chuyển từ 80 lên 1.203 lớp và khoảng 89% ở toàn bộ từ vựng 4.585 tên. Các FLOP được báo cáo không hề thay đổi, bởi vì độ tương đồng vùng-văn bản không được tính, vì vậy cấu hình sẽ không cảnh báo bạn. - Tên lớp là phần giữ chỗ cho đến khi bạn prompt. Một checkpoint
*-seg.ptmới được tải báo cáonc=80với các tên dạng số ("0","1", …), vì vậy hãy gọiset_classes()trước khi đọc nhãn. Các checkpoint không cần prompt cung cấp sẵn toàn bộ từ vựng đã được điền.
Ghi chú Triển khai#
- Phần cứng. Quá trình suy luận cần GPU NVIDIA với 4-8 GB VRAM; các quy mô
nvàschạy trên các GPU edge như Jetson hoặc trên CPU ở độ phân giải giảm. Việc tinh chỉnh (fine-tuning) cần một GPU duy nhất. - NMS bất khả tri theo lớp theo mặc định. YOLOE dự đoán với
agnostic_nms=True. Trên YOLOE-11 và YOLOE-v8, điều này loại bỏ các bounding box 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 chặn các bản sao khi một đối tượng khớp với nhiều danh mục. Các model YOLOE-26 end-to-end không áp dụng việc loại bỏ IoU nào cả; ở đó, chế độ bất khả tri chỉ giữ lại 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 đè. - Xử lý theo batch. Suy luận theo batch hoạt động trực tiếp, và các prompt trực quan có thể khác nhau giữa các hình ảnh trong cùng một lệnh gọi.
Huấn luyện các Model Chính thức từ Đầu#
Hầu hết người đọc không bao giờ cần điều này. Nó tái tạo các checkpoint từ vựng mở đã được công bố từ Objects365, GQA và Flickr30k — khoảng 1,4 triệu mẫu huấn luyện trên 8× RTX 4090 — và không liên quan đến việc tinh chỉnh trên dữ liệu của riêng bạn, được đề cập trong mục Cách sử dụng Huấn luyện ở trên.
Mọi bộ huấn luyện kế thừa YOLOETrainer sẽ từ chối compile=True, bao gồm YOLOESegTrainer mặc định và tất cả các bộ huấn luyện từ đầu bên dưới. Truyền compile=False (mặc định). Hai bộ huấn luyện tinh chỉnh được sử dụng ở trên, YOLOEPESegTrainer và YOLOEPETrainer, không mang giới hạn đó.
Việc huấn luyện cần các chú thích phân đoạn (segment annotation). Hoặc tải xuống các tệp đã xử lý bên dưới, hoặc tự tạo bằng script được cung cấp bởi nhóm chính thức, được hỗ trợ bởi SAM 2.1. Quá trình xác thực sử dụng LVIS minival.
| Tập dữ liệu (Dataset) | Loại | Mẫu | Boxes | Các chú thích phân đoạn đã xử lý |
|---|---|---|---|---|
| Objects365v1 | Detection | 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 prompt văn bản được huấn luyện đầu tiên, và hai chế độ prompt còn lại là các cải tiến từ nó:
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 prompt trực quan và không cần prompt bắt đầu từ model prompt văn bản đã được huấn luyện đó và cập nhật mỗi lần một module. YOLOESegVPTrainer là công thức prompt trực quan và YOLOEPEFreeTrainer là công thức không cần prompt, nhưng không lớp nào đóng băng bất cứ thứ gì một mình: việc huấn luyện chọn lọc đến từ danh sách freeze bạn truyền song song, đặt tên cho mọi phần tử con head ngoại trừ savpe (tương ứng với mọi tháp phân loại), và lượt chạy không cần prompt bổ sung thêm single_cls=True. Kho lưu trữ YOLOE gốc chứa các công thức đầy đủ cho các model quy mô v8.
Một lượt chạy không cần prompt hoàn chỉnh được tái tham số hóa thành một checkpoint báo cáo tên của nó mà không cần prompt khi suy luận, 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#
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 bài báo gốc bởi Ao Wang, Lihao Liu, Hui Chen, Zijia Lin, Jungong Han, và Guiguang Ding từ Đạ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, bài báo YOLOE gốc có sẵn 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 thông qua GitHub repository của họ.
Câu hỏi thường gặp#
Ultralytics YOLOE bổ sung hai tính năng mà YOLO-World không có: prompt trực quan, trong đó một bounding box ví dụ thay thế tên lớp, và các checkpoint không cần prompt trả lời từ từ vựng 4.585 tên tích hợp sẵn mà không cần bất kỳ prompt nào. Mọi dự đoán từ các checkpoint
*-seg.ptđược phát hành cũng mang theo một mask phân đoạn thể thực (instance segmentation). Về độ chính xác, bài báo YOLOE gốc đưa YOLOE-v8s vượt lên trước YOLO-Worldv2-S 3.5 AP trên LVIS, với 1/3 chi phí huấn luyện và tốc độ suy luận gấp 1,4 lần. Việc di chuyển chỉ là thay đổi một dòng — xem So sánh YOLOE.Ultralytics YOLOE hỗ trợ ba chế độ prompt. Prompt văn bản là tên các lớp dưới dạng chuỗi trên checkpoint
*-seg.pt, và là lựa chọn thông thường. Prompt trực quan là một hoặc nhiều bounding box ví dụ trên một hình ảnh tham chiếu, dành cho các mục tiêu khó diễn tả bằng lời. Suy luận không cần prompt sử dụng một checkpoint*-seg-pf.ptriêng biệt trả lời từ từ vựng 4.585 tên tích hợp sẵn mà không cung cấp gì thêm. Prompt văn bản và prompt trực quan chia sẻ cùng các checkpoint; các checkpoint không cần prompt là các tệp khác nhau và từ chốiset_classes(). Xem Chọn Chế độ Prompt để có sự so sánh đầy đủ.Bắt đầu với
yoloe-26s-seg.pt: dòng họ YOLOE-26 dẫn đầu YOLOE-11 và YOLOE-v8 ở mọi quy mô tương ứng, và quy môslà quy mô nhỏ nhất đạt trên 30 mAP trên LVIS minival. Chuyển lênm,lhoặcxkhi độ chính xác trên các danh mục hiếm quan trọng hơn độ trễ — cột mAPr trong Hiệu năng là cột để so sánh. Giảm xuốngnchỉ để triển khai edge. Tải tệp*-seg-pf.ptcùng quy mô thay thế khi bạn muốn từ vựng tích hợp sẵn thay vì tên lớp của riêng bạn.Các nhãn như
object0vàobject1có nghĩa là dự đoán đến từ một prompt trực quan, nhóm các bounding box ví dụ thành các lớp được đánh số tạm thời thay vì mang tên của bạn. Các ID lớp bạn truyền trongvisual_prompts["cls"]chỉ thực hiện việc nhóm đó. Model báo cáo chúng làobject0,object1, vân vân, theo thứ tự các ID bạn đã gán, vì vậy hãy ánh xạ chúng trở lại nhãn của riêng bạn trên kết quả. Nếu bạn muốn tên của mình xuất hiện trong đầu ra, hãy sử dụng prompt văn bản thay thế.Các checkpoint không cần prompt (
*-seg-pf.pt) giải quyết các lớp thông qua từ vựng tích hợp sẵn của riêng chúng và từ chối các prompt bên ngoài vớiAssertionError: Prompt-free model does not support setting classes. Please try with Text/Visual prompt models.. Tải checkpoint*-seg.ptkhi bạn cần danh sách lớp của riêng mình. Xem Chọn Chế độ Prompt.Prompt văn bản đầu tiên khiến Ultralytics YOLOE cài đặt ultralytics/CLIP từ GitHub với
pipvà tải xuống một bộ mã hóa văn bản TorchScript vào thư mục làm việc hiện tại — khoảng 254 MB đối với YOLOE-26; xem Cài đặt và Yêu cầu để biết tài sản chính xác cho từng dòng model. Prompt trực quan và checkpoint không cần prompt đều không cần thứ nào. Để tránh việc tải xuống trên máy mục tiêu, hãy thiết lập các prompt một lần và lưu chúng bằngsave_prompt_embeddings(), hoặc xuất model với các lớp đã được cấu hình sẵn.Không — YOLOE nhúng các lớp đã prompt vào trọng số tại thời điểm xuất, vì vậy bản xuất đã tải từ chối cả
set_classes()vàvisual_prompts=. Xuất lại từ checkpoint.ptgốc với các prompt mới được cấu hình. Tệp đã xuất hoạt động giống như một model YOLO tiêu chuẩn và có thể được tải bằngYOLO()cũng nhưYOLOE().Sử dụng YOLOE khi bạn cần throughput thời gian thực và có thể đặt tên cho các lớp, và 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 So sánh YOLOE.