์ฝ˜ํ…์ธ ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

๋‹ค์Œ์„ ์‚ฌ์šฉํ•œ ๋ชจ๋ธ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ Ultralytics YOLO

Ultralytics YOLO ์—์ฝ”์‹œ์Šคํ…œ ๋ฐ ํ†ตํ•ฉ

์†Œ๊ฐœ

๊ฒ€์ฆ์€ ๋จธ์‹  ๋Ÿฌ๋‹ ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ์ค‘์š”ํ•œ ๋‹จ๊ณ„๋กœ, ํ•™์Šต๋œ ๋ชจ๋ธ์˜ ํ’ˆ์งˆ์„ ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. Ultralytics YOLOv8 ์˜ Val ๋ชจ๋“œ๋Š” ๊ฐ์ฒด ๊ฐ์ง€ ๋ชจ๋ธ์˜ ์„ฑ๋Šฅ์„ ํ‰๊ฐ€ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์™€ ๋ฉ”ํŠธ๋ฆญ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ๋Š” Val ๋ชจ๋“œ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ์˜ ์ •ํ™•์„ฑ๊ณผ ์‹ ๋ขฐ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ์™„๋ฒฝํ•œ ๋ฆฌ์†Œ์Šค์ž…๋‹ˆ๋‹ค.



Watch: Ultralytics ๋ชจ๋“œ ํŠœํ† ๋ฆฌ์–ผ: ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ

์™œ Ultralytics YOLO ์œผ๋กœ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ•ด์•ผ ํ•˜๋‚˜์š”?

YOLOv8 ์˜ Val ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•œ ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • ์ •๋ฐ€๋„: mAP50, mAP75, mAP50-95์™€ ๊ฐ™์€ ์ •ํ™•ํ•œ ์ง€ํ‘œ๋ฅผ ํ†ตํ•ด ๋ชจ๋ธ์„ ์ข…ํ•ฉ์ ์œผ๋กœ ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํŽธ๋ฆฌํ•จ: ๊ต์œก ์„ค์ •์„ ๊ธฐ์–ตํ•˜๋Š” ๊ธฐ๋ณธ ์ œ๊ณต ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ„์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ์œ ์—ฐ์„ฑ: ๋™์ผํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ์„ธํŠธ์™€ ์ด๋ฏธ์ง€ ํฌ๊ธฐ๋กœ ๋ชจ๋ธ์„ ๊ฒ€์ฆํ•˜์„ธ์š”.
  • ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹: ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋ฉ”ํŠธ๋ฆญ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ์„ ๋ฏธ์„ธ ์กฐ์ •ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Val ๋ชจ๋“œ์˜ ์ฃผ์š” ๊ธฐ๋Šฅ

๋‹ค์Œ์€ YOLOv8 ์˜ Val ๋ชจ๋“œ์—์„œ ์ œ๊ณตํ•˜๋Š” ์ฃผ๋ชฉํ•  ๋งŒํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค:

  • ์ž๋™ํ™”๋œ ์„ค์ •: ๋ชจ๋ธ์ด ํ•™์Šต ๊ตฌ์„ฑ์„ ๊ธฐ์–ตํ•˜์—ฌ ๊ฐ„ํŽธํ•˜๊ฒŒ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฉ€ํ‹ฐ ๋ฉ”ํŠธ๋ฆญ ์ง€์›: ๋‹ค์–‘ํ•œ ์ •ํ™•๋„ ์ง€ํ‘œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ชจ๋ธ์„ ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • CLI ๋ฐ Python API: ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ๋Œ€ํ•œ ์„ ํ˜ธ๋„์— ๋”ฐ๋ผ ๋ช…๋ น์ค„ ์ธํ„ฐํŽ˜์ด์Šค ๋˜๋Š” Python API ์ค‘์—์„œ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ํ˜ธํ™˜์„ฑ: ํ•™์Šต ๋‹จ๊ณ„์—์„œ ์‚ฌ์šฉ๋œ ๋ฐ์ดํ„ฐ ์„ธํŠธ๋Š” ๋ฌผ๋ก  ์‚ฌ์šฉ์ž ์ง€์ • ๋ฐ์ดํ„ฐ ์„ธํŠธ์™€๋„ ์›ํ™œํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

