Ultralytics YOLO27:
Get Started

Model YOLO-World#

Model YOLO-World giới thiệu phương pháp tiên tiến, thời gian thực dựa trên Ultralytics YOLOv8 cho tác vụ phát hiện với bộ từ vựng mở (Open-Vocabulary Detection). Đổi mới này cho phép phát hiện mọi đối tượng trong ả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 mà vẫn duy trì hiệu năng cạnh tranh, YOLO-World trở thành công cụ linh hoạt cho nhiều ứng dụng dựa trên thị giác.



Xem: Quy trình huấn luyện YOLO World trên dataset tùy chỉnh

Tổng quan kiến trúc model YOLO-World

Tổng quan#

YOLO-World giải quyết những thách thức của các model phát hiện với bộ từ vựng mở truyền thống, vốn thường phụ thuộc vào các model Transformer cồng kềnh, đòi hỏi nhiều tài nguyên tính toán. Việc phụ thuộc 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 dụng của các model này trong những tình huống biến động. YOLO-World nâng cấp framework YOLOv8 với khả năng phát hiện bằng bộ từ vựng mở, 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 bộ dữ liệu lớn để nhận diện hiệu quả nhiều loại đối tượng trong tình huống zero-shot.

Đối với các tác vụ bộ từ vựng mở cũng cần mask instance, prompt thị giác hoặc chế độ không cần prompt, hãy xem YOLOE, sử dụng cùng API set_classes().

Tính năng chính#

  1. Giải pháp thời gian thực: Tận dụng tốc độ tính toán của CNN, YOLO-World mang đến giải pháp phát hiện với bộ từ vựng mở nhanh chóng, đáp ứng nhu cầu của các ngành cần kết quả tức thì.

  2. Hiệu quả và hiệu năng: YOLO-World cắt giảm nhu cầu tính toán và tài nguyên mà không làm giảm hiệu năng, mang đến lựa chọn thay thế mạnh mẽ cho các model như SAM với chi phí tính toán chỉ bằng một phần nhỏ, nhờ đó hỗ trợ ứng dụng thời gian thực.

  3. Suy luận với bộ từ vựng ngoại tuyến: YOLO-World giới thiệu chiến lược "prompt rồi phát hiện", sử dụng bộ từ vựng ngoại tuyến để tăng hiệu quả hơn nữa. Phương pháp 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 chú thích hoặc danh mục, mã hóa và lưu trữ dưới dạng embedding của bộ từ vựng ngoại tuyến, giúp tinh giản quy trình phát hiện.

  4. Sử dụng YOLOv8: Được xây dựng trên Ultralytics YOLOv8, YOLO-World tận dụng những cải tiến mới nhất trong phát hiện đối tượng thời gian thực để hỗ trợ phát hiện với bộ từ vựng mở, đạt độ chính xác và tốc độ vượt trội.

  5. Hiệu quả benchmark vượt trội: YOLO-World vượt qua các bộ phát hiện với bộ từ vựng mở hiện có, bao gồm dòng MDETR và GLIP, về tốc độ và hiệu quả trên các benchmark tiêu chuẩn, cho thấy năng lực vượt trội của YOLOv8 trên một GPU NVIDIA V100.

  6. Ứng dụng linh hoạt: Phương pháp đổi mới của YOLO-World mở ra khả năng mới cho nhiều tác vụ thị giác, tăng tốc độ theo cấp số nhân so với các phương pháp hiện có.

Các model hiện có, tác vụ được hỗ trợ và chế độ hoạt động#

Phần này trình bày các model hiện có cùng trọng số được huấn luyện trước tương ứng, các tác vụ được hỗ trợ và khả năng tương thích với nhiều chế độ vận hành như Suy luận, Validation, Huấn luyện và Export, trong đó ✅ biểu thị chế độ được hỗ trợ và ❌ biểu thị chế độ không được hỗ trợ.

Lưu ý

Toàn bộ trọng số YOLOv8-World đã được chuyển trực tiếp từ kho lưu trữ YOLO-World chính thức, thể hiện những đóng góp xuất sắc của dự án.

Loại modelWeights pretrainedCác tác vụ được hỗ trợHuấn luyệnValidationSuy luậnExport
YOLOv8s-worldyolov8s-world.ptPhát hiện đối tượng✅✅✅❌
YOLOv8s-worldv2yolov8s-worldv2.ptPhát hiện đối tượng✅✅✅✅
YOLOv8m-worldyolov8m-world.ptPhát hiện đối tượng✅✅✅❌
YOLOv8m-worldv2yolov8m-worldv2.ptPhát hiện đối tượng✅✅✅✅
YOLOv8l-worldyolov8l-world.ptPhát hiện đối tượng✅✅✅❌
YOLOv8l-worldv2yolov8l-worldv2.ptPhát hiện đối tượng✅✅✅✅
YOLOv8x-worldyolov8x-world.ptPhát hiện đối tượng✅✅✅❌
YOLOv8x-worldv2yolov8x-worldv2.ptPhát hiện đối tượng✅✅✅✅

