Ultralytics Docs: ์ฌ๋ผ์ด์ฑ ์ถ๋ก ์ SAHI์ ํจ๊ป YOLOv8 ์ฌ์ฉ
SAHI (์ฌ๋ผ์ด์ฑ ์ง์ ํ์ดํผ ์ถ๋ก )์ YOLOv8 ์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ํ Ultralytics ๋ฌธ์์ ์ค์ ๊ฒ์ ํ์ํฉ๋๋ค. ์ด ํฌ๊ด์ ์ธ ๊ฐ์ด๋๋ YOLOv8 ์ ํจ๊ป SAHI๋ฅผ ๊ตฌํํ๋ ๋ฐ ํ์ํ ๋ชจ๋ ํ์ ์ง์์ ์ ๊ณตํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. SAHI๊ฐ ๋ฌด์์ธ์ง, ์ฌ๋ผ์ด์ค ์ถ๋ก ์ด ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ํ ์ด์ ์ ์ด๋ฌํ ๊ธฐ๋ฅ์ YOLOv8 ์ ํตํฉํ์ฌ ๊ฐ์ฒด ๊ฐ์ง ์ฑ๋ฅ์ ํฅ์์ํค๋ ๋ฐฉ๋ฒ์ ๋ํด ์์ธํ ์ดํด๋ด ๋๋ค.
SAHI ์๊ฐ
SAHI(์ฌ๋ผ์ด์ฑ ์ง์ ํ์ดํผ ์ถ๋ก )๋ ๋๊ท๋ชจ ๊ณ ํด์๋ ์ด๋ฏธ์ง์ ๊ฐ์ฒด ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ์ ์ต์ ํํ๋๋ก ์ค๊ณ๋ ํ์ ์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ํต์ฌ ๊ธฐ๋ฅ์ ์ด๋ฏธ์ง๋ฅผ ๊ด๋ฆฌ ๊ฐ๋ฅํ ์ฌ๋ผ์ด์ค๋ก ๋ถํ ํ๊ณ ๊ฐ ์ฌ๋ผ์ด์ค์์ ๊ฐ์ฒด ๊ฐ์ง๋ฅผ ์คํํ ๋ค์ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ์ฐ๊ฒฐํ๋ ๊ฒ์ ๋๋ค. SAHI๋ YOLO ์๋ฆฌ์ฆ๋ฅผ ๋น๋กฏํ ๋ค์ํ ๋ฌผ์ฒด ๊ฐ์ง ๋ชจ๋ธ๊ณผ ํธํ๋๋ฏ๋ก ์ปดํจํ ๋ฆฌ์์ค๋ฅผ ์ต์ ํํ์ฌ ์ฌ์ฉํ ์ ์๋ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค.
SAHI์ ์ฃผ์ ๊ธฐ๋ฅ
- ์ํํ ํตํฉ: SAHI๋ YOLO ๋ชจ๋ธ๊ณผ ์์ฝ๊ฒ ํตํฉ๋๋ฏ๋ก ๋ง์ ์ฝ๋ ์์ ์์ด๋ ์ฌ๋ผ์ด์ฑ ๋ฐ ํ์ง๋ฅผ ์์ํ ์ ์์ต๋๋ค.
- ๋ฆฌ์์ค ํจ์จ์ฑ: SAHI๋ ํฐ ์ด๋ฏธ์ง๋ฅผ ์์ ๋ถ๋ถ์ผ๋ก ๋๋์ด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ต์ ํํ์ฌ ๋ฆฌ์์ค๊ฐ ์ ํ๋ ํ๋์จ์ด์์ ๊ณ ํ์ง ํ์ง๋ฅผ ์คํํ ์ ์๋๋ก ํฉ๋๋ค.
- ๋์ ์ ํ๋: SAHI๋ ์ค๋งํธ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ์คํฐ์นญ ํ๋ก์ธ์ค ์ค์ ๊ฒน์น๋ ๊ฐ์ง ์์๋ฅผ ๋ณํฉํจ์ผ๋ก์จ ๊ฐ์ง ์ ํ๋๋ฅผ ์ ์งํฉ๋๋ค.
์ฌ๋ผ์ด์ค ์ถ๋ก ์ด๋ ๋ฌด์์ธ๊ฐ์?
์ฌ๋ผ์ด์ค ์ถ๋ก ์ ํฐ ์ด๋ฏธ์ง๋ ๊ณ ํด์๋ ์ด๋ฏธ์ง๋ฅผ ์์ ์ธ๊ทธ๋จผํธ(์ฌ๋ผ์ด์ค)๋ก ์ธ๋ถํํ๊ณ , ์ด๋ฌํ ์ฌ๋ผ์ด์ค์์ ๊ฐ์ฒด ๊ฐ์ง๋ฅผ ์ํํ ๋ค์, ์ฌ๋ผ์ด์ค๋ฅผ ๋ค์ ์ปดํ์ผํ์ฌ ์๋ณธ ์ด๋ฏธ์ง์์ ๊ฐ์ฒด ์์น๋ฅผ ์ฌ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ๋งํฉ๋๋ค. ์ด ๊ธฐ์ ์ ์ปดํจํ ๋ฆฌ์์ค๊ฐ ์ ํ๋์ด ์๊ฑฐ๋ ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ ์ด๊ณ ํด์๋ ์ด๋ฏธ์ง๋ก ์์ ํ ๋ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
์ฌ๋ผ์ด์ค ์ถ๋ก ์ ์ด์
-
์ปดํจํ ๋ถ๋ด ๊ฐ์: ์ด๋ฏธ์ง ์ฌ๋ผ์ด์ค๊ฐ ์์์๋ก ์ฒ๋ฆฌ ์๋๊ฐ ๋นจ๋ผ์ง๊ณ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ ์ด์ ธ ์ ์ฌ์ ํ๋์จ์ด์์ ๋ ์ํํ๊ฒ ์๋ํฉ๋๋ค.
-
๋ณด์กด๋ ๊ฐ์ง ํ์ง: ๊ฐ ์ฌ๋ผ์ด์ค๋ ๋ ๋ฆฝ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ฏ๋ก, ์ฌ๋ผ์ด์ค๊ฐ ๊ด์ฌ ์๋ ๋ฌผ์ฒด๋ฅผ ์บก์ฒํ ์ ์์ ๋งํผ ์ถฉ๋ถํ ํฌ๋ค๋ฉด ๋ฌผ์ฒด ๊ฐ์ง ํ์ง์ด ์ ํ๋์ง ์์ต๋๋ค.
-
ํฅ์๋ ํ์ฅ์ฑ: ์ด ๊ธฐ์ ์ ์ฌ์ฉํ๋ฉด ์ด๋ฏธ์ง์ ํฌ๊ธฐ์ ํด์๋์ ๋ฐ๋ผ ๋ฌผ์ฒด ๊ฐ์ง ๊ธฐ๋ฅ์ ๋ณด๋ค ์ฝ๊ฒ ํ์ฅํ ์ ์์ผ๋ฏ๋ก ์์ฑ ์ด๋ฏธ์ง์์ ์๋ฃ ์ง๋จ์ ์ด๋ฅด๊ธฐ๊น์ง ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด์์ ์ ๋๋ค.
YOLOv8 SAHI ์์ | YOLOv8 SAHI์ ํจ๊ป |
---|---|
์ค์น ๋ฐ ์ค๋น
์ค์น
์์ํ๋ ค๋ฉด ์ต์ ๋ฒ์ ์ SAHI ๋ฐ Ultralytics ์ ์ค์นํ์ธ์:
๋ชจ๋ ๊ฐ์ ธ์ค๊ธฐ ๋ฐ ๋ฆฌ์์ค ๋ค์ด๋ก๋
ํ์ํ ๋ชจ๋์ ๊ฐ์ ธ์ค๊ณ YOLOv8 ๋ชจ๋ธ๊ณผ ๋ช ๊ฐ์ง ํ ์คํธ ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋ํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
from sahi.utils.yolov8 import download_yolov8s_model
from sahi import AutoDetectionModel
from sahi.utils.cv import read_image
from sahi.utils.file import download_from_url
from sahi.predict import get_prediction, get_sliced_prediction, predict
from pathlib import Path
from IPython.display import Image
# 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')
ํ์ค ์ถ๋ก ์ ์ฌ์ฉํ YOLOv8
๋ชจ๋ธ ์ธ์คํด์คํ
๋ค์๊ณผ ๊ฐ์ด ๊ฐ์ฒด ๊ฐ์ง๋ฅผ ์ํด YOLOv8 ๋ชจ๋ธ์ ์ธ์คํด์คํํ ์ ์์ต๋๋ค:
detection_model = AutoDetectionModel.from_pretrained(
model_type='yolov8',
model_path=yolov8_model_path,
confidence_threshold=0.3,
device="cpu", # or 'cuda:0'
)
ํ์ค ์์ธก ์ํ
์ด๋ฏธ์ง ๊ฒฝ๋ก ๋๋ ๋ฉ์ด๋ฆฌ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ์ฌ ํ์ค ์ถ๋ก ์ ์ํํฉ๋๋ค.
# 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)
๊ฒฐ๊ณผ ์๊ฐํ
์์ธก๋ ๋ฐ์ด๋ฉ ๋ฐ์ค์ ๋ง์คํฌ๋ฅผ ๋ด๋ณด๋ด๊ณ ์๊ฐํํฉ๋๋ค:
์ฌ๋ผ์ด์ค ์ถ๋ก ์ ์ฌ์ฉํ YOLOv8
์ฌ๋ผ์ด์ค ํฌ๊ธฐ์ ๊ฒน์นจ ๋น์จ์ ์ง์ ํ์ฌ ์ฌ๋ผ์ด์ค ์ถ๋ก ์ ์ํํฉ๋๋ค:
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]
๋ฐฐ์น ์์ธก
์ด๋ฏธ์ง ๋๋ ํ ๋ฆฌ์ ๋ํ ์ผ๊ด ์์ธก์ ๊ฒฝ์ฐ:
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,
)
์ด์ ๋๋ฌ์ต๋๋ค! ์ด์ ํ์ค ์ถ๋ก ๊ณผ ์ฌ๋ผ์ด์ค ์ถ๋ก ๋ชจ๋์ YOLOv8 ์ ์ฌ์ฉํ ์ ์๊ฒ ๋์์ต๋๋ค.
์ธ์ฉ ๋ฐ ๊ฐ์ฌ
์ฐ๊ตฌ ๋๋ ๊ฐ๋ฐ ์์ ์ 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}
}
์ปดํจํฐ ๋น์ ์ปค๋ฎค๋ํฐ๋ฅผ ์ํด ์ด ๊ท์คํ ๋ฆฌ์์ค๋ฅผ ๋ง๋ค๊ณ ์ ์ง ๊ด๋ฆฌํด ์ฃผ์ SAHI ์ฐ๊ตฌ ๊ทธ๋ฃน์ ๊ฐ์ฌ์ ๋ง์์ ์ ํฉ๋๋ค. SAHI์ ์ ์์์ ๋ํ ์์ธํ ๋ด์ฉ์ SAHI GitHub ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ฐธ์กฐํ์ธ์.