Ultralytics YOLO27:

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

Ultralytics YOLOv5์™€ ํ•จ๊ป˜ ์‹ค์‹œ๊ฐ„ ๊ฐ์ฒด ํƒ์ง€์˜ ์—ญ๋™์ ์ธ ์„ธ๊ณ„๋กœ ์—ฌ์ •์„ ์‹œ์ž‘ํ•ด ๋ณด์„ธ์š”! ์ด ๊ฐ€์ด๋“œ๋Š” YOLOv5๋ฅผ ๋Šฅ์ˆ™ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ ค๋Š” AI ์• ํ˜ธ๊ฐ€์™€ ์ „๋ฌธ๊ฐ€๋ฅผ ์œ„ํ•œ ์ข…ํ•ฉ์ ์ธ ์ถœ๋ฐœ์ ์œผ๋กœ ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ์„ค์ •๋ถ€ํ„ฐ ๊ณ ๊ธ‰ ํ•™์Šต ๊ธฐ๋ฒ•๊นŒ์ง€ ๋ชจ๋‘ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ๋ฅผ ๋งˆ์น˜๋ฉด ์ตœ์ฒจ๋‹จ ๋”ฅ๋Ÿฌ๋‹ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ YOLOv5๋ฅผ ํ”„๋กœ์ ํŠธ์— ์ž์‹  ์žˆ๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ง€์‹์„ ๊ฐ–์ถ”๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์—”์ง„์— ์‹œ๋™์„ ๊ฑธ๊ณ  YOLOv5์˜ ์„ธ๊ณ„๋กœ ํž˜์ฐจ๊ฒŒ ๋‚˜์•„๊ฐ€ ๋ณด์„ธ์š”!

์„ค์น˜#

YOLOv5 ์ €์žฅ์†Œ๋ฅผ ๋ณต์ œํ•˜๊ณ  ํ™˜๊ฒฝ์„ ์„ค์ •ํ•˜์—ฌ ์ถœ๋ฐœ์„ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ•„์š”ํ•œ ๋ชจ๋“  ์š”๊ตฌ ์‚ฌํ•ญ์ด ์„ค์น˜๋ฉ๋‹ˆ๋‹ค. Python>=3.8.0๊ณผ PyTorch>=1.8์ด ์ค€๋น„๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ์ด๋Ÿฌํ•œ ๊ธฐ๋ฐ˜ ๋„๊ตฌ๋Š” YOLOv5๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

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

PyTorch Hub๋ฅผ ์‚ฌ์šฉํ•œ ์ถ”๋ก #

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

import torch

# Model loading
model = torch.hub.load("ultralytics/yolov5", "yolov5s")  # Can be 'yolov5n' - 'yolov5x6', or 'custom'

# Inference on images
img = "https://ultralytics.com/images/zidane.jpg"  # Can be a file, Path, PIL, OpenCV, numpy, or list of images

# Run inference
results = model(img)

# Display results
results.print()  # or .show(), .save(), .crop(), .pandas(), etc.

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

detect.py์„ ํ™œ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ์†Œ์Šค์—์„œ ๋‹ค๋ชฉ์  ์ถ”๋ก ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์Šคํฌ๋ฆฝํŠธ๋Š” ์ตœ์‹  YOLOv5 ๋ฆด๋ฆฌ์Šค์—์„œ ๋ชจ๋ธ์„ ์ž๋™์œผ๋กœ ๊ฐ€์ ธ์˜ค๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์†์‰ฝ๊ฒŒ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด ์Šคํฌ๋ฆฝํŠธ๋Š” ๋ช…๋ น์ค„ ์‚ฌ์šฉ ๋ฐ 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๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ตœ์ ์˜ ๋ฐฐ์น˜ ํฌ๊ธฐ๋ฅผ ์ž๋™์œผ๋กœ ์ฐพ๋Š” YOLOv5 AutoBatch ๊ธฐ๋Šฅ์— --batch-size -1์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ์„ ๊ทน๋Œ€ํ™”ํ•˜์‹ญ์‹œ์˜ค. ๋‹ค์Œ ๋ฐฐ์น˜ ํฌ๊ธฐ๋Š” 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๋Š” ์ตœ์ฒจ๋‹จ ๊ฐ์ฒด ํƒ์ง€ ๋„๊ตฌ์ผ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์‹œ๊ฐ์  ์ดํ•ด๋ฅผ ํ†ตํ•ด ์šฐ๋ฆฌ๊ฐ€ ์„ธ์ƒ๊ณผ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ๋ณ€ํ™”์‹œํ‚ค๋Š” ๋จธ์‹ ๋Ÿฌ๋‹์˜ ํž˜์„ ๋ณด์—ฌ์ฃผ๋Š” ์ฆ๊ฑฐ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ฉฐ YOLOv5๋ฅผ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ•  ๋•Œ, ์—ฌ๋Ÿฌ๋ถ„์ด ์ปดํ“จํ„ฐ ๋น„์ „ ๋ถ„์•ผ์—์„œ ๋†€๋ผ์šด ์„ฑ๊ณผ๋ฅผ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ  ํ˜๋ช…์˜ ์ตœ์ „์„ ์— ์žˆ๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•˜์„ธ์š”. ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ์–ป๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋น„์ „ ์ „๋ฌธ๊ฐ€์˜ ์ง€์›์ด ํ•„์š”ํ•˜๋‹ค๋ฉด, ๊ฐœ๋ฐœ์ž์™€ ์—ฐ๊ตฌ์ž๋กœ ๊ตฌ์„ฑ๋œ ํ™œ๋ฐœํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์žˆ๋Š” GitHub ์ €์žฅ์†Œ์— ๋ฐฉ๋ฌธํ•ด ๋ณด์„ธ์š”. ๋ฐ์ดํ„ฐ ์„ธํŠธ ๊ด€๋ฆฌ์™€ ์ฝ”๋“œ ์—†์ด ๋ชจ๋ธ์„ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋Š” Ultralytics Platform๊ณผ ๊ฐ™์€ ์ถ”๊ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ดํŽด๋ณด๊ฑฐ๋‚˜, ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์˜๊ฐ์„ ์–ป์œผ๋ ค๋ฉด Solutions ํŽ˜์ด์ง€๋ฅผ ํ™•์ธํ•˜์„ธ์š”. ๊ณ„์† ํƒ์ƒ‰ํ•˜๊ณ , ๊ณ„์† ํ˜์‹ ํ•˜๋ฉฐ, YOLOv5์˜ ๋†€๋ผ์šด ๊ธฐ๋Šฅ์„ ์ฆ๊ฒจ ๋ณด์„ธ์š”. ์ฆ๊ฑฐ์šด ํƒ์ง€ ๋˜์„ธ์š”! ๐ŸŒ ๐Ÿ”

FAQ#

  • ์ถ”๋ก ์—๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 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์€ ๋” ๋น ๋ฅด๊ณ  ์ •ํ™•ํ•˜๋ฉฐ, ํ€ต์Šคํƒ€ํŠธ์— ์„ค๋ช…๋œ ๋™์ผํ•œ pip install ultralytics ์›Œํฌํ”Œ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ NMS ์—†์ด ์—”๋“œํˆฌ์—”๋“œ๋กœ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.

๊ธฐ์—ฌ์ž

๋Œ“๊ธ€