Chuyển giao zero-shot trên tập dữ liệu COCO#

Hiệu năng
Loại modelmAPmAP50mAP75
yolov8s-world37.452.040.6
yolov8s-worldv237.752.241.0
yolov8m-world42.057.045.6
yolov8m-worldv243.058.446.8
yolov8l-world45.761.349.8
yolov8l-worldv245.861.349.8
yolov8x-world47.063.051.2
yolov8x-worldv247.162.851.4

Ví dụ sử dụng#

Các model YOLO-World dễ dàng tích hợp vào ứng dụng Python của bạn. Ultralytics cung cấp Python API và lệnh CLI thân thiện với người dùng để đơn giản hóa quy trình phát triển.



Xem: Ví dụ sử dụng model YOLO-World với Ultralytics | Từ vựng mở, không cần prompt và nhiều tính năng khác 🚀

Cách sử dụng để huấn luyện#

Mẹo

Chúng tôi đặc biệt khuyến nghị sử dụng yolov8-worldv2 để huấn luyện tùy chỉnh vì công cụ này hỗ trợ huấn luyện xác định và giúp xuất sang các định dạng như ONNX và TensorRT dễ dàng hơn.

Phát hiện đối tượng dễ dàng với phương thức train, như minh họa bên dưới:

Ví dụ

Có thể truyền các model *.pt pretrained PyTorch cũng như các file cấu hình *.yaml vào class YOLOWorld() để tạo một instance model trong Python:

from ultralytics import YOLOWorld

# Tải model YOLOv8s-worldv2 đã được huấn luyện trước
model = YOLOWorld("yolov8s-worldv2.pt")

# Huấn luyện model trên dataset mẫu COCO8 trong 100 epoch
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)

# Chạy suy luận với model YOLO-World trên ảnh 'bus.jpg'
results = model("path/to/bus.jpg")

Cách sử dụng Predict#

Phát hiện đối tượng dễ dàng với phương thức predict, như minh họa bên dưới:

Ví dụ
from ultralytics import YOLOWorld

# Khởi tạo model YOLO-World
model = YOLOWorld("yolov8s-world.pt")  # hoặc chọn yolov8m/l-world.pt để sử dụng các kích thước khác nhau

# Thực hiện suy luận bằng model YOLOv8s-world trên ảnh được chỉ định
results = model.predict("path/to/image.jpg")

# Hiển thị kết quả
results[0].show()

Đoạn mã này minh họa cách tải pretrained model và chạy dự đoán trên ảnh một cách đơn giản.

Cách sử dụng Val#

Quy trình xác thực model trên tập dữ liệu được đơn giản hóa như sau:

Ví dụ
from ultralytics import YOLO

# Tạo model YOLO-World
model = YOLO("yolov8s-world.pt")  # hoặc chọn yolov8m/l-world.pt để sử dụng các kích thước khác nhau

# Thực hiện xác thực model trên tập dữ liệu mẫu COCO8
metrics = model.val(data="coco8.yaml")

Theo dõi sử dụng#

Theo dõi đối tượng bằng model YOLO-World trên video/ảnh được thực hiện đơn giản như sau:

Ví dụ
from ultralytics import YOLO

# Tạo model YOLO-World
model = YOLO("yolov8s-world.pt")  # hoặc chọn yolov8m/l-world.pt để sử dụng các kích thước khác nhau

# Theo dõi bằng model YOLO-World trên video
results = model.track(source="path/to/video.mp4")
Lưu ý

Các model YOLO-World do Ultralytics cung cấp được cấu hình sẵn với các danh mục của tập dữ liệu COCO trong từ vựng ngoại tuyến, giúp tăng hiệu quả khi sử dụng ngay. Tích hợp này cho phép các model YOLOv8-World nhận diện và dự đoán trực tiếp 80 danh mục tiêu chuẩn được xác định trong tập dữ liệu COCO mà không cần thiết lập hoặc tùy chỉnh thêm.

Thiết lập prompt#

Tổng quan về tên lớp prompt của YOLO-World

Framework YOLO-World cho phép chỉ định lớp linh hoạt thông qua prompt tùy chỉnh, giúp người dùng điều chỉnh model 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 khi điều chỉnh model cho các lĩnh vực mới hoặc những tác vụ cụ thể vốn không có trong dữ liệu huấn luyện ban đầu. Bằng cách thiết lập prompt tùy chỉnh, người dùng có thể định hướng model tập trung vào các đối tượng quan tâm, nâng cao mức độ phù hợp 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 trực tiếp các lớp này:

Ví dụ
from ultralytics import YOLO

