Link to this sectionMô hình YOLO-World#
Mô hình YOLO-World giới thiệu một cách tiếp cận tiên tiến, thời gian thực dựa trên Ultralytics YOLOv8 cho các tác vụ Phát hiện Open-Vocabulary. Cải tiến này cho phép phát hiện bất kỳ đối tượng nào trong ảnh dựa trên các văn bản mô tả. Bằng cách giảm đáng kể nhu cầu tính toán trong khi vẫn duy trì hiệu suất cạnh tranh, YOLO-World trở thành một công cụ linh hoạt cho vô số ứng dụng dựa trên thị giác máy tính.
Watch: YOLO World training workflow on custom dataset

Link to this sectionTổng quan#
YOLO-World giải quyết các thách thức mà các mô hình phát hiện Open-Vocabulary truyền thống gặp phải, vốn thường dựa vào các mô hình Transformer cồng kềnh đòi hỏi nguồn lực tính toán lớn. Sự phụ thuộc của các mô hình này vào các danh mục đối tượng được xác định trước cũng hạn chế tiện ích của chúng trong các tình huống động. YOLO-World tái thiết lập framework YOLOv8 với các khả năng phát hiện open-vocabulary, sử dụng mô hình hóa ngôn ngữ thị giác và tiền huấn luyện trên các tập dữ liệu mở rộng để đạt hiệu quả vượt trội trong việc nhận dạng một loạt các đối tượng trong các tình huống zero-shot với hiệu suất vô song.
Link to this sectionTính năng chính#
-
Giải pháp thời gian thực: Tận dụng tốc độ tính toán của CNN, YOLO-World cung cấp giải pháp phát hiện open-vocabulary nhanh chóng, phục vụ các ngành công nghiệp cần kết quả tức thì.
-
Hiệu quả và Hiệu suất: YOLO-World cắt giảm các yêu cầu về tài nguyên và tính toán mà không làm giảm hiệu suất, cung cấp một giải pháp thay thế mạnh mẽ cho các mô hình như SAM nhưng với chi phí tính toán chỉ bằng một phần nhỏ, cho phép triển khai các ứng dụng thời gian thực.
-
Inference với Offline Vocabulary: YOLO-World giới thiệu chiến lược "prompt-then-detect", sử dụng một offline vocabulary để tăng hiệu quả hơn nữa. Cách tiếp cận này cho phép sử dụng các prompt tùy chỉnh được tính toán từ trước, bao gồm các chú thích hoặc danh mục, để được mã hóa và lưu trữ dưới dạng các embedding offline vocabulary, giúp tinh giản quá trình phát hiện.
-
Được cung cấp bởi YOLOv8: Được xây dựng trên nền tảng Ultralytics YOLOv8, YOLO-World tận dụng những tiến bộ mới nhất trong phát hiện đối tượng thời gian thực để hỗ trợ phát hiện open-vocabulary với độ chính xác và tốc độ vô song.
-
Hiệu suất Benchmark xuất sắc: YOLO-World vượt trội so với các detector open-vocabulary hiện có, bao gồm các dòng MDETR và GLIP, về tốc độ và hiệu quả trên các benchmark tiêu chuẩn, thể hiện năng lực vượt trội của YOLOv8 trên một GPU NVIDIA V100 duy nhất.
-
Ứng dụng đa dạng: Cách tiếp cận sáng tạo của YOLO-World mở ra những khả năng mới cho vô số tác vụ thị giác, mang lại những cải thiện về tốc độ theo cấp số nhân so với các phương pháp hiện có.
Link to this sectionCác model có sẵn, tác vụ được hỗ trợ và chế độ vận hành#
Phần này trình bày chi tiết các mô hình hiện có cùng với các trọng số pretrained cụ thể của chúng, các tác vụ mà chúng hỗ trợ, và khả năng tương thích với các chế độ vận hành khác nhau như Inference, Validation, Training, và Export, được ký hiệu bằng ✅ cho các chế độ được hỗ trợ và ❌ cho các chế độ không được hỗ trợ.
Tất cả các trọng số YOLOv8-World đã được chuyển đổi trực tiếp từ kho lưu trữ YOLO-World chính thức, làm nổi bật những đóng góp xuất sắc của họ.
| Loại model | Trọng số Pretrained | Các tác vụ được hỗ trợ | Suy luận | Validation | Huấn luyện | Xuất (Export) |
|---|---|---|---|---|---|---|
| YOLOv8s-world | yolov8s-world.pt | Phát hiện đối tượng | ✅ | ✅ | ✅ | ❌ |
| YOLOv8s-worldv2 | yolov8s-worldv2.pt | Phát hiện đối tượng | ✅ | ✅ | ✅ | ✅ |
| YOLOv8m-world | yolov8m-world.pt | Phát hiện đối tượng | ✅ | ✅ | ✅ | ❌ |
| YOLOv8m-worldv2 | yolov8m-worldv2.pt | Phát hiện đối tượng | ✅ | ✅ | ✅ | ✅ |
| YOLOv8l-world | yolov8l-world.pt | Phát hiện đối tượng | ✅ | ✅ | ✅ | ❌ |
| YOLOv8l-worldv2 | yolov8l-worldv2.pt | Phát hiện đối tượng | ✅ | ✅ | ✅ | ✅ |
| YOLOv8x-world | yolov8x-world.pt | Phát hiện đối tượng | ✅ | ✅ | ✅ | ❌ |
| YOLOv8x-worldv2 | yolov8x-worldv2.pt | Phát hiện đối tượng | ✅ | ✅ | ✅ | ✅ |
Link to this sectionZero-shot Transfer trên tập dữ liệu COCO#
| Loại model | mAP | mAP50 | mAP75 |
|---|---|---|---|
| yolov8s-world | 37.4 | 52.0 | 40.6 |
| yolov8s-worldv2 | 37.7 | 52.2 | 41.0 |
| yolov8m-world | 42.0 | 57.0 | 45.6 |
| yolov8m-worldv2 | 43.0 | 58.4 | 46.8 |
| yolov8l-world | 45.7 | 61.3 | 49.8 |
| yolov8l-worldv2 | 45.8 | 61.3 | 49.8 |
| yolov8x-world | 47.0 | 63.0 | 51.2 |
| yolov8x-worldv2 | 47.1 | 62.8 | 51.4 |
Link to this sectionVí dụ Sử dụng#
Các mô hình YOLO-World rất dễ tích hợp vào các ứng dụng Python của bạn. Ultralytics cung cấp Python API và CLI commands thân thiện với người dùng để tinh giản quá trình phát triển.
Watch: YOLO-World Model Usage examples with Ultralytics | Open Vocab, Prompt-Free & others 🚀
Link to this sectionCách sử dụng Train#
Chúng tôi đặc biệt khuyến nghị sử dụng mô hình yolov8-worldv2 để huấn luyện tùy chỉnh, vì nó hỗ trợ huấn luyện tất định và cũng dễ dàng xuất sang các định dạng khác như onnx/tensorrt.
Object detection rất đơn giản với phương thức train, như được minh họa dưới đây:
PyTorch pretrained *.pt models as well as configuration *.yaml files can be passed to the YOLOWorld() class to create a model instance in python:
from ultralytics import YOLOWorld
# Load a pretrained YOLOv8s-worldv2 model
model = YOLOWorld("yolov8s-worldv2.pt")
# Train the model on the COCO8 example dataset for 100 epochs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
# Run inference with the YOLO-World model on the 'bus.jpg' image
results = model("path/to/bus.jpg")Link to this sectionCách sử dụng Predict#
Object detection rất đơn giản với phương thức predict, như được minh họa dưới đây:
from ultralytics import YOLOWorld
# Initialize a YOLO-World model
model = YOLOWorld("yolov8s-world.pt") # or select yolov8m/l-world.pt for different sizes
# Execute inference with the YOLOv8s-world model on the specified image
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()Đoạn mã này minh họa sự đơn giản của việc tải một mô hình đã được huấn luyện sẵn và thực hiện dự đoán trên một hình ảnh.
Link to this sectionCách sử dụng Val#
Việc validation mô hình trên một tập dữ liệu được tinh giản như sau:
from ultralytics import YOLO
# Create a YOLO-World model
model = YOLO("yolov8s-world.pt") # or select yolov8m/l-world.pt for different sizes
# Conduct model validation on the COCO8 example dataset
metrics = model.val(data="coco8.yaml")Link to this sectionCách sử dụng Track#
Object tracking với mô hình YOLO-World trên video/hình ảnh được tinh giản như sau:
from ultralytics import YOLO
# Create a YOLO-World model
model = YOLO("yolov8s-world.pt") # or select yolov8m/l-world.pt for different sizes
# Track with a YOLO-World model on a video
results = model.track(source="path/to/video.mp4")Các mô hình YOLO-World do Ultralytics cung cấp đi kèm với các danh mục COCO dataset được cấu hình sẵn như một phần của offline vocabulary, giúp tăng hiệu quả cho các ứng dụng tức thì. Tích hợp này cho phép các mô hình YOLOv8-World nhận diện và dự đoán trực tiếp 80 danh mục tiêu chuẩn được định nghĩa trong tập dữ liệu COCO mà không cần thêm bất kỳ thiết lập hay tùy chỉnh nào.
Link to this sectionThiết lập prompts#

