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 dependenciesPyTorch 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๋ฅผ ์ปดํจํฐ ๋น์ ํ๋ก์ ํธ์ ์ ์ฉํ ๋ 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์ํฌํ๋ก๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋๊ธ
์ง๋ฌธ์ ํ๊ฑฐ๋ ๊ฒฐ๊ณผ๋ฅผ ๊ณต์ ํ๊ฑฐ๋ ๋ค๋ฅธ ์ฌ๋์ ๋์์ฃผ์ธ์.