# Khởi tạo model YOLO-World
model = YOLO("yolov8s-world.pt")  # hoặc chọn yolov8m/l-world.pt

# Xác định các lớp tùy chỉnh
model.set_classes(["person", "bus"])

# Thực hiện dự đoán cho các danh mục được chỉ định trong ảnh
results = model.predict("path/to/image.jpg")

# Hiển thị kết quả
results[0].show()
Lớp nền

Một số người dùng nhận thấy việc thêm chuỗi rỗ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ố 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", ""])

Chuỗi rỗng vẫn được giữ trong model.names như một lớp riêng, kể cả trong mọi model bạn lưu, vì vậy các kết quả phát hiện của lớp này sẽ có nhãn rỗng. Truyền classes=[0, 1] khi dự đoán để chỉ giữ lại các lớp thực của bạn.

Bạn cũng có thể lưu model sau khi thiết lập các lớp tùy chỉnh. Nhờ đó, bạn tạo ra một phiên bản model YOLO-World được chuyên biệt hóa cho trường hợp sử dụng cụ thể của mình. Quy trình này nhúng trực tiếp các định nghĩa lớp tùy chỉnh vào tệp model, giúp model sẵn sàng sử dụng với các lớp đã chỉ định mà không cần điều chỉnh thêm. Hãy làm theo các bước sau để lưu và tải model YOLO-World tùy chỉnh:

Ví dụ

Trước tiên, hãy tải model YOLO-World, thiết lập các lớp tùy chỉnh cho model rồi lưu lại:

from ultralytics import YOLO

# Khởi tạo model YOLO-World
model = YOLO("yolov8s-world.pt")  # hoặc chọn yolov8m/l-world.pt

# Xác định các lớp tùy chỉnh
model.set_classes(["person", "bus"])

# Lưu model với từ vựng ngoại tuyến đã xác định
model.save("custom_yolov8s.pt")

Sau khi lưu, model custom_yolov8s.pt hoạt động như mọi model YOLOv8 đã được huấn luyện trước khác, nhưng có một điểm khác biệt quan trọng: model chỉ được tối ưu hóa để phát hiện các lớp bạn đã xác định. Tùy chỉnh này có thể cải thiện đáng kể hiệu suất phát hiện và hiệu quả cho các tình huống ứng dụng cụ thể của bạn.

from ultralytics import YOLO

# Tải model tùy chỉnh của bạn
model = YOLO("custom_yolov8s.pt")

# Chạy suy luận để phát hiện các lớp tùy chỉnh của bạn
results = model.predict("path/to/image.jpg")

# Hiển thị kết quả
results[0].show()

Lợi ích của việc lưu model với từ vựng tùy chỉnh#

  • Hiệu quả: Tinh giản quy 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 chi phí tính toán và tăng tốc suy luận.
  • Tính linh hoạt: Dễ dàng điều chỉnh model cho 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 quy mô lớn hay thu thập thêm dữ liệu.
  • Tính đơ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ặp lại các lớp tùy chỉnh trong thời gian chạy, giúp có thể sử dụng model trực tiếp với từ vựng được nhúng sẵn.
  • Hiệu năng: Nâng cao độ chính xác phát hiện cho các lớp được chỉ định bằng cách tập trung sự chú ý và tài nguyên của model vào việc nhận diện các đối tượng đã xác định.

Phương pháp này cung cấp một cách hiệu quả để tùy chỉnh các model phát hiện đối tượng tiên tiến nhất cho những tác vụ cụ thể, giúp AI tiên tiến dễ tiếp cận hơn và có thể áp dụng vào nhiều ứng dụng thực tiễn hơn.

Tái tạo 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
DatasetKiểuMẫuBoxesTệp chú giải
Objects365v1Phát hiện609k9621kobjects365_train.json
GQAGrounding621k3681kfinal_mixed_train_no_coco.json
Flickr30kGrounding149k641kfinal_flickr_separateGT_train.json
  • Dữ liệu xác thực
DatasetKiểuTệp chú giải
LVIS minivalPhát hiệnminival.txt

Bắt đầu huấn luyện từ đầu#

Lưu ý

WorldTrainerFromScratch được tùy chỉnh chuyên sâu để hỗ trợ huấn luyện đồng thời các model yolo-world trên cả tập dữ liệu phát hiện và tập dữ liệu grounding. Để biết thêm chi tiết, hãy xem ultralytics.models.yolo.world.train_world.py.

Ví dụ
from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch

# Tùy chọn 1: Sử dụng dictionary Python
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"]},
}

# Tùy chọn 2: Sử dụng tệp YAML (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,  # hoặc dùng data="yolo_world_data.yaml" nếu sử dụng tệp YAML
    batch=128,
    epochs=100,
    trainer=WorldTrainerFromScratch,
)

Trích dẫn và lời cảm ơn#

