Bỏ để qua phần nội dung

Ultralytics Tài liệu: Sử dụng YOLOv8 với SAHI cho suy luận cắt lát

Chào mừng bạn đến với Ultralytics Tài liệu về cách sử dụng YOLOv8 với SAHI (Slicing Aided Hyper Inference). Hướng dẫn toàn diện này nhằm mục đích cung cấp cho bạn tất cả các kiến thức cần thiết mà bạn sẽ cần để triển khai SAHI cùng với YOLOv8. Chúng ta sẽ đi sâu vào SAHI là gì, tại sao suy luận cắt lát lại quan trọng đối với 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 YOLOv8 để nâng cao hiệu suất phát hiện đối tượng.

Tổng quan về SAHI Sliced Inference

Giới thiệu về SAHI

SAHI (Slicing Aided Hyper Inference) là một thư viện sáng tạo được thiết kế để tối ưu hóa các thuật toán phát hiện đối tượng cho hình ảnh quy mô lớn và độ phân giải cao. Chức năng cốt lõi của nó nằm trong việc phân vùng hình ảnh thành các lát có thể quản lý được, chạy phát hiện đối tượng trên mỗi lát cắt và sau đó ghép các kết quả lại với nhau. SAHI tương thích với một loạt các mô hình phát hiện đối tượng, bao gồm YOLO hàng loạt, do đó mang lại sự linh hoạt trong khi vẫn đảm bảo sử dụng tối ưu các tài nguyên tính toán.

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 YOLO Các mô hình, có nghĩa là bạn có thể bắt đầu cắt và phát hiện mà không cần sửa đổi mã nhiều.
  • Hiệu quả tài nguyên: Bằng cách chia nhỏ hình ảnh lớn thành các phần nhỏ hơn, SAHI tối ưu hóa việc sử dụng bộ nhớ, cho phép bạn chạy phát hiện chất lượng cao trên phần cứng với 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 để hợp nhất các hộp phát hiện chồng chéo trong quá trình khâu.

Suy luận cắt lát là gì?

Suy luận cắt lát đề cập đến việc thực hành chia nhỏ 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), tiến hành phát hiện đối tượng trên các lát cắt này và sau đó biên dịch lại các lát để tái tạo lại các vị trí đối tượng trên hình ảnh gốc. Kỹ thuật này là vô giá trong các tình huống mà tài nguyên tính toán bị hạn chế hoặc khi làm việc với hình ảnh có độ phân giải cực cao có thể dẫn đến các vấn đề về bộ nhớ.

Lợi ích của suy luận cắt lát

  • Giảm gánh nặng tính toán: Các lát hình ảnh nhỏ hơn sẽ xử lý nhanh hơn và chúng tiêu thụ ít bộ nhớ hơn, cho phép hoạt động mượt mà hơn trên phần cứng cấp thấp hơn.

  • Chất lượng phát hiện được bảo quản: Vì mỗi lát cắt được xử lý độc lập, không làm giảm chất lượng phát hiện đối tượng, miễn là các lát cắt đủ lớn để chụp các đối tượng quan tâm.

  • Khả năng mở rộng nâng cao: Kỹ thuật này cho phép phát hiện đối tượng dễ dàng được thu nhỏ hơn trên các kích thước và độ phân giải khác nhau của hình ảnh, làm cho nó trở nên lý tưởng cho một loạt các ứng dụng từ hình ảnh vệ tinh đến chẩn đoán y tế.

YOLOv8 không có SAHI YOLOv8 với SAHI
YOLOv8 không có SAHI YOLOv8 với SAHI

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

Cài đặt

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

pip install -U ultralytics sahi

Nhập mô-đun và tải xuống tài nguyên

Dưới đây là cách nhập các mô-đun cần thiết và tải xuống YOLOv8 Mô hình và một số hình ảnh thử nghiệm:

from pathlib import Path

from IPython.display import Image
from sahi import AutoDetectionModel
from sahi.predict import get_prediction, get_sliced_prediction, predict
from sahi.utils.cv import read_image
from sahi.utils.file import download_from_url
from sahi.utils.yolov8 import download_yolov8s_model

# Download YOLOv8 model
yolov8_model_path = "models/yolov8s.pt"
download_yolov8s_model(yolov8_model_path)

# Download test images
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",
)

Suy luận chuẩn với YOLOv8

Khởi tạo mô hình

Bạn có thể khởi tạo một YOLOv8 Mô hình phát hiện đối tượng như thế này:

detection_model = AutoDetectionModel.from_pretrained(
    model_type="yolov8",
    model_path=yolov8_model_path,
    confidence_threshold=0.3,
    device="cpu",  # or 'cuda:0'
)

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

Thực hiện suy luận chuẩn bằng cách sử dụng đường dẫn hình ảnh hoặc hình ảnh tê.

# With an image path
result = get_prediction("demo_data/small-vehicles1.jpeg", detection_model)

# With a numpy image
result = get_prediction(read_image("demo_data/small-vehicles1.jpeg"), detection_model)

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

Xuất và trực quan hóa các hộp giới hạn và mặt nạ dự đoán:

result.export_visuals(export_dir="demo_data/")
Image("demo_data/prediction_visual.png")

Suy luận cắt lát với YOLOv8

Thực hiện suy luận cắt lát bằng cách chỉ định kích thước lát cắt và tỷ lệ chồng chéo:

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

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

SAHI cung cấp một PredictionResult đối tượng, có thể được chuyển đổi thành các định dạng chú thích khác nhau:

# Access the object prediction list
object_prediction_list = result.object_prediction_list

# Convert to COCO annotation, COCO prediction, imantics, and fiftyone formats
result.to_coco_annotations()[:3]
result.to_coco_predictions(image_id=1)[:3]
result.to_imantics_annotations()[:3]
result.to_fiftyone_detections()[:3]

Dự đoán hàng loạt

Để dự đoán hàng loạt trên một thư mục hình ảnh:

predict(
    model_type="yolov8",
    model_path="path/to/yolov8n.pt",
    model_device="cpu",  # or '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,
)

Đó là nó! Bây giờ bạn đã được trang bị để sử dụng YOLOv8 với SAHI cho cả suy luận tiêu chuẩn và cắt lát.

Trích dẫn và xác nhận

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

@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 gửi lời cảm ơn đến nhóm nghiên cứu SAHI đã tạo ra và duy trì nguồn tài nguyên vô giá 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 nó, hãy truy cập kho lưu trữ SAHI GitHub.



Created 2023-11-12, Updated 2024-06-02
Authors: glenn-jocher (5)

Ý kiến