Ultralytics YOLO11 ๐์ ์ฌ์ฉํ ์ธ์คํด์ค ์ธ๋ถํ ๋ฐ ์ถ์
์ธ์คํด์ค ์ธ๋ถํ๋ ๋ฌด์์ธ๊ฐ์?
Ultralytics YOLO11 ์ธ์คํด์ค ๋ถํ ์ ์ด๋ฏธ์ง์์ ๊ฐ๋ณ ๊ฐ์ฒด๋ฅผ ์๋ณํ๊ณ ์ค๊ณฝ์ ๊ทธ๋ ค ๊ณต๊ฐ ๋ถํฌ์ ๋ํ ์์ธํ ์ดํด๋ฅผ ์ ๊ณตํฉ๋๋ค. ์๋งจํฑ ์ธ๋ถํ์๋ ๋ฌ๋ฆฌ ๊ฐ ๊ฐ์ฒด์ ๊ณ ์ ํ ๋ ์ด๋ธ์ ์ง์ ํ๊ณ ์ ํํ๊ฒ ๋ฌ์ฌํ๋ฏ๋ก ๊ฐ์ฒด ๊ฐ์ง ๋ฐ ์๋ฃ ์์๊ณผ ๊ฐ์ ์์ ์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
Ultralytics ํจํค์ง์์ ์ฌ์ฉํ ์ ์๋ ์ธ์คํด์ค ์ธ๋ถํ ์ถ์ ์๋ ๋ ๊ฐ์ง ์ ํ์ด ์์ต๋๋ค:
-
ํด๋์ค ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ์ธ์คํด์ค ์ธ๋ถํ: ๊ฐ ํด๋์ค ๊ฐ์ฒด์๋ ์๊ฐ์ ์ผ๋ก ๋ช ํํ๊ฒ ๊ตฌ๋ถํ ์ ์๋๋ก ๊ณ ์ ํ ์์์ด ํ ๋น๋ฉ๋๋ค.
-
์ค๋ธ์ ํธ ํธ๋์ ์ฌ์ฉํ ์ธ์คํด์ค ์ธ๋ถํ: ๋ชจ๋ ํธ๋์ ๊ณ ์ ํ ์์์ผ๋ก ํ์๋์ด ์ฝ๊ฒ ์๋ณํ๊ณ ์ถ์ ํ ์ ์์ต๋๋ค.
Watch: ์ค๋ธ์ ํธ ์ถ์ ์ ์ฌ์ฉํ ์ธ์คํด์ค ์ธ๋ถํ Ultralytics YOLO11
์ํ
์ธ์คํด์ค ์ธ๋ถํ | ์ธ์คํด์ค ์ธ๋ถํ + ์ค๋ธ์ ํธ ์ถ์ |
---|---|
Ultralytics ์ธ์คํด์ค ์ธ๋ถํ ๐ | Ultralytics ์ค๋ธ์ ํธ ์ถ์ ์ ํตํ ์ธ์คํด์ค ์ธ๋ถํ ๐ฅ. |
์ธ์คํด์ค ์ธ๋ถํ ๋ฐ ์ถ์
import cv2
from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors
model = YOLO("yolo11n-seg.pt") # segmentation model
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))
out = cv2.VideoWriter("instance-segmentation.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))
while True:
ret, im0 = cap.read()
if not ret:
print("Video frame is empty or video processing has been successfully completed.")
break
results = model.predict(im0)
annotator = Annotator(im0, line_width=2)
if results[0].masks is not None:
clss = results[0].boxes.cls.cpu().tolist()
masks = results[0].masks.xy
for mask, cls in zip(masks, clss):
color = colors(int(cls), True)
txt_color = annotator.get_txt_color(color)
annotator.seg_bbox(mask=mask, mask_color=color, label=names[int(cls)], txt_color=txt_color)
out.write(im0)
cv2.imshow("instance-segmentation", im0)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
out.release()
cap.release()
cv2.destroyAllWindows()
import cv2
from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors
model = YOLO("yolo11n-seg.pt") # segmentation model
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))
out = cv2.VideoWriter("instance-segmentation-object-tracking.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))
while True:
ret, im0 = cap.read()
if not ret:
print("Video frame is empty or video processing has been successfully completed.")
break
annotator = Annotator(im0, line_width=2)
results = model.track(im0, persist=True)
if results[0].boxes.id is not None and results[0].masks is not None:
masks = results[0].masks.xy
track_ids = results[0].boxes.id.int().cpu().tolist()
for mask, track_id in zip(masks, track_ids):
color = colors(int(track_id), True)
txt_color = annotator.get_txt_color(color)
annotator.seg_bbox(mask=mask, mask_color=color, label=str(track_id), txt_color=txt_color)
out.write(im0)
cv2.imshow("instance-segmentation-object-tracking", im0)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
out.release()
cap.release()
cv2.destroyAllWindows()
seg_bbox
์ธ์
์ด๋ฆ | ์ ํ | ๊ธฐ๋ณธ๊ฐ | ์ค๋ช |
---|---|---|---|
mask |
array |
None |
์ธ๋ถํ ๋ง์คํฌ ์ขํ |
mask_color |
RGB |
(255, 0, 255) |
๋ชจ๋ ์ธ๊ทธ๋จผํธ ์์์ ๋ํ ๋ง์คํฌ ์์ |
label |
str |
None |
์ธ๊ทธ๋จผํธ ๊ฐ์ฒด์ ๋ํ ๋ ์ด๋ธ |
txt_color |
RGB |
None |
์ธ๊ทธ๋จผํธ ๋ฐ ์ถ์ ๋์์ ๋ ์ด๋ธ ์์ |
์ฐธ๊ณ
๋ฌธ์ ์ฌํญ์ด ์์ผ์๋ฉด Ultralytics ์ด์ ์น์ ๋๋ ์๋์ ์ธ๊ธ๋ ํ ๋ก ์น์ ์ ์์ ๋กญ๊ฒ ์ง๋ฌธ์ ๊ฒ์ํด ์ฃผ์ธ์.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
Ultralytics YOLO11 ์ ์ฌ์ฉํ์ฌ ์ธ์คํด์ค ์ธ๋ถํ๋ฅผ ์ํํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ๋์?
Ultralytics YOLO11 ์ ์ฌ์ฉํ์ฌ ์ธ์คํด์ค ์ธ๊ทธ๋จผํ ์ด์ ์ ์ํํ๋ ค๋ฉด YOLO ๋ชจ๋ธ์ YOLO11 ์ ์ธ๊ทธ๋จผํ ์ด์ ๋ฒ์ ์ผ๋ก ์ด๊ธฐํํ๊ณ ์ด๋ฅผ ํตํด ๋น๋์ค ํ๋ ์์ ์ฒ๋ฆฌํฉ๋๋ค. ๋ค์์ ๊ฐ๋จํ ์ฝ๋ ์์์ ๋๋ค:
์
import cv2
from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors
model = YOLO("yolo11n-seg.pt") # segmentation model
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))
out = cv2.VideoWriter("instance-segmentation.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))
while True:
ret, im0 = cap.read()
if not ret:
break
results = model.predict(im0)
annotator = Annotator(im0, line_width=2)
if results[0].masks is not None:
clss = results[0].boxes.cls.cpu().tolist()
masks = results[0].masks.xy
for mask, cls in zip(masks, clss):
annotator.seg_bbox(mask=mask, mask_color=colors(int(cls), True), det_label=model.model.names[int(cls)])
out.write(im0)
cv2.imshow("instance-segmentation", im0)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
out.release()
cap.release()
cv2.destroyAllWindows()
์ธ์คํด์ค ์ธ๋ถํ์ ๋ํ ์์ธํ ๋ด์ฉ์ Ultralytics YOLO11 ๊ฐ์ด๋์์ ํ์ธํ์ธ์.
Ultralytics YOLO11 ์์ ์ธ์คํด์ค ์ธ๋ถํ์ ๊ฐ์ฒด ์ถ์ ์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ์?
์ธ์คํด์ค ๋ถํ ์ ์ด๋ฏธ์ง ๋ด์ ๊ฐ๋ณ ๊ฐ์ฒด๋ฅผ ์๋ณํ๊ณ ์ค๊ณฝ์ ๊ทธ๋ ค ๊ฐ ๊ฐ์ฒด์ ๊ณ ์ ํ ๋ ์ด๋ธ๊ณผ ๋ง์คํฌ๋ฅผ ๋ถ์ฌํฉ๋๋ค. ๊ฐ์ฒด ์ถ์ ์ ์ด๋ฅผ ํ์ฅํ์ฌ ๋น๋์ค ํ๋ ์ ์ ์ฒด์ ๊ฑธ์ณ ๊ฐ์ฒด์ ์ผ๊ด๋ ๋ ์ด๋ธ์ ํ ๋นํ์ฌ ์๊ฐ์ด ์ง๋๋ ๋์ผํ ๊ฐ์ฒด๋ฅผ ์ง์์ ์ผ๋ก ์ถ์ ํ ์ ์๋๋ก ํฉ๋๋ค. Ultralytics YOLO11 ๋ฌธ์์์ ์ฐจ์ด์ ์ ๋ํด ์์ธํ ์์๋ณด์ธ์.
์๋ฅผ ๋ค์ด ์ธ๋ถํ ๋ฐ ์ถ์ ์ Mask R-CNN ๋๋ Faster R-CNN๊ณผ ๊ฐ์ ๋ค๋ฅธ ๋ชจ๋ธ๋ณด๋ค Ultralytics YOLO11 ์ ์ฌ์ฉํด์ผ ํ๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์?
Ultralytics YOLO11 ์ ์ค์๊ฐ ์ฑ๋ฅ, ๋ฐ์ด๋ ์ ํ๋, ์ฌ์ฉ ํธ์์ฑ์ ์ ๊ณตํ๋ฉฐ, ๋ค๋ฅธ ๋ชจ๋ธ์ธ Mask R-CNN์ด๋ Faster R-CNN๊ณผ ๋น๊ตํด๋ ์์์ด ์์ต๋๋ค. YOLO11 ์ Ultralytics ํ๋ธ์ ์ํํ๊ฒ ํตํฉ๋์ด ์ฌ์ฉ์๊ฐ ๋ชจ๋ธ, ๋ฐ์ดํฐ์ธํธ, ํ๋ จ ํ์ดํ๋ผ์ธ์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋๋ก ์ง์ํฉ๋๋ค. Ultralytics ๋ธ๋ก๊ทธ์์ YOLO11 ์ ์ด์ ์ ๋ํด ์์ธํ ์์๋ณด์ธ์.
Ultralytics YOLO11 ์ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด ์ถ์ ์ ๊ตฌํํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ๋์?
๊ฐ์ฒด ์ถ์ ์ ๊ตฌํํ๋ ค๋ฉด model.track
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ๊ฐ์ฒด์ ID๊ฐ ํ๋ ์ ๊ฐ์ ์ผ๊ด๋๊ฒ ํ ๋น๋๋๋ก ํฉ๋๋ค. ์๋๋ ๊ฐ๋จํ ์์์
๋๋ค:
์
import cv2
from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors
model = YOLO("yolo11n-seg.pt") # segmentation model
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))
out = cv2.VideoWriter("instance-segmentation-object-tracking.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))
while True:
ret, im0 = cap.read()
if not ret:
break
annotator = Annotator(im0, line_width=2)
results = model.track(im0, persist=True)
if results[0].boxes.id is not None and results[0].masks is not None:
masks = results[0].masks.xy
track_ids = results[0].boxes.id.int().cpu().tolist()
for mask, track_id in zip(masks, track_ids):
annotator.seg_bbox(mask=mask, mask_color=colors(track_id, True), track_label=str(track_id))
out.write(im0)
cv2.imshow("instance-segmentation-object-tracking", im0)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
out.release()
cap.release()
cv2.destroyAllWindows()
์ธ์คํด์ค ์ธ๋ถํ ๋ฐ ์ถ์ ์น์ ์์ ์์ธํ ์์๋ณด์ธ์.
Ultralytics ์์ ์ ๊ณตํ๋ ๋ฐ์ดํฐ ์ธํธ ์ค ์ธ์คํด์ค ์ธ๋ถํ ๋ฐ ์ถ์ ์ ์ํ YOLO11 ๋ชจ๋ธ ํ์ต์ ์ ํฉํ ๊ฒ์ด ์๋์?
์, Ultralytics ์์๋ ์ธ๋ถํ ๋ฐ ์ถ์ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ํฌํจํ์ฌ YOLO11 ๋ชจ๋ธ ํ๋ จ์ ์ ํฉํ ์ฌ๋ฌ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ์ดํฐ ์ธํธ ์์ , ๊ตฌ์กฐ ๋ฐ ์ฌ์ฉ ์ง์นจ์ Ultralytics ๋ฐ์ดํฐ ์ธํธ ๋ฌธ์์์ ํ์ธํ ์ ์์ต๋๋ค.