Ultralytics YOLO27:
Get Started

Sử dụng YOLO26 với SAHI cho inference phân lát#

Open SAHI for Sliced Inference In Colab

Hướng dẫn này chỉ cách sử dụng YOLO26 với SAHI (Suy luận siêu cấp hỗ trợ phân lát). Chúng ta sẽ tìm hiểu sâu về SAHI, lý do inference phân lát đóng vai trò thiết yếu trong các ứng dụng quy mô lớn và cách tích hợp các chức năng này với YOLO26 để nâng cao hiệu suất phát hiện đối tượng.

Giới thiệu về SAHI#

SAHI (Suy luận siêu cấp hỗ trợ phân lát) là thư viện tiên tiến được thiết kế để tối ưu hóa các thuật toán phát hiện đối tượng trên hình ảnh quy mô lớn và độ phân giải cao. Chức năng cốt lõi của thư viện là chia hình ảnh thành các lát có kích thước phù hợp, chạy phát hiện đối tượng trên từng lát, rồi ghép các kết quả lại. SAHI tương thích với nhiều model phát hiện đối tượng, bao gồm cả dòng YOLO, nhờ đó mang lại tính linh hoạt đồng thời đảm bảo sử dụng tài nguyên tính toán hiệu quả.



Xem: Cách sử dụng SAHI với Ultralytics YOLO26 để phát hiện vật thể nhỏ | Slicing Aided Hyper Inference 🚀

Các tính năng chính của SAHI#

  • Tích hợp liền mạch: SAHI tích hợp dễ dàng với các model YOLO, nghĩa là bạn có thể bắt đầu phân lát và phát hiện mà không cần sửa đổi nhiều mã.
  • Sử dụng tài nguyên hiệu quả: Bằng cách chia hình ảnh lớn thành các phần nhỏ hơn, SAHI tối ưu hóa mức sử dụng bộ nhớ, cho phép chạy phát hiện chất lượng cao trên phần cứng có tài nguyên hạn chế.
  • Độ chính xác cao: SAHI duy trì độ chính xác phát hiện bằng cách sử dụng các thuật toán thông minh để gộp các bounding box phát hiện chồng lấn trong quá trình ghép.

Inference phân lát là gì?#

Inference phân lát là phương pháp chia một hình ảnh lớn hoặc có độ phân giải cao thành các phân đoạn nhỏ hơn (lát), thực hiện phát hiện đối tượng trên các lát này, rồi ghép lại để khôi phục vị trí của đối tượng trên hình ảnh gốc. Kỹ thuật này vô cùng hữu ích trong các tình huống tài nguyên tính toán hạn chế hoặc khi xử lý hình ảnh có độ phân giải cực cao vốn có thể gây ra vấn đề về bộ nhớ.

Lợi ích của inference phân lát#

  • Giảm tải tính toán: Các lát hình ảnh nhỏ hơn được xử lý nhanh hơn và tiêu tốn ít bộ nhớ hơn, giúp hoạt động trơn tru hơn trên phần cứng cấp thấp.

  • Duy trì chất lượng phát hiện: Vì mỗi lát được xử lý độc lập nên chất lượng phát hiện đối tượng không bị suy giảm, miễn là các lát đủ lớn để chứa những đối tượng cần quan tâm.

  • Tăng khả năng mở rộng: Kỹ thuật này giúp dễ dàng mở rộng quy mô phát hiện đối tượng trên các hình ảnh có kích thước và độ phân giải khác nhau, phù hợp với nhiều ứng dụng, từ ảnh vệ tinh đến chẩn đoán y khoa.

YOLO26 không dùng SAHIYOLO26 dùng SAHI
YOLO26 without SAHIYOLO26 with SAHI

Cài đặt và chuẩn bị#

Cài đặt#

Để bắt đầu, hãy cài đặt phiên bản mới nhất của SAHI và Ultralytics:

pip install -U ultralytics sahi

Nhập module và tải tài nguyên#

Sau đây là cách tải một số hình ảnh kiểm thử:

from sahi.utils.file import download_from_url

# Tải hình ảnh kiểm thử
download_from_url(
    "https://raw.githubusercontent.com/obss/sahi/main/demo/demo_data/small-vehicles1.jpeg",
    "demo_data/small-vehicles1.jpeg",
)
download_from_url(
    "https://raw.githubusercontent.com/obss/sahi/main/demo/demo_data/terrain2.png",
    "demo_data/terrain2.png",
)

Inference tiêu chuẩn với YOLO26#

Khởi tạo model#