ํŒ

  • YOLOv8 ๋ชจ๋ธ์€ ํ•™์Šต ์„ค์ •์„ ์ž๋™์œผ๋กœ ๊ธฐ์–ตํ•˜๋ฏ€๋กœ ๋™์ผํ•œ ์ด๋ฏธ์ง€ ํฌ๊ธฐ์™€ ์›๋ณธ ๋ฐ์ดํ„ฐ ์„ธํŠธ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ชจ๋ธ์„ ์‰ฝ๊ฒŒ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. yolo val model=yolov8n.pt ๋˜๋Š” model('yolov8n.pt').val()

์‚ฌ์šฉ ์˜ˆ

COCO8 ๋ฐ์ดํ„ฐ ์„ธํŠธ์—์„œ ํ•™์Šต๋œ YOLOv8n ๋ชจ๋ธ ์ •ํ™•๋„๋ฅผ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค. ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. model ๊ต์œก ์œ ์ง€ data ๋ฐ ์ธ์ˆ˜๋ฅผ ๋ชจ๋ธ ์†์„ฑ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๋ณด๋‚ด๊ธฐ ์ธ์ˆ˜์˜ ์ „์ฒด ๋ชฉ๋ก์€ ์•„๋ž˜์˜ ์ธ์ˆ˜ ์„น์…˜์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์˜ˆ

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Validate the model
metrics = model.val()  # no arguments needed, dataset and settings remembered
metrics.box.map  # map50-95
metrics.box.map50  # map50
metrics.box.map75  # map75
metrics.box.maps  # a list contains map50-95 of each category
yolo detect val model=yolov8n.pt  # val official model
yolo detect val model=path/to/best.pt  # val custom model

YOLO ๋ชจ๋ธ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ๋Œ€ํ•œ ์ธ์ˆ˜

YOLO ๋ชจ๋ธ์„ ๊ฒ€์ฆํ•  ๋•Œ ์—ฌ๋Ÿฌ ์ธ์ˆ˜๋ฅผ ๋ฏธ์„ธ ์กฐ์ •ํ•˜์—ฌ ํ‰๊ฐ€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ธ์ˆ˜๋Š” ์ž…๋ ฅ ์ด๋ฏธ์ง€ ํฌ๊ธฐ, ์ผ๊ด„ ์ฒ˜๋ฆฌ ๋ฐ ์„ฑ๋Šฅ ์ž„๊ณ„๊ฐ’๊ณผ ๊ฐ™์€ ์ธก๋ฉด์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์„ค์ •์„ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉ์ž ์ง€์ •ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๊ฐ ์ธ์ˆ˜์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋ถ„์„์ž…๋‹ˆ๋‹ค.

