Mô hình YOLO-World

Mô hình YOLO-World giới thiệu một phương pháp tiên tiến, thời gian thực dựa trên Ultralytics YOLOv8 cho các tác vụ 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 suất cạnh tranh, YOLO-World nổi lên 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 mô hình YOLO-World

Tổng quan

YOLO-World giải quyết những thách thức mà các mô hình 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 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 dụng của chúng trong các tình huống động. YOLO-World làm mới framework YOLOv8 với khả năng phát hiện open-vocabulary, sử dụng language modeling 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 diện một loạt các đối tượng trong các tình huống zero-shot với hiệu suất chưa từng có.

Các 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 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ì.

  2. 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 thấp hơn nhiều, cho phép triển khai các ứng dụng thời gian thực.

  3. Inference với Offline Vocabulary: YOLO-World giới thiệu chiến lược "prompt-then-detect", sử dụng offline vocabulary để tăng cườ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 trước, bao gồm chú thích hoặc danh mục, để được mã hóa và lưu trữ dưới dạng embedding offline vocabulary, giúp tinh giản quá trình phát hiện.

  4. Được hỗ trợ bởi YOLOv8: Được xây dựng 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 thời gian thực để hỗ trợ phát hiện open-vocabulary với độ chính xác và tốc độ chưa từng có.

  5. Hiệu suất Benchmark xuất sắc: YOLO-World vượt trội so với các trình phát hiện 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, cho thấy khả năng vượt trội của YOLOv8 trên một GPU NVIDIA V100 duy nhất.

  6. Ứng dụng linh hoạt: 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 sự cải thiện tốc độ đáng kể so với các phương pháp hiện có.

Các model khả dụng, 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ố 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ợ.

Lưu ý

Tất cả các trọng số YOLOv8-World đã được di 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 chúng.

Zero-shot Transfer trên tập dữ liệu COCO

Hiệu suất
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 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 APICLI 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 🚀

Sử dụng Training

Mẹo

Chúng tôi đặc biệt khuyến khích 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:

Ví dụ

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")

Cách sử dụng Dự đoán (Predict)

Object detection rất đơn giản với phương thức predict, như được minh họa dưới đây:

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 mô hình đã được huấn luyện sẵn và chạy dự đoán trên một ảnh.

Cách sử dụng Val

Validation mô hình trên một tập dữ liệu được tinh giả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

Object tracking với mô hình YOLO-World trên video/hình ảnh được tinh giả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 mô hình YOLO-World do Ultralytics cung cấp đi kèm với cấu hình sẵn các danh mục COCO dataset như một phần của offline vocabulary, tăng cường hiệu quả cho việc áp dụng ngay lập tức. Sự 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 thiết lập hoặc tùy chỉnh thêm.

Thiết lập prompts

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

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 đ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ể không thuộc training data ban đầu. Bằng cách thiết lập các prompt tùy chỉnh, người dùng về cơ bản có thể hướng sự tập trung của mô hình vào các đối tượng quan tâm, nâng cao tính phù hợp 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 trực tiếp các lớp 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()
Lớp Background

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ố trường hợp nhất định. 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 rõ 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 việc này, bạn tạo ra một phiên bản của mô hình YOLO-World chuyên biệt 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 điều chỉnh thêm. Hãy làm theo các bước sau để lưu và tải mô hình YOLO-World tùy chỉnh của bạn:

Ví dụ

Trước tiên, hãy 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 với một sự khác biệt quan trọng: nó hiệ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à 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 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 chi phí tính toán và tăng tốc độ inference.
  • Tính linh hoạt: Cho phép dễ dàng thích ứng 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 hoặc thu thập dữ liệu mở rộng.
  • Đơ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 liên tục chỉ định các lớp tùy chỉnh trong thời gian chạy (runtime), giúp mô hình có thể sử dụng trực tiếp với vocabulary đã nhúng của 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 đã định nghĩa.

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 hiện đại cho các tác vụ cụ thể, giúp AI tiên tiến trở nên dễ tiếp cận hơn và có thể áp dụng cho nhiều ứng dụng thực tế hơn.

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

Chuẩn bị các tập dữ liệu

  • Dữ liệu huấn luyện
Tập dữ liệuLoạiMẫuBoxesTệp chú thích
Objects365v1Detection609k9621kobjects365_train.json
GQAGrounding621k3681kfinal_mixed_train_no_coco.json
Flickr30kGrounding149k641kfinal_flickr_separateGT_train.json
  • Dữ liệu Validation
Tập dữ liệuLoạiTệp chú thích
LVIS minivalDetectionminival.txt

Khởi chạy huấn luyện từ đầu

Lưu ý

WorldTrainerFromScratch được tùy chỉnh 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, vui lòng kiểm tra ultralytics.model.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 = 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,
)

Trí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 open-vocabulary 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 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 thông tin chi tiết có giá trị cho cộng đồng.

Câu hỏi thường gặp (FAQ)

Mô 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ụ Open-Vocabulary Detection bằng cách nhận diện đối tượng trong ảnh dựa trên các văn bản mô tả. Bằng cách sử dụng mô hình vision-language và pre-training 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 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", sử dụng một từ vựng offline để tăng cường hiệu quả. Các prompt tùy chỉnh như chú thích (caption) hoặc danh mục đối tượng cụ thể được mã hóa trước và lưu trữ dưới dạng các embeddings từ vựng offline. Cách tiếp cận này hợp lý hóa 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 nó cho các tác vụ phát hiện cụ thể, như được hiển thị dưới đây:

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()

Tại sao tôi nên chọn YOLO-World thay vì các mô hình Open-Vocabulary truyền thống?

YOLO-World cung cấp nhiều lợi thế so với các mô hình Open-Vocabulary truyền thống:

  • Hiệu năng thời gian thực: Nó tận dụng tốc độ tính toán của 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 tính toán và tài nguyên.
  • Prompt 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 open-vocabulary khác như MDETR và GLIP về cả tốc độ và hiệu quả trên các benchmark tiêu chuẩn.

Làm thế nào để tôi huấn luyện mô hình YOLO-World trên tập dữ liệu của mình?

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=640

Các mô hình YOLO-World được huấn luyện sẵn có sẵn và các tác vụ được hỗ trợ là gì?

Ultralytics cung cấp nhiều mô hình YOLO-World được huấn luyện sẵn hỗ trợ các tác vụ và chế độ vận hành khác nhau:

Làm thế nào để tôi tái tạo các 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 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 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)

Bình luận