Bạn có thể khởi tạo model YOLO26 để phát hiện đối tượng như sau:

from sahi import AutoDetectionModel

detection_model = AutoDetectionModel.from_pretrained(
    model_type="ultralytics",
    model_path="yolo26n.pt",
    confidence_threshold=0.3,
    device="cpu",  # hoặc 'cuda:0'
)

Thực hiện dự đoán tiêu chuẩn#

Thực hiện inference tiêu chuẩn bằng đường dẫn hình ảnh.

from sahi.predict import get_prediction

result = get_prediction("demo_data/small-vehicles1.jpeg", detection_model)

result.export_visuals(export_dir="demo_data/", hide_conf=True)

Trực quan hóa kết quả#

Xuất và trực quan hóa các bounding box và mask được dự đoán:

from PIL import Image

# Mở hình ảnh dự đoán
processed_image = Image.open("demo_data/prediction_visual.png")

# Hiển thị hình ảnh dự đoán
processed_image.show()

Inference phân lát với YOLO26#

Thực hiện inference phân lát bằng cách chỉ định kích thước lát và tỷ lệ chồng lấn:

from PIL import Image
from sahi.predict import get_sliced_prediction

result = get_sliced_prediction(
    "demo_data/small-vehicles1.jpeg",
    detection_model,
    slice_height=256,
    slice_width=256,
    overlap_height_ratio=0.2,
    overlap_width_ratio=0.2,
)

# Xuất kết quả
result.export_visuals(export_dir="demo_data/", hide_conf=True)

# Mở hình ảnh dự đoán
processed_image = Image.open("demo_data/prediction_visual.png")

# Hiển thị hình ảnh dự đoán
processed_image.show()

Xử lý kết quả dự đoán#

SAHI cung cấp đối tượng PredictionResult, có thể chuyển đổi sang nhiều định dạng annotation:

# Truy cập danh sách dự đoán đối tượng
object_prediction_list = result.object_prediction_list

# Chuyển đổi sang định dạng annotation COCO và dự đoán COCO
result.to_coco_annotations()[:3]
result.to_coco_predictions(image_id=1)[:3]
Các định dạng xuất bổ sung

PredictionResult cũng có thể chuyển đổi các kết quả phát hiện thành đối tượng imantics và FiftyOne bằng result.to_imantics_annotations() và result.to_fiftyone_detections(). Các phương thức này yêu cầu cài đặt các package tương ứng, vì vậy hãy cài đặt chúng trước bằng pip install imantics fiftyone.

Dự đoán theo batch#

Để dự đoán theo batch trên một thư mục chứa hình ảnh:

from sahi.predict import predict

predict(
    model_type="ultralytics",
    model_path="yolo26n.pt",
    model_device="cpu",  # hoặc 'cuda:0'
    model_confidence_threshold=0.4,
    source="path/to/dir",
    slice_height=256,
    slice_width=256,
    overlap_height_ratio=0.2,
    overlap_width_ratio=0.2,
)

Giờ đây, bạn đã sẵn sàng sử dụng YOLO26 với SAHI cho cả inference tiêu chuẩn lẫn inference phân lát.

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

Nếu sử dụng SAHI trong công việc nghiên cứu hoặc phát triển, vui lòng trích dẫn bài báo SAHI gốc và ghi nhận đóng góp của các tác giả:

Trích dẫn
@article{akyon2022sahi,
  title={Slicing Aided Hyper Inference and Fine-tuning for Small Object Detection},
  author={Akyon, Fatih Cagatay and Altinuc, Sinan Onur and Temizel, Alptekin},
  journal={2022 IEEE International Conference on Image Processing (ICIP)},
  doi={10.1109/ICIP46576.2022.9897990},
  pages={966-970},
  year={2022}
}