Chúng tôi xin chân thành cảm ơn Trung tâm Thị giác Máy tính Tencent AILab vì công trình tiên phong trong lĩnh vực phát hiện đối tượng thời gian thực với từ vựng mở bằng YOLO-World:

Trích dẫn
@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}
}

Để tìm hiểu thêm, bài báo gốc về YOLO-World có trên arXiv. Mã nguồn và tài nguyên bổ sung của dự án có thể được truy cập thông qua kho GitHub. Chúng tôi trân trọng cam kết thúc đẩy lĩnh vực này và chia sẻ những hiểu biết giá trị với cộng đồng của họ.

Câu hỏi thường gặp#

  • Model YOLO-World là một phương pháp phát hiện đối tượng tiên tiến, thời gian thực, dựa trên framework Ultralytics YOLOv8. Model vượt trội trong các tác vụ phát hiện với từ vựng mở bằng cách xác định đối tượng trong ảnh dựa trên văn bản mô tả. Nhờ 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 hiệu quả và hiệu năng cao với nhu cầu tính toán thấp hơn đáng kể, phù hợp với các ứng dụng thời gian thực trong nhiều ngành.

  • YOLO-World hỗ trợ chiến lược "prompt rồi phát hiện", sử dụng từ vựng ngoại tuyến để tă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 embedding trong từ vựng ngoại tuyến. Phương pháp này 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 động các prompt này trong model để điều chỉnh model cho những tác vụ phát hiện cụ thể, như minh họa bên dưới:

    from ultralytics import YOLOWorld
    
    # Khởi tạo model YOLO-World
    model = YOLOWorld("yolov8s-world.pt")
    
    # Xác định các lớp tùy chỉnh
    model.set_classes(["person", "bus"])
    
    # Thực hiện dự đoán trên ảnh
    results = model.predict("path/to/image.jpg")
    
    # Hiển thị kết quả
    results[0].show()
  • YOLO-World mang lại một số lợi thế so với các model phát hiện với từ vựng mở truyền thống:

    • Hiệu năng thời gian thực: Tận dụng tốc độ tính toán của CNN để phát hiện nhanh và hiệu quả.
    • Hiệu quả và yêu cầu tài nguyên thấp: YOLO-World duy trì hiệu năng cao đồng thời giảm đáng kể nhu cầu tính toán và tài nguyên.
    • Prompt có thể tùy chỉnh: Model hỗ trợ thiết lập prompt động, 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.
    • Vượt trội trong benchmark: Model có tốc độ và hiệu quả cao hơn các bộ phát hiện với từ vựng mở khác như MDETR và GLIP trên các benchmark tiêu chuẩn.
  • Có thể dễ dàng huấn luyện model YOLO-World trên tập dữ liệu của bạn thông qua Python API hoặc lệnh CLI được cung cấp. Sau đây là cách bắt đầu huấn luyện bằng Python:

    from ultralytics import YOLOWorld
    
    # Tải model YOLOv8s-worldv2 đã được huấn luyện trước
    model = YOLOWorld("yolov8s-worldv2.pt")
    
    # Huấn luyện model trên tập dữ liệu COCO8 trong 100 epoch
    results = model.train(data="coco8.yaml", epochs=100, imgsz=640)

    Hoặc dùng CLI:

    yolo train model=yolov8s-worldv2.pt data=coco8.yaml epochs=100 imgsz=640
  • Ultralytics cung cấp nhiều model YOLO-World pretrained hỗ trợ các tác vụ và chế độ vận hành khác nhau:

    Loại modelWeights pretrainedCác tác vụ được hỗ trợHuấn luyệnValidationSuy luậnExport
    YOLOv8s-worldyolov8s-world.ptPhát hiện đối tượng✅✅✅❌
    YOLOv8s-worldv2yolov8s-worldv2.ptPhát hiện đối tượng✅✅✅✅
    YOLOv8m-worldyolov8m-world.ptPhát hiện đối tượng✅✅✅❌
    YOLOv8m-worldv2yolov8m-worldv2.ptPhát hiện đối tượng✅✅✅✅
    YOLOv8l-worldyolov8l-world.ptPhát hiện đối tượng✅✅✅❌
    YOLOv8l-worldv2yolov8l-worldv2.ptPhát hiện đối tượng✅✅✅✅
    YOLOv8x-worldyolov8x-world.ptPhát hiện đối tượng✅✅✅❌
    YOLOv8x-worldv2yolov8x-worldv2.ptPhát hiện đối tượng✅✅✅✅
  • Để tái tạo kết quả chính thức từ đầu, bạn cần chuẩn bị các dataset và khởi chạy quá trình huấn luyện bằng code được cung cấp. Quy trình huấn luyện bao gồm tạo một từ điển dữ liệu và chạy phương thức train với trainer 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)

Bình luận