Ultralytics YOLO27:

Model YOLO-World#

Model YOLO-World giới thiệu một phương pháp nâng cao, theo 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ở. Đổi mới này cho phép phát hiện bất kỳ đối tượng nào trong ảnh dựa trên văn bản mô tả. Bằng cách giảm đáng kể yêu cầu tính toán trong khi vẫn duy trì hiệu năng cạnh tranh, YOLO-World trở thành một công cụ linh hoạt cho nhiều ứ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 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 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 và yêu cầu tài nguyên tính toán lớn. Sự phụ thuộc vào các danh mục đối tượng được định nghĩa trước cũng hạn chế tính hữu dụng của các model này trong những kịch bản động. YOLO-World cải tiến framework YOLOv8 với khả năng phát hiện từ vựng mở, sử dụng mô hình hóa ngôn ngữ-thị giác và pre-training trên các dataset quy mô lớn để nhận diện hiệu quả nhiều loại đối tượng trong các kịch bản zero-shot với hiệu suất vượt trội.

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

Tính năng chính#

  1. Giải pháp theo 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 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ời.

  2. Hiệu quả và hiệu năng: YOLO-World cắt giảm yêu cầu tính toán và tài nguyên mà không làm giảm hiệu năng, cung cấp một giải pháp 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ỏ, qua đó hỗ trợ các ứng dụng theo thời gian thực.

  3. Inference với từ vựng offline: YOLO-World giới thiệu chiến lược "prompt-then-detect", sử dụng từ vựng offline để nâng cao hơn nữa hiệu quả. Phương pháp này cho phép sử dụng các prompt tùy chỉnh được tính toán apriori, bao gồm caption hoặc danh mục, để mã hóa và lưu dưới dạng embedding của từ vựng offline, giúp tinh gọn quy trình phát hiện.

  4. Được xây dựng trên YOLOv8: Được xây dựng dựa trên 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 theo 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ượt trội.

  5. Hiệu suất benchmark xuất sắc: YOLO-World vượt qua các bộ phát hiện 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, thể hiện năng lực vượt trội của YOLOv8 trên một GPU NVIDIA V100 duy nhất.

  6. Ứng dụng linh hoạt: Phương pháp đổi mới của YOLO-World mở ra những khả năng mới cho nhiều tác vụ thị giác, mang lại mức cải thiện tốc độ cao hơn nhiều bậc 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ế độ vận hành#

Phần này trình bày chi tiết các model hiện có cùng với pretrained weight 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ư Inference, Validation, TrainingExport, trong đó ✅ biểu thị chế độ được hỗ trợ và ❌ biểu thị chế độ không được hỗ trợ.

Lưu ý

Tất cả weight YOLOv8-World được chuyển trực tiếp từ repository YOLO-World chính thức, làm nổi bật những đóng góp xuất sắc của dự án.

Loại modelPretrained weightCác tác vụ được hỗ trợTrainingValidationInferenceExport
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 Dataset 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 APICLI command thân thiện với người dùng để tinh gọn 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#

Mẹo

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

Phát hiện đối tượng được thực hiện đơn giản với method train, như minh họa bên dưới:

Ví dụ

Các model *.pt được huấn luyện trước bằng PyTorch, cũng như các tệp 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#

Phát hiện đối tượng được thực hiện đơn giản với method predict, như minh họa bên dưới:

Ví dụ
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 model pretrained và chạy dự đoán trên một ảnh.

Cách sử dụng Val#

Validation model trên một dataset được tinh gọn như sau:

Ví dụ
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#

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

Ví dụ
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")
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 trong dataset COCO như một phần của từ vựng offline, nâng cao hiệu quả để có thể sử dụng ngay. Tích hợp này cho phép các model YOLOv8-World trực tiếp nhận diện và dự đoán 80 danh mục tiêu chuẩn được định nghĩa trong dataset 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 class trong prompt YOLO-World

Framework YOLO-World cho phép chỉ định class một cách 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 retrain. Tính năng này đặc biệt hữu ích khi điều chỉnh model cho các domain mới hoặc những tác vụ cụ thể vốn không có trong dữ liệu train ban đầu. Bằng cách thiết lập prompt tùy chỉnh, người dùng về cơ bản 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 class này:

Ví dụ
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()
Class nền

