Ultralytics YOLO27: ๋Œ€๊ธฐ์ž ๋ช…๋‹จ์— ๋“ฑ๋กํ•ด ์ฃผ์‹ญ์‹œ์˜ค.
์‹œ์ž‘ํ•˜๊ธฐ

YOLOv5 ๋น ๋ฅธ ์‹œ์ž‘ ๐Ÿš€#

์ด ๊ฐ€์ด๋“œ๋Š” Ultralytics YOLOv5๋กœ ์‹ค์‹œ๊ฐ„ ๊ฐ์ฒด ํƒ์ง€๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ์•ˆ๋‚ด์„œ์ž…๋‹ˆ๋‹ค. ์„ค์น˜, PyTorch Hub ๋ฐ detect.py์„ ์‚ฌ์šฉํ•œ ์ถ”๋ก , ํ•™์Šต์„ ๋‹ค๋ฃจ๋ฏ€๋กœ ์ด ๋”ฅ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ์ž์ฒด ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ค์น˜#

YOLOv5 ์ €์žฅ์†Œ๋ฅผ ๋ณต์ œํ•˜๊ณ  Python>=3.8.0 ๋ฐ PyTorch>=1.8์ด ์„ค์น˜๋œ ํ™˜๊ฒฝ์—์„œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

git clone https://github.com/ultralytics/yolov5 # clone repository
cd yolov5
pip install -r requirements.txt # install dependencies

PyTorch Hub๋กœ ์ถ”๋ก ํ•˜๊ธฐ#

PyTorch Hub๋ฅผ ํ†ตํ•ด YOLOv5 ์ถ”๋ก ์„ ์‹คํ–‰ํ•˜๋ฉด ์ตœ์‹  YOLOv5 ๋ฆด๋ฆฌ์Šค์—์„œ ๋ชจ๋ธ์„ ์ž๋™์œผ๋กœ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ๋ชจ๋ธ ๋กœ๋“œ์™€ ์‹คํ–‰์— PyTorch๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์˜ˆ์ธก์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import torch

# ๋ชจ๋ธ ๋กœ๋“œ
model = torch.hub.load("ultralytics/yolov5", "yolov5s")  # 'yolov5n'๋ถ€ํ„ฐ 'yolov5x6'๊นŒ์ง€ ๋˜๋Š” 'custom'์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# ์ด๋ฏธ์ง€ ์ถ”๋ก 
img = "https://ultralytics.com/images/zidane.jpg"  # ํŒŒ์ผ, Path, PIL, OpenCV, numpy ๋˜๋Š” ์ด๋ฏธ์ง€ ๋ชฉ๋ก์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# ์ถ”๋ก  ์‹คํ–‰
results = model(img)

# ๊ฒฐ๊ณผ ํ‘œ์‹œ
results.print()  # ๋˜๋Š” .show(), .save(), .crop(), .pandas() ๋“ฑ์ž…๋‹ˆ๋‹ค.

detect.py๋ฅผ ์‚ฌ์šฉํ•œ ์ถ”๋ก #

๋‹ค์–‘ํ•œ ์ž…๋ ฅ ์†Œ์Šค์— ๋Œ€ํ•œ ์ถ”๋ก ์—๋Š” detect.py์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ตœ์‹  YOLOv5 ๋ฆด๋ฆฌ์Šค์—์„œ ๋ชจ๋ธ์„ ์ž๋™์œผ๋กœ ๊ฐ€์ ธ์˜ค๊ณ  ๊ฒฐ๊ณผ๋ฅผ runs/detect์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด ์Šคํฌ๋ฆฝํŠธ๋Š” ๋ช…๋ น์ค„์—์„œ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ YOLOv5๋ฅผ ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์— ํ†ตํ•ฉํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•˜๋ฉฐ, ์ด๋ฏธ์ง€, ๋™์˜์ƒ, ๋””๋ ‰ํ„ฐ๋ฆฌ, ์›น์บ , ๋ผ์ด๋ธŒ ์ŠคํŠธ๋ฆผ๊นŒ์ง€ ๋‹ค์–‘ํ•œ ์ž…๋ ฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