Chúng tôi xin cảm ơn nhóm nghiên cứu SAHI đã tạo và duy trì tài nguyên vô cùng hữu ích này cho cộng đồng thị giác máy tính. Để biết thêm thông tin về SAHI và những người tạo ra thư viện, hãy truy cập kho GitHub của SAHI.

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

  • Tích hợp Ultralytics YOLO26 với SAHI (Suy luận siêu cấp hỗ trợ phân lát) để thực hiện inference phân lát giúp tối ưu hóa tác vụ phát hiện đối tượng trên hình ảnh độ phân giải cao bằng cách chia hình ảnh thành các lát có kích thước phù hợp. Phương pháp này cải thiện mức sử dụng bộ nhớ và đảm bảo độ chính xác phát hiện cao. Để bắt đầu, bạn cần cài đặt thư viện ultralytics và sahi:

    pip install -U ultralytics sahi

    Sau đó, tải hình ảnh kiểm thử:

    from sahi.utils.file import download_from_url
    
    # Tải hình ảnh kiểm thử
    download_from_url(
        "https://raw.githubusercontent.com/obss/sahi/main/demo/demo_data/small-vehicles1.jpeg",
        "demo_data/small-vehicles1.jpeg",
    )
    download_from_url(
        "https://raw.githubusercontent.com/obss/sahi/main/demo/demo_data/terrain2.png",
        "demo_data/terrain2.png",
    )

    Để biết hướng dẫn chi tiết hơn, hãy tham khảo hướng dẫn về inference phân lát của chúng tôi.

  • Sử dụng SAHI với Ultralytics YOLO26 để phát hiện đối tượng trên hình ảnh lớn mang lại một số lợi ích:

    • Giảm tải tính toán: Các lát nhỏ hơn được xử lý nhanh hơn và tiêu tốn ít bộ nhớ hơn, nhờ đó có thể chạy phát hiện chất lượng cao trên phần cứng có tài nguyên hạn chế.
    • Duy trì độ chính xác phát hiện: SAHI sử dụng các thuật toán thông minh để gộp các box chồng lấn, qua đó duy trì chất lượng phát hiện.
    • Tăng khả năng mở rộng: Bằng cách mở rộng quy mô tác vụ phát hiện đối tượng trên các hình ảnh có kích thước và độ phân giải khác nhau, SAHI trở thành lựa chọn lý tưởng cho nhiều ứng dụng, chẳng hạn như phân tích ảnh vệ tinh và chẩn đoán y khoa.

    Tìm hiểu thêm về lợi ích của inference phân lát trong tài liệu của chúng tôi.

  • Có, bạn có thể trực quan hóa kết quả dự đoán khi sử dụng YOLO26 với SAHI. Sau đây là cách xuất và trực quan hóa kết quả:

    from PIL import Image
    
    result.export_visuals(export_dir="demo_data/", hide_conf=True)
    
    processed_image = Image.open("demo_data/prediction_visual.png")
    
    processed_image.show()

    Lệnh này sẽ lưu các kết quả dự đoán đã trực quan hóa vào thư mục được chỉ định; sau đó, bạn có thể tải hình ảnh để xem trong notebook hoặc ứng dụng của mình. Để biết hướng dẫn chi tiết, hãy xem phần Inference tiêu chuẩn.

  • SAHI (Suy luận siêu cấp hỗ trợ phân lát) cung cấp một số tính năng bổ trợ cho Ultralytics YOLO26 trong tác vụ phát hiện đối tượng:

    • Tích hợp liền mạch: SAHI dễ dàng tích hợp với các model YOLO và chỉ cần điều chỉnh mã ở mức tối thiểu.
    • Sử dụng tài nguyên hiệu quả: SAHI chia hình ảnh lớn thành các lát nhỏ hơn, giúp tối ưu hóa mức sử dụng bộ nhớ và tốc độ xử lý.
    • Độ chính xác cao: Bằng cách gộp hiệu quả các box phát hiện chồng lấn trong quá trình ghép, SAHI duy trì độ chính xác phát hiện cao.

    Để hiểu sâu hơn, hãy đọc về các tính năng chính của SAHI.

  • Để xử lý các dự án inference quy mô lớn bằng YOLO26 và SAHI, hãy thực hiện theo các phương pháp tốt nhất sau:

    1. Cài đặt các thư viện cần thiết: Đảm bảo bạn đang dùng phiên bản mới nhất của ultralytics và sahi.
    2. Cấu hình inference theo lát cắt: Xác định kích thước lát cắt và tỷ lệ chồng lấp tối ưu cho dự án cụ thể của bạn.
    3. Chạy dự đoán theo batch: Sử dụng các tính năng của SAHI để dự đoán theo batch trên một thư mục ảnh, giúp cải thiện hiệu suất.

    Ví dụ về dự đoán theo batch:

    from sahi.predict import predict
    
    predict(
        model_type="ultralytics",
        model_path="path/to/yolo26n.pt",
        model_device="cpu",  # hoặc 'cuda:0'
        model_confidence_threshold=0.4,
        source="path/to/dir",
        slice_height=256,
        slice_width=256,
        overlap_height_ratio=0.2,
        overlap_width_ratio=0.2,
    )

    Để xem các bước chi tiết hơn, hãy truy cập mục Dự đoán theo batch của chúng tôi.

Bình luận