Một số người dùng nhận thấy việc thêm chuỗi rỗng "" làm class nền có thể cải thiện hiệu năng phát hiện trong một số kịch bản. Hành vi này dường như phụ thuộc vào từng kịch bản 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 model sau khi thiết lập các class 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ể. Quy trình này nhúng trực tiếp các định nghĩa class tùy chỉnh vào file model, giúp model sẵn sàng sử dụng với các class đã 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à load model YOLO-World tùy chỉnh:

Ví dụ

Trước tiên, load một model YOLO-World, thiết lập các class tùy chỉnh cho model rồi 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, model custom_yolov8s.pt hoạt động như bất kỳ model YOLOv8 pretrained nào khác nhưng có một điểm khác biệt quan trọng: model giờ đây được tối ưu để chỉ phát hiện các class bạn đã định nghĩa. Tùy chỉnh này có thể cải thiện đáng kể hiệu năng và hiệu quả 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 từ vựng tùy chỉnh#

  • Hiệu quả: Tinh gọ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 overhead tính toán và tăng tốc inference.
  • Tính linh hoạt: Cho phép 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 retrain trên 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 phải chỉ định lại các class tùy chỉnh tại thời điểm runtime, giúp model có thể sử dụng trực tiếp với từ vựng được nhúng.
  • Hiệu năng: Nâng cao độ chính xác phát hiện đối với các class đã 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 được định nghĩa.

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

Tái hiện kết quả chính thức từ đầu (Thử nghiệm)#

Chuẩn bị dataset#

  • Dữ liệu train
DatasetKiểuMẫuBoxFile annotation
Objects365v1Phát hiện609k9621kobjects365_train.json
GQAGrounding621k3681kfinal_mixed_train_no_coco.json
Flickr30kGrounding149k641kfinal_flickr_separateGT_train.json
  • Dữ liệu validation
DatasetKiểuFile annotation
LVIS minivalPhát hiệnminival.txt

Khởi chạy train từ đầu#

Lưu ý

WorldTrainerFromScratch được tùy chỉnh chuyên sâu để cho phép train các model yolo-world đồng thời trên cả dataset phát hiện và dataset 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

# 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 đóng góp#

Chúng tôi chân thành cảm ơn Tencent AILab Computer Vision Center vì công trình tiên phong trong lĩnh vực phát hiện đối tượng từ vựng mở theo thời gian thực với 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}
}

Để đọ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 repository GitHub của họ. Chúng tôi trân trọng 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 giá trị với cộng đồng.

FAQ#

  • Model YOLO-World là một phương pháp phát hiện đối tượng nâng cao theo thời gian thực, dựa trên framework Ultralytics YOLOv8. Model nổi bật trong các tác vụ Phát hiện Từ vựng Mở bằng cách nhận diện đối tượng trong ả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à pre-training trên các dataset lớn, YOLO-World đạt hiệu quả và hiệu năng cao với yêu cầu tính toán giảm đáng kể, phù hợp cho các ứng dụng theo thời gian thực trong nhiều ngành.

  • YOLO-World hỗ trợ chiến lược "prompt-then-detect", sử dụng từ vựng offline để nâng cao hiệu quả. Các prompt tùy chỉnh như caption hoặc danh mục đối tượng cụ thể được mã hóa trước và lưu dưới dạng embedding của từ vựng offline. Phương pháp này tinh gọn quy trình phát hiện mà không cần retrain. Bạn có thể thiết lập linh hoạt 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
    
    # 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ố ưu điểm so với các model phát hiện Từ vựng Mở truyền thống:

    • Hiệu năng theo thời gian thực: Tận dụng tốc độ tính toán của CNN để cung cấp khả năng 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 linh hoạt, cho phép người dùng chỉ định các class phát hiện tùy chỉnh mà không cần retrain.
    • Hiệu suất benchmark xuất sắc: Model vượt qua các bộ phát hiện từ vựng mở khác như MDETR và GLIP cả về tốc độ lẫn hiệu quả trên các benchmark tiêu chuẩn.
  • Train model YOLO-World trên dataset của bạn rất đơn giản thông qua Python API hoặc CLI command được cung cấp. Sau đây là cách bắt đầu train 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.pt data=coco8.yaml epochs=100 imgsz=640
  • Ultralytics cung cấp nhiều model YOLO-World được huấn luyện trước, hỗ trợ nhiều tác vụ và chế độ vận hành khác nhau:

    Loại modelPretrained weightCác tác vụ được hỗ trợTrainingValidationInferenceExport
    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 các kết quả chính thức từ đầu, bạn cần chuẩn bị các bộ dữ liệu 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 việc tạo một từ điển dữ liệu và chạy phương thức train với một 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