python detect.py --weights yolov5s.pt --source 0                              # webcam
python detect.py --weights yolov5s.pt --source image.jpg                      # image
python detect.py --weights yolov5s.pt --source video.mp4                      # video
python detect.py --weights yolov5s.pt --source screen                         # screenshot
python detect.py --weights yolov5s.pt --source path/                          # directory
python detect.py --weights yolov5s.pt --source list.txt                       # list of images
python detect.py --weights yolov5s.pt --source list.streams                   # list of streams
python detect.py --weights yolov5s.pt --source 'path/*.jpg'                   # glob pattern
python detect.py --weights yolov5s.pt --source 'https://youtu.be/LNwODJXcvt4' # YouTube video
python detect.py --weights yolov5s.pt --source 'rtsp://example.com/media.mp4' # RTSP, RTMP, HTTP stream

ํ•™์Šต#

์•„๋ž˜ ํ•™์Šต ์ง€์นจ์— ๋”ฐ๋ผ YOLOv5 COCO ๋ฐ์ดํ„ฐ์…‹ ๋ฒค์น˜๋งˆํฌ๋ฅผ ์žฌํ˜„ํ•˜์„ธ์š”. ํ•„์š”ํ•œ ๋ชจ๋ธ๊ณผ ๋ฐ์ดํ„ฐ์…‹(coco128.yaml ๋˜๋Š” ์ „์ฒด coco.yaml ๋“ฑ)์€ ์ตœ์‹  YOLOv5 ๋ฆด๋ฆฌ์Šค์—์„œ ์ง์ ‘ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. V100 GPU์—์„œ YOLOv5n/s/m/l/x๋ฅผ ํ•™์Šตํ•˜๋Š” ๋ฐ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ๊ฐ 1/2/4/6/8์ผ์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค(๋ฉ€ํ‹ฐ GPU ํ•™์Šต์„ ์‚ฌ์šฉํ•˜๋ฉด ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค). ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ๋†’์€ --batch-size๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ --batch-size -1์„ ์‚ฌ์šฉํ•ด YOLOv5 AutoBatch ๊ธฐ๋Šฅ์œผ๋กœ ์ตœ์ ์˜ ๋ฐฐ์น˜ ํฌ๊ธฐ๋ฅผ ์ž๋™์œผ๋กœ ์ฐพ์œผ๋ฉด ์„ฑ๋Šฅ์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ฐฐ์น˜ ํฌ๊ธฐ๋Š” V100-16GB GPU์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ ๊ตฌ์„ฑ ํŒŒ์ผ(*.yaml)์— ๊ด€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„ํ‚คํ…์ฒ˜ ์š”์•ฝ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

# Train YOLOv5n on COCO128 for 3 epochs
python train.py --data coco128.yaml --epochs 3 --weights yolov5n.pt --batch-size 128

# Train YOLOv5s on COCO for 300 epochs
python train.py --data coco.yaml --epochs 300 --weights '' --cfg yolov5s.yaml --batch-size 64

# Train YOLOv5m on COCO for 300 epochs
python train.py --data coco.yaml --epochs 300 --weights '' --cfg yolov5m.yaml --batch-size 40

# Train YOLOv5l on COCO for 300 epochs
python train.py --data coco.yaml --epochs 300 --weights '' --cfg yolov5l.yaml --batch-size 24

# Train YOLOv5x on COCO for 300 epochs
python train.py --data coco.yaml --epochs 300 --weights '' --cfg yolov5x.yaml --batch-size 16
YOLOv5 training curves for COCO dataset