์ธ์ˆ˜ ์œ ํ˜• ๊ธฐ๋ณธ๊ฐ’ ์„ค๋ช…
data str None ๋ฐ์ดํ„ฐ ์„ธํŠธ ๊ตฌ์„ฑ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ:, coco8.yaml). ์ด ํŒŒ์ผ์—๋Š” ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋ฐ์ดํ„ฐ ๊ฒฝ๋กœ, ํด๋ž˜์Šค ์ด๋ฆ„ ๋ฐ ํด๋ž˜์Šค ์ˆ˜๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
imgsz int 640 ์ž…๋ ฅ ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์ด๋ฏธ์ง€๋Š” ์ฒ˜๋ฆฌํ•˜๊ธฐ ์ „์— ์ด ํฌ๊ธฐ๋กœ ํฌ๊ธฐ๊ฐ€ ์กฐ์ •๋ฉ๋‹ˆ๋‹ค.
batch int 16 ๋ฐฐ์น˜๋‹น ์ด๋ฏธ์ง€ ์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ -1 ๋ฅผ ์„ค์ •ํ•˜๋ฉด GPU ๋ฉ”๋ชจ๋ฆฌ ๊ฐ€์šฉ์„ฑ์— ๋”ฐ๋ผ ์ž๋™์œผ๋กœ ์กฐ์ •๋ฉ๋‹ˆ๋‹ค.
save_json bool False ๋งŒ์•ฝ True๋ฅผ ํด๋ฆญํ•˜๋ฉด ์ถ”๊ฐ€ ๋ถ„์„ ๋˜๋Š” ๋‹ค๋ฅธ ๋„๊ตฌ์™€์˜ ํ†ตํ•ฉ์„ ์œ„ํ•ด ๊ฒฐ๊ณผ๋ฅผ JSON ํŒŒ์ผ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
save_hybrid bool False ๋งŒ์•ฝ True๋ฅผ ํด๋ฆญํ•˜๋ฉด ์›๋ž˜ ์ฃผ์„๊ณผ ์ถ”๊ฐ€ ๋ชจ๋ธ ์˜ˆ์ธก์„ ๊ฒฐํ•ฉํ•œ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋ฒ„์ „์˜ ๋ ˆ์ด๋ธ”์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
conf float 0.001 ํƒ์ง€์— ๋Œ€ํ•œ ์ตœ์†Œ ์‹ ๋ขฐ๋„ ์ž„๊ณ„๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž„๊ณ„๊ฐ’๋ณด๋‹ค ๋‚ฎ์€ ์‹ ๋ขฐ๋„๋ฅผ ๊ฐ€์ง„ ํƒ์ง€๋Š” ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.
iou float 0.6 NMS(๋น„์ตœ๋Œ€ ์–ต์ œ)์— ๋Œ€ํ•œ IoU(๊ต์ฐจ์  ์ดˆ๊ณผ ์—ฐํ•ฉ) ์ž„๊ณ„๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ค‘๋ณต ํƒ์ง€๋ฅผ ์ค„์ด๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
max_det int 300 ์ด๋ฏธ์ง€๋‹น ์ตœ๋Œ€ ๊ฐ์ง€ ํšŸ์ˆ˜๋ฅผ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ๊ณผ๋„ํ•œ ๊ฐ์ง€๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ€์ง‘๋œ ์žฅ๋ฉด์—์„œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
half bool True ๋ฐ˜์ •๋ฐ€๋„(FP16) ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•˜์—ฌ ์ •ํ™•๋„์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์ตœ์†Œํ™”ํ•˜๋ฉด์„œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ค„์ด๊ณ  ์ž ์žฌ์ ์œผ๋กœ ์†๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
device str None ์œ ํšจ์„ฑ ๊ฒ€์‚ฌํ•  ์žฅ์น˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค(cpu, cuda:0๋“ฑ). CPU ๋˜๋Š” GPU ๋ฆฌ์†Œ์Šค๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
dnn bool False ๋งŒ์•ฝ True๋Š” ONNX ๋ชจ๋ธ ์ถ”๋ก ์— OpenCV DNN ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ PyTorch ์ถ”๋ก  ๋ฐฉ๋ฒ•์˜ ๋Œ€์•ˆ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
plots bool False ๋กœ ์„ค์ •ํ•œ ๊ฒฝ์šฐ True๋Š” ๋ชจ๋ธ์˜ ์„ฑ๋Šฅ์„ ์‹œ๊ฐ์ ์œผ๋กœ ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์‹ค์ธก๊ฐ’๊ณผ ์˜ˆ์ธก๊ฐ’์„ ๋น„๊ตํ•œ ํ”Œ๋กฏ์„ ์ƒ์„ฑํ•˜๊ณ  ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
rect bool False ๋งŒ์•ฝ True๋Š” ์ผ๊ด„ ์ฒ˜๋ฆฌ์— ์ง์‚ฌ๊ฐํ˜• ์ถ”๋ก ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒจ๋”ฉ์„ ์ค„์ด๊ณ  ์ž ์žฌ์ ์œผ๋กœ ์†๋„์™€ ํšจ์œจ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.
split str val ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ ์„ธํŠธ ๋ถ„ํ• ์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค(val, test๋˜๋Š” train). ์„ฑ๋Šฅ ํ‰๊ฐ€๋ฅผ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ฐ ์„ค์ •์€ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ํ”„๋กœ์„ธ์Šค์—์„œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•˜๋ฉฐ, YOLO ๋ชจ๋ธ์„ ์‚ฌ์šฉ์ž ์ง€์ •ํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ํŠน์ • ์š”๊ตฌ ์‚ฌํ•ญ๊ณผ ๋ฆฌ์†Œ์Šค์— ๋”ฐ๋ผ ์ด๋Ÿฌํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์กฐ์ •ํ•˜๋ฉด ์ •ํ™•๋„์™€ ์„ฑ๋Šฅ ๊ฐ„์˜ ์ตœ์ƒ์˜ ๊ท ํ˜•์„ ๋‹ฌ์„ฑํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์˜ˆ์ œ

