Ultralytics YOLOv8 ๐์ ์ฌ์ฉํ ์๋ ์ถ์
์๋ ์ถ์ ์ด๋ ๋ฌด์์ธ๊ฐ์?
์๋ ์ถ์ ์ด๋ ์ฃผ์ด์ง ์ํฉ์์ ๋ฌผ์ฒด์ ์ด๋ ์๋๋ฅผ ๊ณ์ฐํ๋ ํ๋ก์ธ์ค๋ก, ์ปดํจํฐ ๋น์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค. ์ด์ Ultralytics YOLOv8 ์ ์ฌ์ฉํ๋ฉด ๊ฑฐ๋ฆฌ ๋ฐ ์๊ฐ ๋ฐ์ดํฐ์ ํจ๊ป ๋ฌผ์ฒด ์ถ์ ์ ์ฌ์ฉํ์ฌ ๋ฌผ์ฒด์ ์๋๋ฅผ ๊ณ์ฐํ ์ ์์ผ๋ฉฐ, ์ด๋ ๊ตํต ๋ฐ ๊ฐ์์ ๊ฐ์ ์์ ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์๋ ์ถ์ ์ ์ ํ์ฑ์ ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ํจ์จ์ฑ๊ณผ ์ ๋ขฐ์ฑ์ ์ง์ ์ ์ธ ์ํฅ์ ๋ฏธ์น๋ฏ๋ก ์ง๋ฅํ ์์คํ ๊ณผ ์ค์๊ฐ ์์ฌ ๊ฒฐ์ ํ๋ก์ธ์ค์ ๋ฐ์ ์ ํต์ฌ์ ์ธ ์์์ ๋๋ค.
Watch: ๋ค์์ ์ฌ์ฉํ ์๋ ์ถ์ Ultralytics YOLOv8
๋ธ๋ก๊ทธ ํ์ธ
์๋ ์ถ์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ( Ultralytics YOLOv8 ์ปดํจํฐ ๋น์ ํ๋ก์ ํธ์ ์๋ ์ถ์ )์ ํ์ธํ์ธ์.
์๋ ์์ธก์ ์ฅ์ ์?
- ํจ์จ์ ์ธ ๊ตํต ํต์ : ์ ํํ ์๋ ์์ธก์ ๊ตํต ํ๋ฆ์ ๊ด๋ฆฌํ๊ณ ์์ ์ ๊ฐํํ๋ฉฐ ๋๋ก์ ํผ์ก์ ์ค์ด๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ์ ๋ฐํ ์์จ์ฃผํ ๋ด๋น๊ฒ์ด์ : ์์จ์ฃผํ์ฐจ์ ๊ฐ์ ์์จ ์ฃผํ ์์คํ ์์ ์ ๋ขฐํ ์ ์๋ ์๋ ์์ธก์ ์์ ํ๊ณ ์ ํํ ์ฐจ๋ ๋ด๋น๊ฒ์ด์ ์ ๋ณด์ฅํฉ๋๋ค.
- ๊ฐํ๋ ๋ณด์ ๊ฐ์: ๊ฐ์ ๋ถ์์ ์๋ ์ถ์ ๊ธฐ๋ฅ์ ๋น์ ์์ ์ธ ํ๋์ด๋ ์ ์ฌ์ ์ํ์ ์๋ณํ์ฌ ๋ณด์ ์กฐ์น์ ํจ๊ณผ๋ฅผ ๊ฐ์ ํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
์ค์ ์ ํ๋ฆฌ์ผ์ด์
๊ตํตํธ | ๊ตํตํธ |
---|---|
๋ค์์ ์ฌ์ฉํ์ฌ ๋๋ก์์ ์๋ ์ถ์ Ultralytics YOLOv8 | ๋ค์์ ์ฌ์ฉํ์ฌ ๋ธ๋ฆฌ์ง์์ ์๋ ์ถ์ Ultralytics YOLOv8 |
YOLOv8 ์์ ๋ฅผ ์ฌ์ฉํ ์๋ ์ถ์
import cv2
from ultralytics import YOLO, solutions
model = YOLO("yolov8n.pt")
names = model.model.names
cap = cv2.VideoCapture("path/to/video/file.mp4")
assert cap.isOpened(), "Error reading video file"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
# Video writer
video_writer = cv2.VideoWriter("speed_estimation.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
line_pts = [(0, 360), (1280, 360)]
# Init speed-estimation obj
speed_obj = solutions.SpeedEstimator(
reg_pts=line_pts,
names=names,
view_img=True,
)
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
tracks = model.track(im0, persist=True, show=False)
im0 = speed_obj.estimate_speed(im0, tracks)
video_writer.write(im0)
cap.release()
video_writer.release()
cv2.destroyAllWindows()
์๋๋ ์ถ์ ์น์ ๋๋ค.
์๋๋ ์ถ์ ์น์ด๋ฉฐ ์์ ํ ์ ํํ์ง ์์ ์ ์์ต๋๋ค. ๋ํ GPU ์๋์ ๋ฐ๋ผ ์ถ์ ์น๊ฐ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค.
์ธ์ SpeedEstimator
์ด๋ฆ | ์ ํ | ๊ธฐ๋ณธ๊ฐ | ์ค๋ช |
---|---|---|---|
names |
dict |
None |
ํด๋์ค ์ด๋ฆ ์ฌ์ . |
reg_pts |
list |
[(20, 400), (1260, 400)] |
์๋ ์ถ์ ์ ์ํ ์ง์ญ ํฌ์ธํธ ๋ชฉ๋ก์ ๋๋ค. |
view_img |
bool |
False |
์ฃผ์๊ณผ ํจ๊ป ์ด๋ฏธ์ง๋ฅผ ํ์ํ ์ง ์ฌ๋ถ์ ๋๋ค. |
line_thickness |
int |
2 |
์์ ๋ฐ ํธ๋์ ๊ทธ๋ฆฌ๊ธฐ ์ํ ์ ์ ๋๊ป์ ๋๋ค. |
region_thickness |
int |
5 |
์์ญ ์ ์ ๋๊ป์ ๋๋ค. |
spdl_dist_thresh |
int |
10 |
์๋ ๊ณ์ฐ์ ์ํ ๊ฑฐ๋ฆฌ ์๊ณ๊ฐ์ ๋๋ค. |
์ธ์ model.track
์ด๋ฆ | ์ ํ | ๊ธฐ๋ณธ๊ฐ | ์ค๋ช |
---|---|---|---|
source |
im0 |
None |
์ด๋ฏธ์ง ๋๋ ๋น๋์ค์ ์์ค ๋๋ ํ ๋ฆฌ |
persist |
bool |
False |
ํ๋ ์ ๊ฐ ํธ๋ ์ง์ |
tracker |
str |
botsort.yaml |
์ถ์ ๋ฐฉ๋ฒ '๋ฐ์ดํธํธ๋' ๋๋ '๋ด์ํธ' |
conf |
float |
0.3 |
์ ๋ขฐ ์๊ณ๊ฐ |
iou |
float |
0.5 |
IOU ์๊ณ๊ฐ |
classes |
list |
None |
ํด๋์ค๋ณ๋ก ๊ฒฐ๊ณผ๋ฅผ ํํฐ๋งํฉ๋๋ค(์: classes=0 ๋๋ classes=[0,2,3]). |
verbose |
bool |
True |
๊ฐ์ฒด ์ถ์ ๊ฒฐ๊ณผ ํ์ |
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
Ultralytics YOLOv8 ์ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด ์๋๋ฅผ ์ถ์ ํ๋ ค๋ฉด ์ด๋ป๊ฒ ํ๋์?
Ultralytics YOLOv8 ์ผ๋ก ๋ฌผ์ฒด ์๋๋ฅผ ์ถ์ ํ๋ ค๋ฉด ๋ฌผ์ฒด ๊ฐ์ง ๋ฐ ์ถ์ ๊ธฐ์ ์ ๊ฒฐํฉํด์ผ ํฉ๋๋ค. ๋จผ์ YOLOv8 ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ๊ฐ ํ๋ ์์์ ๋ฌผ์ฒด๋ฅผ ๊ฐ์งํด์ผ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ฌ๋ฌ ํ๋ ์์ ๊ฑธ์ณ ์ด๋ฌํ ๊ฐ์ฒด๋ฅผ ์ถ์ ํ์ฌ ์๊ฐ ๊ฒฝ๊ณผ์ ๋ฐ๋ฅธ ๊ฐ์ฒด์ ์์ง์์ ๊ณ์ฐํฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก ํ๋ ์ ๊ฐ์ ๋ฌผ์ฒด๊ฐ ์ด๋ํ ๊ฑฐ๋ฆฌ์ ํ๋ ์ ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌผ์ฒด์ ์๋๋ฅผ ์ถ์ ํฉ๋๋ค.
์์:
import cv2
from ultralytics import YOLO, solutions
model = YOLO("yolov8n.pt")
names = model.model.names
cap = cv2.VideoCapture("path/to/video/file.mp4")
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
video_writer = cv2.VideoWriter("speed_estimation.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
# Initialize SpeedEstimator
speed_obj = solutions.SpeedEstimator(
reg_pts=[(0, 360), (1280, 360)],
names=names,
view_img=True,
)
while cap.isOpened():
success, im0 = cap.read()
if not success:
break
tracks = model.track(im0, persist=True, show=False)
im0 = speed_obj.estimate_speed(im0, tracks)
video_writer.write(im0)
cap.release()
video_writer.release()
cv2.destroyAllWindows()
์์ธํ ๋ด์ฉ์ ๊ณต์ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ์ฐธ์กฐํ์ธ์.
ํธ๋ํฝ ๊ด๋ฆฌ์์ ์๋ ์์ธก์ ์ํด Ultralytics YOLOv8 ์ ์ฌ์ฉํ๋ฉด ์ด๋ค ์ด์ ์ด ์๋์?
์๋ ์์ธก์ Ultralytics YOLOv8 ์ ์ฌ์ฉํ๋ฉด ํธ๋ํฝ ๊ด๋ฆฌ์ ์๋นํ ์ด์ ์ด ์์ต๋๋ค:
- ํฅ์๋ ์์ ์ฑ: ์ฐจ๋ ์๋๋ฅผ ์ ํํ๊ฒ ์์ธกํ์ฌ ๊ณผ์์ ๊ฐ์งํ๊ณ ๋๋ก ์์ ์ ๊ฐ์ ํฉ๋๋ค.
- ์ค์๊ฐ ๋ชจ๋ํฐ๋ง: YOLOv8 ์ ์ค์๊ฐ ๋ฌผ์ฒด ๊ฐ์ง ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ๊ตํต ํ๋ฆ๊ณผ ํผ์ก์ ํจ๊ณผ์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ์ธ์.
- ํ์ฅ์ฑ: ์ฃ์ง ๋๋ฐ์ด์ค์์ ์๋ฒ์ ์ด๋ฅด๊ธฐ๊น์ง ๋ค์ํ ํ๋์จ์ด ์ค์ ์ ๋ชจ๋ธ์ ๋ฐฐํฌํ์ฌ ๋๊ท๋ชจ ๊ตฌํ์ ์ํ ์ ์ฐํ๊ณ ํ์ฅ ๊ฐ๋ฅํ ์๋ฃจ์ ์ ๋ณด์ฅํฉ๋๋ค.
๋ ๋ง์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์๋ ์ถ์ ์ ์ฅ์ ์ ์ฐธ์กฐํ์ธ์.
YOLOv8 ์ TensorFlow ๋๋ PyTorch ๊ณผ ๊ฐ์ ๋ค๋ฅธ AI ํ๋ ์์ํฌ์ ํตํฉํ ์ ์๋์?
์, YOLOv8 ์ TensorFlow ๋ฐ PyTorch ๊ณผ ๊ฐ์ ๋ค๋ฅธ AI ํ๋ ์์ํฌ์ ํตํฉํ ์ ์์ผ๋ฉฐ Ultralytics ์ YOLOv8 ๋ชจ๋ธ์ ONNX, TensorRT, CoreML ๊ณผ ๊ฐ์ ๋ค์ํ ํ์์ผ๋ก ๋ด๋ณด๋ผ ์ ์๋๋ก ์ง์ํ์ฌ ๋ค๋ฅธ ML ํ๋ ์์ํฌ์์ ์ํํ ์ํธ ์ด์ฉ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
YOLOv8 ๋ชจ๋ธ์ ONNX ํ์์ผ๋ก ๋ด๋ณด๋ด๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ์ธ์:
๋ด๋ณด๋ด๊ธฐ ๊ฐ์ด๋์์ ๋ชจ๋ธ ๋ด๋ณด๋ด๊ธฐ์ ๋ํด ์์ธํ ์์๋ณด์ธ์.
Ultralytics YOLOv8 ์ ์ฌ์ฉํ ์๋ ์์ธก์ ์ผ๋ง๋ ์ ํํฉ๋๊น?
Ultralytics YOLOv8 ์ ์ฌ์ฉํ ์๋ ์ถ์ ์ ํ๋๋ ๊ฐ์ฒด ์ถ์ ์ ํ์ง, ๋์์์ ํด์๋ ๋ฐ ํ๋ ์ ์๋, ํ๊ฒฝ ๋ณ์ ๋ฑ ์ฌ๋ฌ ์์ธ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ์๋ ์ถ์ ๊ธฐ๋ ์ ๋ขฐํ ์ ์๋ ์ถ์ ์น๋ฅผ ์ ๊ณตํ์ง๋ง ํ๋ ์ ์ฒ๋ฆฌ ์๋์ ๊ฐ์ฒด ํ์์ ์ฐจ์ด๋ก ์ธํด 100% ์ ํํ์ง ์์ ์ ์์ต๋๋ค.
์ฐธ๊ณ : ํญ์ ์ค์ฐจ ๋ฒ์๋ฅผ ๊ณ ๋ คํ๊ณ ๊ฐ๋ฅํ๋ฉด ์ค์ธก ๋ฐ์ดํฐ๋ก ์ถ์ ์น๋ฅผ ๊ฒ์ฆํ์ธ์.
์ถ๊ฐ ์ ํ๋ ํฅ์ ํ์ ํ์ธํ๋ ค๋ฉด ์ธ์ SpeedEstimator
์น์
.
TensorFlow ๊ฐ์ฒด ๊ฐ์ง API์ ๊ฐ์ ๋ค๋ฅธ ๊ฐ์ฒด ๊ฐ์ง ๋ชจ๋ธ ๋์ Ultralytics YOLOv8 ์ ์ ํํ๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์?
Ultralytics YOLOv8 ๋ TensorFlow ๊ฐ์ฒด ๊ฐ์ง API์ ๊ฐ์ ๋ค๋ฅธ ๊ฐ์ฒด ๊ฐ์ง ๋ชจ๋ธ์ ๋นํด ๋ช ๊ฐ์ง ์ฅ์ ์ ์ ๊ณตํฉ๋๋ค:
- ์ค์๊ฐ ์ฑ๋ฅ: YOLOv8 ์ ์ค์๊ฐ ๊ฐ์ง์ ์ต์ ํ๋์ด ๋น ๋ฅธ ์๋์ ์ ํ์ฑ์ ์ ๊ณตํฉ๋๋ค.
- ์ฌ์ฉ ํธ์์ฑ: ์ฌ์ฉ์ ์นํ์ ์ธ ์ธํฐํ์ด์ค๋ก ์ค๊ณ๋ YOLOv8 ๋ ๋ชจ๋ธ ๊ต์ก ๋ฐ ๋ฐฐํฌ๋ฅผ ๊ฐ์ํํฉ๋๋ค.
- ๋ค๋ชฉ์ ์ฑ: ๋ฌผ์ฒด ๊ฐ์ง, ์ธ๋ถํ, ํฌ์ฆ ์ถ์ ๋ฑ ๋ค์ํ ์์ ์ ์ง์ํฉ๋๋ค.
- ์ปค๋ฎค๋ํฐ ๋ฐ ์ง์: YOLOv8 ์ ํ๋ฐํ ์ปค๋ฎค๋ํฐ์ ๊ด๋ฒ์ํ ๋ฌธ์๋ก ๊ฐ๋ฐ์๊ฐ ํ์ํ ๋ฆฌ์์ค๋ฅผ ํ๋ณดํ ์ ์๋๋ก ์ง์ํฉ๋๋ค.
YOLOv8 ์ ํํ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์์ธํ ๋ชจ๋ธ ํ์ด์ง๋ฅผ ์ฐธ์กฐํ์ธ์.
2024-01-05 ์์ฑ, 2024-07-05 ์ ๋ฐ์ดํธ๋จ
์์ฑ์: glenn-jocher (7), IvorZhu331 (1), RizwanMunawar (2), Burhan-Q (1), AyushExel (1)