Framework YOLO-World cho phép chỉ định động các lớp thông qua các prompt tùy chỉnh, trao quyền cho người dùng tùy chỉnh mô hình theo nhu cầu cụ thể mà không cần huấn luyện lại. Tính năng này đặc biệt hữu ích để thích nghi mô hình với các miền mới hoặc các tác vụ cụ thể không nằm trong dữ liệu huấn luyện ban đầu. Bằng cách thiết lập các prompt tùy chỉnh, người dùng có thể hướng sự tập trung của mô hình vào các đối tượng quan tâm, từ đó tăng cường độ liên quan và độ chính xác của kết quả phát hiện.
Ví dụ, nếu ứng dụng của bạn chỉ cần phát hiện các đối tượng 'person' và 'bus', bạn có thể chỉ định các lớp này trực tiếp:
from ultralytics import YOLO
# Initialize a YOLO-World model
model = YOLO("yolov8s-world.pt") # or choose yolov8m/l-world.pt
# Define custom classes
model.set_classes(["person", "bus"])
# Execute prediction for specified categories on an image
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()Một số người dùng nhận thấy rằng việc thêm một chuỗi rỗng "" làm lớp background có thể cải thiện hiệu suất phát hiện trong một số tình huống. Hành vi này có vẻ phụ thuộc vào từng tình huống và cơ chế chính xác vẫn chưa được hiểu đầy đủ:
model.set_classes(["person", "bus", ""])Bạn cũng có thể lưu một mô hình sau khi thiết lập các lớp tùy chỉnh. Bằng cách thực hiện điều này, bạn tạo ra một phiên bản của mô hình YOLO-World được chuyên biệt hóa cho trường hợp sử dụng cụ thể của mình. Quá trình này nhúng các định nghĩa lớp tùy chỉnh của bạn trực tiếp vào tệp mô hình, giúp mô hình sẵn sàng sử dụng với các lớp đã chỉ định mà không cần thêm điều chỉnh nào. Thực hiện theo các bước sau để lưu và tải mô hình YOLO-World tùy chỉnh của bạn:
Trước tiên, tải một mô hình YOLO-World, thiết lập các lớp tùy chỉnh cho nó và lưu lại:
from ultralytics import YOLO
# Initialize a YOLO-World model
model = YOLO("yolov8s-world.pt") # or select yolov8m/l-world.pt
# Define custom classes
model.set_classes(["person", "bus"])
# Save the model with the defined offline vocabulary
model.save("custom_yolov8s.pt")Sau khi lưu, mô hình custom_yolov8s.pt hoạt động giống như bất kỳ mô hình YOLOv8 pretrained nào khác nhưng có một điểm khác biệt chính: giờ đây nó được tối ưu hóa để chỉ phát hiện các lớp bạn đã định nghĩa. Sự tùy chỉnh này có thể cải thiện đáng kể hiệu suất và tính hiệu quả trong việc phát hiện cho các kịch bản ứng dụng cụ thể của bạn.
from ultralytics import YOLO
# Load your custom model
model = YOLO("custom_yolov8s.pt")
# Run inference to detect your custom classes
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()Link to this sectionLợi ích của việc lưu với Vocabulary tùy chỉnh#
- Hiệu quả: Tinh giản quá trình phát hiện bằng cách tập trung vào các đối tượng liên quan, giảm thiểu chi phí tính toán và tăng tốc độ inference.
- Linh hoạt: Cho phép dễ dàng thích nghi mô hình với các tác vụ phát hiện mới hoặc chuyên biệt mà không cần huấn luyện lại sâu rộng hoặc thu thập dữ liệu.
- Đơn giản: Đơn giản hóa việc triển khai bằng cách loại bỏ nhu cầu chỉ định lại các lớp tùy chỉnh nhiều lần khi runtime, giúp mô hình có thể sử dụng trực tiếp với vocabulary được nhúng sẵn.
- Hiệu suất: Nâng cao độ chính xác phát hiện cho các lớp đã chỉ định bằng cách tập trung sự chú ý và tài nguyên của mô hình vào việc nhận diện các đối tượng đã xác định.
Cách tiếp cận này cung cấp một phương tiện mạnh mẽ để tùy chỉnh các mô hình object detection tiên tiến cho các tác vụ cụ thể, giúp AI nâng cao trở nên dễ tiếp cận và áp dụng hơn vào nhiều ứng dụng thực tế rộng rãi.
Link to this sectionTái tạo các kết quả chính thức từ đầu (Thử nghiệm)#
Link to this sectionChuẩn bị tập dữ liệu#
- Dữ liệu huấn luyện
| Tập dữ liệu (Dataset) | Loại | Mẫu | Boxes | Tệp chú thích |
|---|---|---|---|---|
| Objects365v1 | Detection | 609k | 9621k | objects365_train.json |
| GQA | Grounding | 621k | 3681k | final_mixed_train_no_coco.json |
| Flickr30k | Grounding | 149k | 641k | final_flickr_separateGT_train.json |
- Dữ liệu Val
| Tập dữ liệu (Dataset) | Loại | Tệp chú thích |
|---|---|---|
| LVIS minival | Detection | minival.txt |
Link to this sectionBắt đầu huấn luyện từ đầu#
WorldTrainerFromScratch được tùy chỉnh chuyên sâu để cho phép huấn luyện các mô hình yolo-world trên cả tập dữ liệu phát hiện (detection) và tập dữ liệu định vị (grounding) cùng lúc. Để biết thêm chi tiết, vui lòng xem ultralytics.model.yolo.world.train_world.py.
from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch
# Option 1: Use Python dictionary
data = dict(
train=dict(
yolo_data=["Objects365.yaml"],
grounding_data=[
dict(
img_path="flickr30k/images",
json_file="flickr30k/final_flickr_separateGT_train.json",
),
dict(
img_path="GQA/images",
json_file="GQA/final_mixed_train_no_coco.json",
),
],
),
val=dict(yolo_data=["lvis.yaml"]),
)
# Option 2: Use YAML file (yolo_world_data.yaml)
# train:
# yolo_data:
# - Objects365.yaml
# grounding_data:
# - img_path: flickr/full_images/
# json_file: flickr/annotations/final_flickr_separateGT_train_segm.json
# - img_path: mixed_grounding/gqa/images
# json_file: mixed_grounding/annotations/final_mixed_train_no_coco_segm.json
# val:
# yolo_data:
# - lvis.yaml
model = YOLOWorld("yolov8s-worldv2.yaml")
model.train(
data=data, # or data="yolo_world_data.yaml" if using YAML file
batch=128,
epochs=100,
trainer=WorldTrainerFromScratch,
)Link to this sectionTrích dẫn và Ghi nhận#
Chúng tôi gửi lời cảm ơn đến Tencent AILab Computer Vision Center vì công trình tiên phong của họ trong lĩnh vực phát hiện đối tượng với từ vựng mở (open-vocabulary) thời gian thực bằng YOLO-World:
@article{cheng2024yolow,
title={YOLO-World: Real-Time Open-Vocabulary Object Detection},
author={Cheng, Tianheng and Song, Lin and Ge, Yixiao and Liu, Wenyu and Wang, Xinggang and Shan, Ying},
journal={arXiv preprint arXiv:2401.17270},
year={2024}
}Để đọc thêm, bài báo gốc về YOLO-World có sẵn trên arXiv. Mã nguồn và các tài nguyên bổ sung của dự án có thể được truy cập thông qua kho lưu trữ GitHub của họ. Chúng tôi đánh giá cao cam kết của họ trong việc thúc đẩy lĩnh vực này và chia sẻ những hiểu biết quý báu cho cộng đồng.
Link to this sectionCâu hỏi thường gặp#
Link to this sectionMô hình YOLO-World là gì và nó hoạt động như thế nào?#
Mô hình YOLO-World là một phương pháp phát hiện đối tượng thời gian thực tiên tiến dựa trên framework Ultralytics YOLOv8. Nó vượt trội trong các tác vụ Phát hiện với Từ vựng mở (Open-Vocabulary Detection) bằng cách nhận diện đối tượng trong hình ảnh dựa trên các văn bản mô tả. Sử dụng mô hình hóa thị giác-ngôn ngữ và tiền huấn luyện trên các tập dữ liệu lớn, YOLO-World đạt được hiệu suất và độ hiệu quả cao với nhu cầu tính toán giảm đáng kể, khiến nó trở nên lý tưởng cho các ứng dụng thời gian thực trong nhiều ngành công nghiệp.
Link to this sectionYOLO-World xử lý suy luận (inference) với các prompt tùy chỉnh như thế nào?#
YOLO-World hỗ trợ chiến lược "prompt-then-detect" (nhắc trước rồi phát hiện), tận dụng từ vựng ngoại tuyến (offline vocabulary) để tăng cường hiệu quả. Các prompt tùy chỉnh như chú thích hoặc danh mục đối tượng cụ thể được mã hóa trước và lưu trữ dưới dạng embeddings từ vựng ngoại tuyến. Phương pháp này giúp tinh giản quy trình phát hiện mà không cần huấn luyện lại. Bạn có thể thiết lập các prompt này một cách linh hoạt trong mô hình để điều chỉnh cho các tác vụ phát hiện cụ thể, như được hiển thị bên dưới:
from ultralytics import YOLOWorld
# Initialize a YOLO-World model
model = YOLOWorld("yolov8s-world.pt")
# Define custom classes
model.set_classes(["person", "bus"])
# Execute prediction on an image
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()Link to this sectionTại sao tôi nên chọn YOLO-World thay vì các mô hình phát hiện với Từ vựng mở truyền thống?#
YOLO-World mang lại một số lợi thế so với các mô hình phát hiện với Từ vựng mở truyền thống:
- Hiệu suất thời gian thực: Nó tận dụng tốc độ tính toán của các mạng CNN để cung cấp khả năng phát hiện nhanh chóng và hiệu quả.
- Hiệu quả và Yêu cầu tài nguyên thấp: YOLO-World duy trì hiệu suất cao trong khi giảm đáng kể nhu cầu về tài nguyên và tính toán.
- Prompt có thể tùy chỉnh: Mô hình hỗ trợ thiết lập prompt linh hoạt, cho phép người dùng chỉ định các lớp phát hiện tùy chỉnh mà không cần huấn luyện lại.
- Hiệu suất Benchmark xuất sắc: Nó vượt trội hơn các bộ phát hiện với từ vựng mở khác như MDETR và GLIP về cả tốc độ lẫn hiệu quả trên các benchmark tiêu chuẩn.
Link to this sectionLàm cách nào để huấn luyện mô hình YOLO-World trên tập dữ liệu của tôi?#
Việc huấn luyện mô hình YOLO-World trên tập dữ liệu của bạn rất đơn giản thông qua Python API hoặc các lệnh CLI được cung cấp. Đây là cách để bắt đầu huấn luyện bằng Python:
from ultralytics import YOLOWorld
# Load a pretrained YOLOv8s-worldv2 model
model = YOLOWorld("yolov8s-worldv2.pt")
# Train the model on the COCO8 dataset for 100 epochs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)Hoặc sử dụng CLI:
yolo train model=yolov8s-worldv2.yaml data=coco8.yaml epochs=100 imgsz=640Link to this sectionCác mô hình YOLO-World được tiền huấn luyện hiện có và các tác vụ hỗ trợ là gì?#
Ultralytics cung cấp nhiều mô hình YOLO-World tiền huấn luyện hỗ trợ các tác vụ và chế độ vận hành đa dạng:
| Loại model | Trọng số Pretrained | Các tác vụ được hỗ trợ | Suy luận | Validation | Huấn luyện | Xuất (Export) |
|---|---|---|---|---|---|---|
| YOLOv8s-world | yolov8s-world.pt | Phát hiện đối tượng | ✅ | ✅ | ✅ | ❌ |
| YOLOv8s-worldv2 | yolov8s-worldv2.pt | Phát hiện đối tượng | ✅ | ✅ | ✅ | ✅ |
| YOLOv8m-world | yolov8m-world.pt | Phát hiện đối tượng | ✅ | ✅ | ✅ | ❌ |
| YOLOv8m-worldv2 | yolov8m-worldv2.pt | Phát hiện đối tượng | ✅ | ✅ | ✅ | ✅ |
| YOLOv8l-world | yolov8l-world.pt | Phát hiện đối tượng | ✅ | ✅ | ✅ | ❌ |
| YOLOv8l-worldv2 | yolov8l-worldv2.pt | Phát hiện đối tượng | ✅ | ✅ | ✅ | ✅ |
| YOLOv8x-world | yolov8x-world.pt | Phát hiện đối tượng | ✅ | ✅ | ✅ | ❌ |
| YOLOv8x-worldv2 | yolov8x-worldv2.pt | Phát hiện đối tượng | ✅ | ✅ | ✅ | ✅ |
Link to this sectionLàm cách nào để tái tạo kết quả chính thức của YOLO-World từ đầu?#
Để tái tạo các kết quả chính thức từ đầu, bạn cần chuẩn bị tập dữ liệu và khởi chạy quá trình huấn luyện bằng cách sử dụng mã nguồn được cung cấp. Quy trình huấn luyện bao gồm việc tạo một từ điển dữ liệu và chạy phương thức train với một trình huấn luyện tùy chỉnh:
from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch
data = {
"train": {
"yolo_data": ["Objects365.yaml"],
"grounding_data": [
{
"img_path": "flickr30k/images",
"json_file": "flickr30k/final_flickr_separateGT_train.json",
},
{
"img_path": "GQA/images",
"json_file": "GQA/final_mixed_train_no_coco.json",
},
],
},
"val": {"yolo_data": ["lvis.yaml"]},
}
model = YOLOWorld("yolov8s-worldv2.yaml")
model.train(data=data, batch=128, epochs=100, trainer=WorldTrainerFromScratch)