Ultralytics Docs: Using YOLO11 with SAHI for Sliced Inference
Welcome to the Ultralytics documentation on how to use YOLO11 with SAHI (Slicing Aided Hyper Inference). This comprehensive guide aims to furnish you with all the essential knowledge you'll need to implement SAHI alongside YOLO11. We'll deep-dive into what SAHI is, why sliced inference is critical for large-scale applications, and how to integrate these functionalities with YOLO11 for enhanced object detection performance.
SAHI ์๊ฐ
SAHI(์ฌ๋ผ์ด์ฑ ์ง์ ํ์ดํผ ์ถ๋ก )๋ ๋๊ท๋ชจ ๊ณ ํด์๋ ์ด๋ฏธ์ง์ ๊ฐ์ฒด ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ์ ์ต์ ํํ๋๋ก ์ค๊ณ๋ ํ์ ์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ํต์ฌ ๊ธฐ๋ฅ์ ์ด๋ฏธ์ง๋ฅผ ๊ด๋ฆฌ ๊ฐ๋ฅํ ์ฌ๋ผ์ด์ค๋ก ๋ถํ ํ๊ณ ๊ฐ ์ฌ๋ผ์ด์ค์์ ๊ฐ์ฒด ๊ฐ์ง๋ฅผ ์คํํ ๋ค์ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ์ฐ๊ฒฐํ๋ ๊ฒ์ ๋๋ค. SAHI๋ YOLO ์๋ฆฌ์ฆ๋ฅผ ๋น๋กฏํ ๋ค์ํ ๋ฌผ์ฒด ๊ฐ์ง ๋ชจ๋ธ๊ณผ ํธํ๋๋ฏ๋ก ์ปดํจํ ๋ฆฌ์์ค๋ฅผ ์ต์ ํํ์ฌ ์ฌ์ฉํ ์ ์๋ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค.
Watch: Inference with SAHI (Slicing Aided Hyper Inference) using Ultralytics YOLO11
SAHI์ ์ฃผ์ ๊ธฐ๋ฅ
- ์ํํ ํตํฉ: SAHI๋ YOLO ๋ชจ๋ธ๊ณผ ์์ฝ๊ฒ ํตํฉ๋๋ฏ๋ก ๋ง์ ์ฝ๋ ์์ ์์ด๋ ์ฌ๋ผ์ด์ฑ ๋ฐ ํ์ง๋ฅผ ์์ํ ์ ์์ต๋๋ค.
- ๋ฆฌ์์ค ํจ์จ์ฑ: SAHI๋ ํฐ ์ด๋ฏธ์ง๋ฅผ ์์ ๋ถ๋ถ์ผ๋ก ๋๋์ด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ต์ ํํ์ฌ ๋ฆฌ์์ค๊ฐ ์ ํ๋ ํ๋์จ์ด์์ ๊ณ ํ์ง ํ์ง๋ฅผ ์คํํ ์ ์๋๋ก ํฉ๋๋ค.
- High Accuracy: SAHI maintains the detection accuracy by employing smart algorithms to merge overlapping detection boxes during the stitching process.
์ฌ๋ผ์ด์ค ์ถ๋ก ์ด๋ ๋ฌด์์ธ๊ฐ์?
์ฌ๋ผ์ด์ค ์ถ๋ก ์ ํฐ ์ด๋ฏธ์ง๋ ๊ณ ํด์๋ ์ด๋ฏธ์ง๋ฅผ ์์ ์ธ๊ทธ๋จผํธ(์ฌ๋ผ์ด์ค)๋ก ์ธ๋ถํํ๊ณ , ์ด๋ฌํ ์ฌ๋ผ์ด์ค์์ ๊ฐ์ฒด ๊ฐ์ง๋ฅผ ์ํํ ๋ค์, ์ฌ๋ผ์ด์ค๋ฅผ ๋ค์ ์ปดํ์ผํ์ฌ ์๋ณธ ์ด๋ฏธ์ง์์ ๊ฐ์ฒด ์์น๋ฅผ ์ฌ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ๋งํฉ๋๋ค. ์ด ๊ธฐ์ ์ ์ปดํจํ ๋ฆฌ์์ค๊ฐ ์ ํ๋์ด ์๊ฑฐ๋ ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ ์ด๊ณ ํด์๋ ์ด๋ฏธ์ง๋ก ์์ ํ ๋ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
์ฌ๋ผ์ด์ค ์ถ๋ก ์ ์ด์
-
์ปดํจํ ๋ถ๋ด ๊ฐ์: ์ด๋ฏธ์ง ์ฌ๋ผ์ด์ค๊ฐ ์์์๋ก ์ฒ๋ฆฌ ์๋๊ฐ ๋นจ๋ผ์ง๊ณ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ ์ด์ ธ ์ ์ฌ์ ํ๋์จ์ด์์ ๋ ์ํํ๊ฒ ์๋ํฉ๋๋ค.
-
๋ณด์กด๋ ๊ฐ์ง ํ์ง: ๊ฐ ์ฌ๋ผ์ด์ค๋ ๋ ๋ฆฝ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ฏ๋ก, ์ฌ๋ผ์ด์ค๊ฐ ๊ด์ฌ ์๋ ๋ฌผ์ฒด๋ฅผ ์บก์ฒํ ์ ์์ ๋งํผ ์ถฉ๋ถํ ํฌ๋ค๋ฉด ๋ฌผ์ฒด ๊ฐ์ง ํ์ง์ด ์ ํ๋์ง ์์ต๋๋ค.
-
ํฅ์๋ ํ์ฅ์ฑ: ์ด ๊ธฐ์ ์ ์ฌ์ฉํ๋ฉด ์ด๋ฏธ์ง์ ํฌ๊ธฐ์ ํด์๋์ ๋ฐ๋ผ ๋ฌผ์ฒด ๊ฐ์ง ๊ธฐ๋ฅ์ ๋ณด๋ค ์ฝ๊ฒ ํ์ฅํ ์ ์์ผ๋ฏ๋ก ์์ฑ ์ด๋ฏธ์ง์์ ์๋ฃ ์ง๋จ์ ์ด๋ฅด๊ธฐ๊น์ง ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด์์ ์ ๋๋ค.
YOLO11 without SAHI | YOLO11 with SAHI |
---|---|
์ค์น ๋ฐ ์ค๋น
์ค์น
์์ํ๋ ค๋ฉด ์ต์ ๋ฒ์ ์ SAHI ๋ฐ Ultralytics ์ ์ค์นํ์ธ์:
๋ชจ๋ ๊ฐ์ ธ์ค๊ธฐ ๋ฐ ๋ฆฌ์์ค ๋ค์ด๋ก๋
Here's how to import the necessary modules and download a YOLO11 model and some test images:
from sahi.utils.file import download_from_url
from sahi.utils.yolov8 import download_yolov8s_model
# Download YOLO11 model
model_path = "models/yolo11s.pt"
download_yolov8s_model(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",
)
Standard Inference with YOLO11
๋ชจ๋ธ ์ธ์คํด์คํ
You can instantiate a YOLO11 model for object detection like this:
from sahi import AutoDetectionModel
detection_model = AutoDetectionModel.from_pretrained(
model_type="yolov8",
model_path=yolov8_model_path,
confidence_threshold=0.3,
device="cpu", # or 'cuda:0'
)
ํ์ค ์์ธก ์ํ
์ด๋ฏธ์ง ๊ฒฝ๋ก ๋๋ ๋ฉ์ด๋ฆฌ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ์ฌ ํ์ค ์ถ๋ก ์ ์ํํฉ๋๋ค.
from sahi.predict import get_prediction
# 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)
๊ฒฐ๊ณผ ์๊ฐํ
์์ธก๋ ๋ฐ์ด๋ฉ ๋ฐ์ค์ ๋ง์คํฌ๋ฅผ ๋ด๋ณด๋ด๊ณ ์๊ฐํํฉ๋๋ค:
Sliced Inference with YOLO11
์ฌ๋ผ์ด์ค ํฌ๊ธฐ์ ๊ฒน์นจ ๋น์จ์ ์ง์ ํ์ฌ ์ฌ๋ผ์ด์ค ์ถ๋ก ์ ์ํํฉ๋๋ค:
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,
)
์์ธก ๊ฒฐ๊ณผ ์ฒ๋ฆฌ
SAHI๋ PredictionResult
๊ฐ์ฒด๋ฅผ ๋ค์ํ ์ด๋
ธํ
์ด์
ํ์์ผ๋ก ๋ณํํ ์ ์์ต๋๋ค:
# 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]
๋ฐฐ์น ์์ธก
์ด๋ฏธ์ง ๋๋ ํ ๋ฆฌ์ ๋ํ ์ผ๊ด ์์ธก์ ๊ฒฝ์ฐ:
from sahi.predict import predict
predict(
model_type="yolov8",
model_path="path/to/yolo11n.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,
)
That's it! Now you're equipped to use YOLO11 with SAHI for both standard and sliced inference.
์ธ์ฉ ๋ฐ ๊ฐ์ฌ
์ฐ๊ตฌ ๋๋ ๊ฐ๋ฐ ์์ ์ SAHI๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ์๋ณธ SAHI ๋ ผ๋ฌธ์ ์ธ์ฉํ๊ณ ์ ์๋ฅผ ์ธ์ ํด ์ฃผ์ธ์:
@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}
}
We extend our thanks to the SAHI research group for creating and maintaining this invaluable resource for the computer vision community. For more information about SAHI and its creators, visit the SAHI GitHub repository.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
How can I integrate YOLO11 with SAHI for sliced inference in object detection?
Integrating Ultralytics YOLO11 with SAHI (Slicing Aided Hyper Inference) for sliced inference optimizes your object detection tasks on high-resolution images by partitioning them into manageable slices. This approach improves memory usage and ensures high detection accuracy. To get started, you need to install the ultralytics and sahi libraries:
Then, download a YOLO11 model and test images:
from sahi.utils.file import download_from_url
from sahi.utils.yolov8 import download_yolov8s_model
# Download YOLO11 model
model_path = "models/yolo11s.pt"
download_yolov8s_model(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",
)
์์ธํ ์ง์นจ์ ์ฌ๋ผ์ด์ค ์ถ๋ก ๊ฐ์ด๋๋ฅผ ์ฐธ์กฐํ์ธ์.
Why should I use SAHI with YOLO11 for object detection on large images?
Using SAHI with Ultralytics YOLO11 for object detection on large images offers several benefits:
- ์ปดํจํ ๋ถ๋ด ๊ฐ์: ์ฌ๋ผ์ด์ค๊ฐ ์์์๋ก ์ฒ๋ฆฌ ์๋๊ฐ ๋น ๋ฅด๊ณ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ ์ด ๋ฆฌ์์ค๊ฐ ์ ํ๋ ํ๋์จ์ด์์๋ ๊ณ ํ์ง ํ์ง๋ฅผ ์คํํ ์ ์์ต๋๋ค.
- ํ์ง ์ ํ๋ ์ ์ง: SAHI๋ ์ง๋ฅํ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ๊ฒน์น๋ ์์๋ฅผ ๋ณํฉํ์ฌ ํ์ง ํ์ง์ ์ ์งํฉ๋๋ค.
- ํฅ์๋ ํ์ฅ์ฑ: ๋ค์ํ ์ด๋ฏธ์ง ํฌ๊ธฐ์ ํด์๋์ ๊ฑธ์ณ ๋ฌผ์ฒด ๊ฐ์ง ์์ ์ ํ์ฅํ ์ ์์ด ์์ฑ ์ด๋ฏธ์ง ๋ถ์ ๋ฐ ์๋ฃ ์ง๋จ๊ณผ ๊ฐ์ ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด์์ ์ ๋๋ค.
๋ฌธ์์์ ์ฌ๋ผ์ด์ค ์ถ๋ก ์ ์ด์ ์ ๋ํด ์์ธํ ์์๋ณด์ธ์.
Can I visualize prediction results when using YOLO11 with SAHI?
Yes, you can visualize prediction results when using YOLO11 with SAHI. Here's how you can export and visualize the results:
from IPython.display import Image
result.export_visuals(export_dir="demo_data/")
Image("demo_data/prediction_visual.png")
์ด ๋ช ๋ น์ ์๊ฐํ๋ ์์ธก์ ์ง์ ๋ ๋๋ ํฐ๋ฆฌ์ ์ ์ฅํ ๋ค์ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํด ๋ ธํธ๋ถ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ณผ ์ ์์ต๋๋ค. ์์ธํ ๊ฐ์ด๋๋ ํ์ค ์ถ๋ก ์น์ ์ ์ฐธ์กฐํ์ธ์.
What features does SAHI offer for improving YOLO11 object detection?
SAHI (Slicing Aided Hyper Inference) offers several features that complement Ultralytics YOLO11 for object detection:
- ์ํํ ํตํฉ: SAHI๋ YOLO ๋ชจ๋ธ๊ณผ ์ฝ๊ฒ ํตํฉ๋๋ฏ๋ก ์ต์ํ์ ์ฝ๋ ์กฐ์ ๋ง ํ์ํฉ๋๋ค.
- ๋ฆฌ์์ค ํจ์จ์ฑ: ํฐ ์ด๋ฏธ์ง๋ฅผ ์์ ์กฐ๊ฐ์ผ๋ก ๋ถํ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋๊ณผ ์๋๋ฅผ ์ต์ ํํฉ๋๋ค.
- ๋์ ์ ํ๋: ์คํฐ์นญ ๊ณผ์ ์์ ๊ฒน์น๋ ๊ฐ์ง ์์๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๋ณํฉํจ์ผ๋ก์จ SAHI๋ ๋์ ๊ฐ์ง ์ ํ๋๋ฅผ ์ ์งํฉ๋๋ค.
๋ ์์ธํ ์์๋ณด๋ ค๋ฉด SAHI์ ์ฃผ์ ๊ธฐ๋ฅ์ ๋ํด ์ฝ์ด๋ณด์ธ์.
How do I handle large-scale inference projects using YOLO11 and SAHI?
To handle large-scale inference projects using YOLO11 and SAHI, follow these best practices:
- ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํฉ๋๋ค: ultralytics ๋ฐ sahi์ ์ต์ ๋ฒ์ ์ด ์ค์น๋์ด ์๋์ง ํ์ธํฉ๋๋ค.
- ์ฌ๋ผ์ด์ค ์ถ๋ก ์ ๊ตฌ์ฑํฉ๋๋ค: ํน์ ํ๋ก์ ํธ์ ๋ง๋ ์ต์ ์ ์ฌ๋ผ์ด์ค ํฌ๊ธฐ์ ๊ฒน์นจ ๋น์จ์ ๊ฒฐ์ ํฉ๋๋ค.
- ์ผ๊ด ์์ธก ์คํ: SAHI์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง ๋๋ ํ ๋ฆฌ์ ๋ํ ์ผ๊ด ์์ธก์ ์ํํ๋ฉด ํจ์จ์ฑ์ด ํฅ์๋ฉ๋๋ค.
๋ฐฐ์น ์์ธก์ ์์ ๋๋ค:
from sahi.predict import predict
predict(
model_type="yolov8",
model_path="path/to/yolo11n.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,
)
์์ธํ ๋จ๊ณ๋ ๋ฐฐ์น ์์ธก ์น์ ์ ์ฐธ์กฐํ์ธ์.