Mô 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 Từ vựng Mở (Open-Vocabulary Detection). Sự đổi mới này cho phép phát hiện bất kỳ đối tượng nào trong hình ảnh dựa trên 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 năng cạnh tranh, YOLO-World nổi lên như một công cụ đa năng 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

Tổng quan#
YOLO-World giải quyết các thách thức mà các mô hình phát hiện Từ vựng Mở truyền thống gặp phải, vốn thường phụ thuộc vào các mô hình Transformer cồng kềnh đòi hỏi tài nguyên 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ế tính hữu ích của chúng trong các kịch bản động. YOLO-World hồi sinh framework YOLOv8 với các khả năng phát hiện từ vựng mở, ứng 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 lớn để vượt trội trong việc nhận dạng một loạt các đối tượng trong các kịch bản zero-shot với hiệu suất chưa từng có.
Đối với các tác vụ open-vocabulary cũng cần mask instance, prompt hình ảnh hoặc chế độ không cần prompt, hãy xem YOLOE, giữ nguyên API set_classes().
Tí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 hỗ trợ bởi YOLOv8: Được xây dựng trên nền tảng Ultralytics YOLOv8, YOLO-World tận dụng các 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 từ vựng mở 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ó.
Cá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 có sẵn cùng với trọng số đã huấn luyện trước cụ thể của chúng, các tác vụ mà chúng hỗ trợ và khả năng tương thích của chúng 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ả trọng số của YOLOv8-World đã được di chuyển trực tiếp từ kho lưu trữ chính thức YOLO-World, làm nổi bật những đóng góp xuất sắc của chúng.
| Loại model | Trọng số Pretrained | Các tác vụ được hỗ trợ | Huấn luyện | Validation | Suy luậ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 | ✅ | ✅ | ✅ | ✅ |
Zero-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 |
Ví 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 để đơn giản hóa quá trình phát triển.
Watch: YOLO-World Model Usage examples with Ultralytics | Open Vocab, Prompt-Free & others 🚀
Cách sử dụng Train#
Chúng tôi đặc biệt khuyên dùng yolov8-worldv2 cho việc huấn luyện tùy chỉnh vì nó hỗ trợ huấn luyện tất định và xuất sang các định dạng như ONNX và TensorRT dễ dàng hơn.
Object detection rất đơn giản với phương thức train, như được minh họa bên dưới:
Các model *.pt được huấn luyện trước bằng PyTorch cũng như các file cấu hình *.yaml có thể được truyền vào class YOLOWorld() để tạo một instance model trong 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")Cách sử dụng Predict#
Object detection rất đơn giản với phương thức predict, như được minh họa bên dưới:
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.
Cá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")Cách sử dụng Track#
Object tracking với mô hình YOLO-World trên video/hình ảnh được tối giản hóa 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 từ vựng ngoại tuyến của chúng, nâng cao hiệu quả cho ứng dụng tức thời. Sự tích hợp này cho phép các mô hình YOLOv8-World nhận dạng và dự đoán trực tiếp 80 danh mục tiêu chuẩn được định nghĩa trong COCO dataset mà không cần thiết lập hoặc tùy chỉnh bổ sung.
Thiết lập prompts#

Framework YOLO-World cho phép chỉ định các lớp động thông qua các prompt tùy chỉnh, trao quyền cho người dùng điều chỉnh mô hình theo nhu cầu cụ thể của họ 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 ứng mô hình với các miền mới hoặc các tác vụ cụ thể vốn không phải là một phần của training data 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 trọng tâm của mô hình vào các đối tượng quan tâm, nâng cao tính liên quan và accuracy 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 nối thêm một chuỗi trống "" làm lớp nền có thể cải thiện hiệu suất phát hiện trong một số kịch bản nhất định. Hành vi này có vẻ phụ thuộc vào kịch bản và cơ chế chính chưa được hiểu hoàn toàn:
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()Lợ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 dễ tiếp cận hơn và áp dụng được cho nhiều ứng dụng thực tế rộng rãi hơn.
Tái tạo các kết quả chính thức từ đầu (Thử nghiệm)#
Chuẩ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 |
Bắt đầu huấn luyện từ đầu#
WorldTrainerFromScratch được tùy biến cao để 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 và tập dữ liệu grounding đồng thời. Để biết thêm chi tiết, hãy xem ultralytics.models.yolo.world.train_world.py.
from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch
# Option 1: Use Python dictionary
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"]},
}
# 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,
)Trích dẫn và Ghi nhận#
Chúng tôi gửi lời cảm ơn chân thành đế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 từ vựng mở thời gian thực với 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 YOLO-World 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ọ. 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 thông tin chi tiết có giá trị của họ với cộng đồng.
Câu hỏi thường gặp#
Mô hình YOLO-World là một cách tiếp cận phát hiện đối tượng thời gian thực tiên tiến dựa trên framework Ultralytics YOLOv8. Nó xuất sắc trong các tác vụ Phát hiện Từ vựng Mở bằng cách nhận dạng các đối tượng trong hình ảnh dựa trên văn bản mô tả. 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 lớn, YOLO-World đạt được hiệu suất và hiệu năng 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 trên nhiều ngành công nghiệp khác nhau.
YOLO-World hỗ trợ chiến lược "prompt-then-detect" (nhắc-rồi-phát-hiện), tận dụng từ vựng ngoại tuyến để nâng cao hiệu quả. Các prompt tùy chỉnh như chú thích (captions) 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. Cách tiếp cận này hợp lý hóa quá trình phát hiện mà không cần huấn luyện lại. Bạn có thể chủ động thiết lập các prompt này trong mô hình để điều chỉnh nó 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()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.
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=640Ultralytics 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ợ Huấn luyện Validation Suy luậ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 ✅ ✅ ✅ ✅ Để tái tạo các kết quả chính thức từ đầu, bạn cần chuẩn bị các tập dữ liệu và khởi chạy quá trình huấn luyện bằng mã nguồn được cung cấp. Quy trình huấn luyện bao gồm việc tạo từ điển dữ liệu và chạy phương thức
trainvớ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)