์•„๋ž˜ ์˜ˆ์ œ์—์„œ๋Š” Python ๋ฐ CLI ์—์„œ ์‚ฌ์šฉ์ž ์ง€์ • ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ YOLO ๋ชจ๋ธ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

์˜ˆ

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n.pt")

# Customize validation settings
validation_results = model.val(data="coco8.yaml", imgsz=640, batch=16, conf=0.25, iou=0.6, device="0")
yolo val model=yolov8n.pt data=coco8.yaml imgsz=640 batch=16 conf=0.25 iou=0.6 device=0

์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

Ultralytics ์œผ๋กœ ๋‚ด YOLOv8 ๋ชจ๋ธ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜์š”?

YOLOv8 ๋ชจ๋ธ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋ ค๋ฉด Ultralytics ์—์„œ ์ œ๊ณตํ•˜๋Š” Val ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Python API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ์„ ๋กœ๋“œํ•˜๊ณ  ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n.pt")

# Validate the model
metrics = model.val()
print(metrics.box.map)  # map50-95

๋˜๋Š” ๋ช…๋ น์ค„ ์ธํ„ฐํŽ˜์ด์Šค(CLI)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค:

yolo val model=yolov8n.pt

์ถ”๊ฐ€ ์‚ฌ์šฉ์ž ์ง€์ •์„ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์ธ์ˆ˜๋ฅผ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. imgsz, batch๋ฐ conf Python ๋ฐ CLI ๋ชจ๋“œ์—์„œ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™•์ธ YOLO ๋ชจ๋ธ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ๋Œ€ํ•œ ์ธ์ˆ˜ ์„น์…˜์—์„œ ์ „์ฒด ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ชฉ๋ก์„ ํ™•์ธํ•˜์„ธ์š”.

YOLOv8 ๋ชจ๋ธ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์—์„œ ์–ด๋–ค ๋ฉ”ํŠธ๋ฆญ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‚˜์š”?

YOLOv8 ๋ชจ๋ธ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋Š” ๋ชจ๋ธ ์„ฑ๋Šฅ์„ ํ‰๊ฐ€ํ•˜๊ธฐ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ฃผ์š” ์ง€ํ‘œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค:

  • mAP50(IoU ์ž„๊ณ„๊ฐ’ 0.5์—์„œ ํ‰๊ท  ํ‰๊ท  ์ •๋ฐ€๋„)
  • mAP75(IoU ์ž„๊ณ„๊ฐ’ 0.75์—์„œ ํ‰๊ท  ํ‰๊ท  ์ •๋ฐ€๋„)
  • mAP50-95(0.5 ~ 0.95์˜ ์—ฌ๋Ÿฌ IoU ์ž„๊ณ„๊ฐ’์—์„œ ํ‰๊ท  ํ‰๊ท  ์ •๋ฐ€๋„)

Python API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ด๋Ÿฌํ•œ ๋ฉ”ํŠธ๋ฆญ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

metrics = model.val()  # assumes `model` has been loaded
print(metrics.box.map)  # mAP50-95
print(metrics.box.map50)  # mAP50
print(metrics.box.map75)  # mAP75
print(metrics.box.maps)  # list of mAP50-95 for each category

์™„์ „ํ•œ ์„ฑ๋Šฅ ํ‰๊ฐ€๋ฅผ ์œ„ํ•ด์„œ๋Š” ์ด๋Ÿฌํ•œ ๋ชจ๋“  ์ง€ํ‘œ๋ฅผ ๊ฒ€ํ† ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Val ๋ชจ๋“œ์˜ ์ฃผ์š” ๊ธฐ๋Šฅ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— Ultralytics YOLO ์„ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋–ค ์ด์ ์ด ์žˆ๋‚˜์š”?

