File size: 3,084 Bytes
017c046 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | """
YOLOv8 ์ถ๋ก ์คํฌ๋ฆฝํธ (Ultralytics)
=====================================
COCO ์ฌ์ ํ์ต YOLOv8๋ก ์ด๋ฏธ์ง์์ ๊ฐ์ฒด๋ฅผ ํ์งํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ค.
์์ ๋ง๋ ๋ฐ๋ฐ๋ฅ Faster R-CNN(infer.py)๊ณผ ๊ฐ์ ์ด๋ฏธ์ง๋ก ๋น๊ตํด๋ณด๊ธฐ ์ข๋ค.
์ค์น:
pip install ultralytics
์คํ ์:
# ์ด๋ฏธ์ง ํ ์ฅ
python yolo_infer.py --image test.jpg
# ํด๋ ์ ์ฒด
python yolo_infer.py --image_dir ./samples --out_dir ./yolo_results
# ๋ชจ๋ธ ํฌ๊ธฐ ๋ณ๊ฒฝ (n < s < m < l < x, ๋ค๋ก ๊ฐ์๋ก ์ ํยท๋ฌด๊ฑฐ์)
python yolo_infer.py --image test.jpg --model yolov8s.pt
# ์ ์ ์๊ณ๊ฐ ์กฐ์ (๊ธฐ๋ณธ 0.25)
python yolo_infer.py --image test.jpg --conf 0.4
๋ฉ๋ชจ:
- ์ฒ์ ์คํ ์ ๋ชจ๋ธ ๊ฐ์ค์น(yolov8n.pt ๋ฑ)๊ฐ ์๋ ๋ค์ด๋ก๋๋๋ค.
- Faster R-CNN(20 VOC ํด๋์ค)๊ณผ ๋ฌ๋ฆฌ YOLOv8์ COCO 80 ํด๋์ค๋ฅผ ํ์งํ๋ค.
- ๋ผ์ด์ ์ค: Ultralytics YOLO๋ AGPL-3.0. ์์
์ ํ์์์ค ์ฌ์ฉ ์ ์์ฉ ๋ผ์ด์ ์ค ํ์.
"""
import os
import argparse
from ultralytics import YOLO
def main():
ap = argparse.ArgumentParser()
ap.add_argument("--model", default="yolov8n.pt",
help="yolov8n/s/m/l/x.pt (์์ผ๋ฉด ์๋ ๋ค์ด๋ก๋)")
ap.add_argument("--image", help="๋จ์ผ ์ด๋ฏธ์ง ๊ฒฝ๋ก")
ap.add_argument("--image_dir", help="์ด๋ฏธ์ง ํด๋ ๊ฒฝ๋ก")
ap.add_argument("--out_dir", default="./yolo_results", help="๊ฒฐ๊ณผ ์ ์ฅ ํด๋")
ap.add_argument("--conf", type=float, default=0.25,
help="์ด ์ ๋ขฐ๋ ์ด์๋ง ํ์ (๊ธฐ๋ณธ 0.25)")
args = ap.parse_args()
# ๋ชจ๋ธ ๋ก๋ (COCO ์ฌ์ ํ์ต, ์ฒซ ์คํ ์ ์๋ ๋ค์ด๋ก๋)
print(f"๋ชจ๋ธ ๋ก๋: {args.model}")
model = YOLO(args.model)
# ์ฒ๋ฆฌํ ์ด๋ฏธ์ง ๋ชฉ๋ก ๊ตฌ์ฑ
targets = []
if args.image:
targets.append(args.image)
if args.image_dir:
for fn in os.listdir(args.image_dir):
if fn.lower().endswith((".jpg", ".jpeg", ".png", ".bmp")):
targets.append(os.path.join(args.image_dir, fn))
if not targets:
print("์ด๋ฏธ์ง๋ฅผ ์ง์ ํ์ธ์: --image ๋๋ --image_dir")
return
os.makedirs(args.out_dir, exist_ok=True)
for path in targets:
# ์ถ๋ก ์คํ
results = model(path, conf=args.conf, verbose=False)
r = results[0]
# ํ์ง ๊ฐ์์ ํด๋์ค๋ณ ์์ฝ
n = len(r.boxes)
names = r.names # ํด๋์ค ์ธ๋ฑ์ค โ ์ด๋ฆ
detected = {}
for cls_id in r.boxes.cls.tolist():
name = names[int(cls_id)]
detected[name] = detected.get(name, 0) + 1
# ๋ฐ์ค ๊ทธ๋ ค์ ์ ์ฅ
out_path = os.path.join(args.out_dir, "yolo_" + os.path.basename(path))
r.save(filename=out_path)
summary = ", ".join(f"{k}ร{v}" for k, v in detected.items()) or "์์"
print(f" {os.path.basename(path)}: {n}๊ฐ ํ์ง ({summary}) โ {out_path}")
print(f"์๋ฃ. ๊ฒฐ๊ณผ๋ {args.out_dir} ํด๋์ ์ ์ฅ๋จ.")
if __name__ == "__main__":
main()
|