YOLOv5๋ฅผ ์ปดํ“จํ„ฐ ๋น„์ „ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•  ๋•Œ GitHub ์ €์žฅ์†Œ์—์„œ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž ๋ฐ ์—ฐ๊ตฌ์ž์—๊ฒŒ ์งˆ๋ฌธํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ Ultralytics Platform์„ ์‚ฌ์šฉํ•ด ์ฝ”๋“œ ์—†์ด ๋ฐ์ดํ„ฐ์…‹๊ณผ ๋ชจ๋ธ์„ ๊ด€๋ฆฌํ•˜๊ณ  ํ•™์Šตํ•˜๊ฑฐ๋‚˜, ์‹ค์ œ ์ ์šฉ ์‚ฌ๋ก€๋ฅผ ์‚ดํŽด๋ณด๋ ค๋ฉด ์†”๋ฃจ์…˜ ํŽ˜์ด์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

  • ์ถ”๋ก ์—๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. PyTorch Hub๋Š” torch.hub.load("ultralytics/yolov5", "yolov5s")์„ ์‚ฌ์šฉํ•ด ํ•„์š”ํ•  ๋•Œ ์ฝ”๋“œ์™€ ๊ฐ€์ค‘์น˜๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. train.py, val.py, detect.py, export.py ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์ €์žฅ์†Œ๋ฅผ ๋ณต์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์†๋„์™€ ์ •ํ™•๋„์˜ ๊ท ํ˜•์ด ๊ฐ€์žฅ ์ข‹์€ ๋ชจ๋ธ์ด yolov5s.pt์ž…๋‹ˆ๋‹ค. ์—ฃ์ง€ ๋””๋ฐ”์ด์Šค์—๋Š” yolov5n.pt์„ ์‚ฌ์šฉํ•˜๊ณ , ์†๋„๋ณด๋‹ค ์ •ํ™•๋„๊ฐ€ ์ค‘์š”ํ•˜๋‹ค๋ฉด yolov5m.pt๋ถ€ํ„ฐ yolov5x.pt๊นŒ์ง€ ์‚ฌ์šฉํ•˜์„ธ์š”. 1280ํ”ฝ์…€๋กœ ํ•™์Šตํ•˜๋ ค๋ฉด yolov5s6.pt์™€ ๊ฐ™์€ P6 ๋ณ€ํ˜• ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ „์ฒด ๋ชฉ๋ก์€ ์‚ฌ์ „ ํ•™์Šต ์ฒดํฌํฌ์ธํŠธ ํ‘œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

  • ์ด๋ฏธ์ง€์™€ YOLO ํ˜•์‹ ๋ ˆ์ด๋ธ”์„ ๊ฐ๊ฐ images/ ๋ฐ labels/ ํด๋”์— ๋„ฃ๊ณ , dataset.yaml์— ์„ค๋ช…์„ ์ž‘์„ฑํ•œ ๋‹ค์Œ python train.py --data dataset.yaml --weights yolov5s.pt์„ ์‹คํ–‰ํ•˜์„ธ์š”. ์‚ฌ์šฉ์ž ์ง€์ • ๋ฐ์ดํ„ฐ ํ•™์Šต ํŠœํ† ๋ฆฌ์–ผ์—์„œ ๊ฐ ๋‹จ๊ณ„๋ฅผ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

  • YOLOv5๋Š” ์•ˆ์ •์ ์ด๋ฉฐ ๋…๋ฆฝ ์ €์žฅ์†Œ์—์„œ ๊ณ„์† ์™„์ „ํžˆ ์ง€์›๋˜์ง€๋งŒ, ๋” ์ด์ƒ ์ตœ์‹  ๋ชจ๋ธ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์ž‘์—…์—๋Š” ultralytics ํŒจํ‚ค์ง€์˜ YOLO26์ด ๋” ๋น ๋ฅด๊ณ  ์ •ํ™•ํ•˜๋ฉฐ, NMS ์—†์ด ์—”๋“œํˆฌ์—”๋“œ๋กœ ๋‚ด๋ณด๋‚ด๊ณ  ๋น ๋ฅธ ์‹œ์ž‘์— ์„ค๋ช…๋œ ๊ฒƒ๊ณผ ๋™์ผํ•œ pip install ultralytics ์›Œํฌํ”Œ๋กœ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์—ฌ์ž

๋Œ“๊ธ€

์งˆ๋ฌธ์„ ํ•˜๊ฑฐ๋‚˜ ๊ฒฐ๊ณผ๋ฅผ ๊ณต์œ ํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์„ ๋„์™€์ฃผ์„ธ์š”.