์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— Ultralytics YOLO ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ช‡ ๊ฐ€์ง€ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค:

  • ์ •๋ฐ€๋„: YOLOv8 ๋Š” mAP50, mAP75, mAP50-95๋ฅผ ํฌํ•จํ•œ ์ •ํ™•ํ•œ ์„ฑ๋Šฅ ์ง€ํ‘œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ํŽธ์˜์„ฑ: ๋ชจ๋ธ์ด ํ•™์Šต ์„ค์ •์„ ๊ธฐ์–ตํ•˜๋ฏ€๋กœ ๊ฒ€์ฆ์ด ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.
  • ์œ ์—ฐ์„ฑ: ๋™์ผํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ์„ธํŠธ ๋ฐ ์ด๋ฏธ์ง€ ํฌ๊ธฐ์— ๋Œ€ํ•ด ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹: ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋ฉ”ํŠธ๋ฆญ์€ ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ์œ„ํ•ด ๋ชจ๋ธ์„ ๋ฏธ์„ธ ์กฐ์ •ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ด์ ์„ ํ†ตํ•ด ๋ชจ๋ธ์„ ์ฒ ์ €ํ•˜๊ฒŒ ํ‰๊ฐ€ํ•˜๊ณ  ์šฐ์ˆ˜ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์œ„ํ•ด ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์žฅ์ ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๋ ค๋ฉด Ultralytics YOLO ์„น์…˜์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์‚ฌ์šฉ์ž ์ง€์ • ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ YOLOv8 ๋ชจ๋ธ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

์˜ˆ, ์‚ฌ์šฉ์ž ์ง€์ • ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ YOLOv8 ๋ชจ๋ธ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ง€์ • ๋ฐ์ดํ„ฐ์˜ data ์ธ์ˆ˜๋ฅผ ๋ฐ์ดํ„ฐ ์„ธํŠธ ๊ตฌ์„ฑ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ์™€ ํ•จ๊ป˜ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์—๋Š” ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ๋กœ, ํด๋ž˜์Šค ์ด๋ฆ„ ๋ฐ ๊ธฐํƒ€ ๊ด€๋ จ ์„ธ๋ถ€ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Python ์˜ ์˜ˆ์ œ :

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n.pt")

# Validate with a custom dataset
metrics = model.val(data="path/to/your/custom_dataset.yaml")
print(metrics.box.map)  # map50-95

CLI ์‚ฌ์šฉ ์˜ˆ์ œ :

yolo val model=yolov8n.pt data=path/to/your/custom_dataset.yaml

์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์ค‘ ์‚ฌ์šฉ์ž ์ง€์ • ๊ฐ€๋Šฅํ•œ ์˜ต์…˜์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์˜ˆ์ œ ์„น์…˜์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ๋ฅผ YOLOv8 ์— ์žˆ๋Š” JSON ํŒŒ์ผ์— ์ €์žฅํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜์š”?

์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ๋ฅผ JSON ํŒŒ์ผ์— ์ €์žฅํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. save_json ์ธ์ˆ˜๋ฅผ True ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” Python API์™€ CLI ์—์„œ ๋ชจ๋‘ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Python ์˜ ์˜ˆ์ œ :

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n.pt")

# Save validation results to JSON
metrics = model.val(save_json=True)

CLI ์‚ฌ์šฉ ์˜ˆ์ œ :

yolo val model=yolov8n.pt save_json=True

์ด ๊ธฐ๋Šฅ์€ ํŠนํžˆ ์ถ”๊ฐ€ ๋ถ„์„์ด๋‚˜ ๋‹ค๋ฅธ ๋„๊ตฌ์™€์˜ ํ†ตํ•ฉ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ YOLO ๋ชจ๋ธ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์ธ์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.



์ƒ์„ฑ 2023-11-12, ์—…๋ฐ์ดํŠธ 2024-07-04
์ž‘์„ฑ์ž: glenn-jocher (14), Burhan-Q (1), RizwanMunawar (1)

๋Œ“๊ธ€