Ultralytics YOLO11 ๐์ ์ฌ์ฉํ ์ค๋ธ์ ํธ ๋ธ๋ฌ๋ง
์ค๋ธ์ ํธ ๋ธ๋ฌ๋ ๋ฌด์์ธ๊ฐ์?
๊ฐ์ฒด ํ๋ฆฌ๊ฒ ์ฒ๋ฆฌ Ultralytics YOLO11 ๋ ์ด๋ฏธ์ง ๋๋ ๋์์์์ ๊ฐ์ง๋ ํน์ ๊ฐ์ฒด์ ๋ธ๋ฌ ํจ๊ณผ๋ฅผ ์ ์ฉํ๋ ๊ธฐ๋ฅ์ ๋๋ค. ์ด๋ YOLO11 ๋ชจ๋ธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์ฃผ์ด์ง ์ฅ๋ฉด ๋ด์์ ๊ฐ์ฒด๋ฅผ ์๋ณํ๊ณ ์กฐ์ํ ์ ์์ต๋๋ค.
Watch: ์ค๋ธ์ ํธ ๋ธ๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ Ultralytics YOLO11
์ค๋ธ์ ํธ ๋ธ๋ฌ์ ์ฅ์ ์?
- ๊ฐ์ธ์ ๋ณด ๋ณดํธ: ๋ฌผ์ฒด ํ๋ฆผ ํจ๊ณผ๋ ์ด๋ฏธ์ง๋ ๋์์์์ ๋ฏผ๊ฐํ ์ ๋ณด๋ ๊ฐ์ธ ์๋ณ ์ ๋ณด๋ฅผ ์จ๊ฒจ ๊ฐ์ธ ์ ๋ณด๋ฅผ ๋ณดํธํ๋ ๋ฐ ํจ๊ณผ์ ์ธ ๋๊ตฌ์ ๋๋ค.
- ์ ํ์ ์ด์ : YOLO11 ์ ์ฌ์ฉํ๋ฉด ์ ํ์ ์ผ๋ก ํ๋ฆฌ๊ฒ ์ฒ๋ฆฌํ์ฌ ์ฌ์ฉ์๊ฐ ํน์ ๊ฐ์ฒด๋ฅผ ๋์์ผ๋ก ์ง์ ํ ์ ์์ผ๋ฏ๋ก ๊ฐ์ธ์ ๋ณด ๋ณดํธ์ ๊ด๋ จ ์๊ฐ ์ ๋ณด ์ ์ง ๊ฐ์ ๊ท ํ์ ์ ์งํ ์ ์์ต๋๋ค.
- ์ค์๊ฐ ์ฒ๋ฆฌ: YOLO11 ์ ํจ์จ์ฑ์ ์ค์๊ฐ์ผ๋ก ๋ฌผ์ฒด๋ฅผ ํ๋ฆฌ๊ฒ ์ฒ๋ฆฌํ ์ ์์ด ๋์ ํ๊ฒฝ์์ ์ฆ๊ฐ์ ์ธ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ ๊ฐํ๊ฐ ํ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํฉ๋๋ค.
YOLO11 ์ ์ฌ์ฉํ ์ค๋ธ์ ํธ ํ๋ฆผ ์์
import cv2
from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors
model = YOLO("yolo11n.pt")
names = 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))
# Blur ratio
blur_ratio = 50
# Video writer
video_writer = cv2.VideoWriter("object_blurring_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
results = model.predict(im0, show=False)
boxes = results[0].boxes.xyxy.cpu().tolist()
clss = results[0].boxes.cls.cpu().tolist()
annotator = Annotator(im0, line_width=2, example=names)
if boxes is not None:
for box, cls in zip(boxes, clss):
annotator.box_label(box, color=colors(int(cls), True), label=names[int(cls)])
obj = im0[int(box[1]) : int(box[3]), int(box[0]) : int(box[2])]
blur_obj = cv2.blur(obj, (blur_ratio, blur_ratio))
im0[int(box[1]) : int(box[3]), int(box[0]) : int(box[2])] = blur_obj
cv2.imshow("ultralytics", im0)
video_writer.write(im0)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
cap.release()
video_writer.release()
cv2.destroyAllWindows()
์ธ์ model.predict
์ธ์ | ์ ํ | ๊ธฐ๋ณธ๊ฐ | ์ค๋ช |
---|---|---|---|
source |
str |
'ultralytics/assets' |
์ถ๋ก ํ ๋ฐ์ดํฐ ์์ค๋ฅผ ์ง์ ํฉ๋๋ค. ์ด๋ฏธ์ง ๊ฒฝ๋ก, ๋์์ ํ์ผ, ๋๋ ํ ๋ฆฌ, URL ๋๋ ์ค์๊ฐ ํผ๋์ฉ ๋๋ฐ์ด์ค ID๊ฐ ๋ ์ ์์ต๋๋ค. ๋ค์ํ ํ์๊ณผ ์์ค๋ฅผ ์ง์ํ๋ฏ๋ก ๋ค์ํ ์ ํ์ ์ ๋ ฅ์ ์ ์ฐํ๊ฒ ์ ์ฉํ ์ ์์ต๋๋ค. |
conf |
float |
0.25 |
ํ์ง์ ๋ํ ์ต์ ์ ๋ขฐ๋ ์๊ณ๊ฐ์ ์ค์ ํฉ๋๋ค. ์ด ์๊ณ๊ฐ๋ณด๋ค ๋ฎ์ ์ ๋ขฐ๋๋ก ํ์ง๋ ๊ฐ์ฒด๋ ๋ฌด์๋ฉ๋๋ค. ์ด ๊ฐ์ ์กฐ์ ํ๋ฉด ์คํ์ง๋ฅผ ์ค์ด๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. |
iou |
float |
0.7 |
๋น์ต๋ ์ต์ (NMS)์ ๋ํ ๊ต์ฐจ์ ์ด๊ณผ (IoU) ์๊ณ๊ฐ์ ๋๋ค. ๊ฐ์ด ๋ฎ์์๋ก ์ค๋ณต๋๋ ์์๋ฅผ ์ ๊ฑฐํ์ฌ ํ์ง ํ์๊ฐ ์ค์ด๋ค์ด ์ค๋ณต์ ์ค์ด๋ ๋ฐ ์ ์ฉํฉ๋๋ค. |
imgsz |
int or tuple |
640 |
์ถ๋ก ํ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ ์ํฉ๋๋ค. ๋จ์ผ ์ ์์ผ ์ ์์ต๋๋ค. 640 ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฌ๊ฐํ ํฌ๊ธฐ ์กฐ์ ๋๋ (๋์ด, ๋๋น) ํํ์ ์ฌ์ฉํฉ๋๋ค. ์ ์ ํ ํฌ๊ธฐ ์กฐ์ ์ ๊ฐ์ง์จ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ ํ์ฑ ์ฒ๋ฆฌ ์๋. |
half |
bool |
False |
์ ํ๋์ ๋ฏธ์น๋ ์ํฅ์ ์ต์ํํ๋ฉด์ ์ง์๋๋ GPU์์ ๋ชจ๋ธ ์ถ๋ก ์๋๋ฅผ ๋์ผ ์ ์๋ ๋ฐ์ ํ๋ (FP16) ์ถ๋ก ์ ํ์ฑํํฉ๋๋ค. |
device |
str |
None |
์ถ๋ก ํ ์ฅ์น๋ฅผ ์ง์ ํฉ๋๋ค(์, cpu , cuda:0 ๋๋ 0 ). ์ฌ์ฉ์๊ฐ ๋ชจ๋ธ ์คํ์ ์ํด CPU, ํน์ GPU, ๋๋ ๊ธฐํ ์ปดํจํ
์ฅ์น ์ค์์ ์ ํํ ์ ์์ต๋๋ค. |
batch |
int |
1 |
์ถ๋ก ํ ๋ฐฐ์น ํฌ๊ธฐ๋ฅผ ์ง์ ํฉ๋๋ค(์์ค๊ฐ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์๋ง ์๋ํฉ๋๋ค. ๋๋ ํ ๋ฆฌ, ๋น๋์ค ํ์ผ ๋๋ .txt ํ์ผ). ๋ฐฐ์น ํฌ๊ธฐ๊ฐ ํด์๋ก ์ฒ๋ฆฌ๋์ด ์ฆ๊ฐํ์ฌ ์ถ๋ก ์ ํ์ํ ์ด ์๊ฐ์ ๋จ์ถํ ์ ์์ต๋๋ค. |
max_det |
int |
300 |
์ด๋ฏธ์ง๋น ํ์ฉ๋๋ ์ต๋ ๊ฐ์ง ํ์. ๋ชจ๋ธ์ด ํ ๋ฒ์ ์ถ๋ก ์์ ๊ฐ์งํ ์ ์๋ ์ด ์ค๋ธ์ ํธ ์๋ฅผ ์ ํํ์ฌ ๋ฐ์ง๋ ์ฅ๋ฉด์์ ๊ณผ๋ํ ์ถ๋ ฅ์ ๋ฐฉ์งํฉ๋๋ค. |
vid_stride |
int |
1 |
๋น๋์ค ์ ๋ ฅ์ ํ๋ ์ ๋ณดํญ. ๋์์์์ ํ๋ ์์ ๊ฑด๋๋ฐ์ด ์๊ฐ ํด์๋๋ฅผ ํฌ์ํ๋ฉด์ ์ฒ๋ฆฌ ์๋๋ฅผ ๋์ผ ์ ์์ต๋๋ค. ๊ฐ์ด 1์ด๋ฉด ๋ชจ๋ ํ๋ ์์ ์ฒ๋ฆฌํ๊ณ , ๊ฐ์ด ํด์๋ก ํ๋ ์์ ๊ฑด๋๋๋๋ค. |
stream_buffer |
bool |
False |
๋น๋์ค ์คํธ๋ฆผ์ ๋ํด ์์ ํ๋ ์์ ๋๊ธฐ์ด์ ๋ฃ์์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ๋ง์ฝ False ๋ก ์ค์ ํ๋ฉด ์ ํ๋ ์์ ์์ฉํ๊ธฐ ์ํด ์ด์ ํ๋ ์์ด ์ญ์ ๋ฉ๋๋ค(์ค์๊ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ์ต์ ํ๋จ). True'๋ฉด ์ ํ๋ ์์ ๋ฒํผ์ ๋๊ธฐ์์ผ ๊ฑด๋๋ฐ๋ ํ๋ ์์ด ์๋๋ก ํ์ง๋ง ์ถ๋ก FPS๊ฐ ์คํธ๋ฆผ FPS๋ณด๋ค ๋ฎ์ผ๋ฉด ์ง์ฐ์ด ๋ฐ์ํฉ๋๋ค. |
visualize |
bool |
False |
์ถ๋ก ์ค์ ๋ชจ๋ธ ๊ธฐ๋ฅ์ ์๊ฐํ๋ฅผ ํ์ฑํํ์ฌ ๋ชจ๋ธ์ด '๋ณด๊ณ ์๋ ๊ฒ'์ ๋ํ ์ธ์ฌ์ดํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋๋ฒ๊น ๋ฐ ๋ชจ๋ธ ํด์์ ์ ์ฉํฉ๋๋ค. |
augment |
bool |
False |
์์ธก์ ์ํ ํ ์คํธ ์๊ฐ ์ฆ๊ฐ(TTA)์ ์ง์ํ์ฌ ์ถ๋ก ์๋๋ฅผ ํฌ์ํ๋ฉด์ ํ์ง ๊ฒฌ๊ณ ์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. |
agnostic_nms |
bool |
False |
์๋ก ๋ค๋ฅธ ํด๋์ค์ ๊ฒน์น๋ ์์๋ฅผ ๋ณํฉํ๋ ํด๋์ค ๋ฌด๊ด NMS(Non-Maximum Suppression)๋ฅผ ํ์ฑํํฉ๋๋ค. ํด๋์ค ์ค๋ณต์ด ์ผ๋ฐ์ ์ธ ๋ค์ค ํด๋์ค ํ์ง ์๋๋ฆฌ์ค์ ์ ์ฉํฉ๋๋ค. |
classes |
list[int] |
None |
ํด๋์ค ID ์งํฉ์ผ๋ก ์์ธก์ ํํฐ๋งํฉ๋๋ค. ์ง์ ๋ ํด๋์ค์ ์ํ๋ ํ์ง๋ง ๋ฐํ๋ฉ๋๋ค. ๋ค์ค ํด๋์ค ํ์ง ์์ ์์ ๊ด๋ จ ๊ฐ์ฒด์ ์ง์คํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค. |
retina_masks |
bool |
False |
๊ณ ํด์๋ ๋ถํ ๋ง์คํฌ๋ฅผ ๋ฐํํฉ๋๋ค. ๋ฐํ๋ ๋ง์คํฌ(masks.data )๋ฅผ ํ์ฑํํ๋ฉด ์๋ณธ ์ด๋ฏธ์ง ํฌ๊ธฐ์ ์ผ์นํฉ๋๋ค. ๋นํ์ฑํํ๋ฉด ์ถ๋ก ์ค์ ์ฌ์ฉ๋๋ ์ด๋ฏธ์ง ํฌ๊ธฐ๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. |
embed |
list[int] |
None |
ํน์ง ๋ฒกํฐ ๋๋ ์๋ฒ ๋ฉ์ ์ถ์ถํ ๋ ์ด์ด๋ฅผ ์ง์ ํฉ๋๋ค. ํด๋ฌ์คํฐ๋ง์ด๋ ์ ์ฌ๋ ๊ฒ์๊ณผ ๊ฐ์ ๋ค์ด์คํธ๋ฆผ ์์ ์ ์ ์ฉํฉ๋๋ค. |
project |
str |
None |
์์ธก ์ถ๋ ฅ์ด ์ ์ฅ๋๋ ํ๋ก์ ํธ ๋๋ ํฐ๋ฆฌ์ ์ด๋ฆ(๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ). save ๊ฐ ํ์ฑํ๋์ด ์์ต๋๋ค. |
name |
str |
None |
์์ธก ์คํ์ ์ด๋ฆ์
๋๋ค. ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ์์ธก ์ถ๋ ฅ์ด ์ ์ฅ๋๋ ํ๋ก์ ํธ ํด๋ ๋ด์ ํ์ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ง๋๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. save ๊ฐ ํ์ฑํ๋์ด ์์ต๋๋ค. |
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
๋ฌผ์ฒด ํ๋ฆผ์ด๋ ๋ฌด์์ธ๊ฐ์ Ultralytics YOLO11 ?
๋ฌผ์ฒด ํ๋ฆผ ํจ๊ณผ Ultralytics YOLO11 ๋ ์ด๋ฏธ์ง๋ ๋์์์์ ํน์ ๋ฌผ์ฒด๋ฅผ ์๋์ผ๋ก ๊ฐ์งํ์ฌ ํ๋ฆฌ๊ฒ ์ฒ๋ฆฌํ๋ ํจ๊ณผ๋ฅผ ์ ์ฉํฉ๋๋ค. ์ด ๊ธฐ์ ์ ๊ด๋ จ ์๊ฐ ๋ฐ์ดํฐ๋ ์ ์งํ๋ฉด์ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ์จ๊ฒจ ๊ฐ์ธ์ ๋ณด ๋ณดํธ๋ฅผ ๊ฐํํฉ๋๋ค. YOLO11 ์ค์๊ฐ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ผ๋ก ์ฆ๊ฐ์ ์ธ ๊ฐ์ธ์ ๋ณด ๋ณดํธ ๋ฐ ์ ํ์ ์ด์ ์กฐ์ ์ด ํ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํฉ๋๋ค.
YOLO11 ์ ์ฌ์ฉํ์ฌ ์ค์๊ฐ ์ค๋ธ์ ํธ ๋ธ๋ฌ๋ฅผ ๊ตฌํํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ๋์?
YOLO11 ๋ก ์ค์๊ฐ ๊ฐ์ฒด ํ๋ฆผ ํจ๊ณผ๋ฅผ ๊ตฌํํ๋ ค๋ฉด ์ ๊ณต๋ Python ์์ ๋ฅผ ๋ฐ๋ฅด์ธ์. ์ฌ๊ธฐ์๋ ๋ฌผ์ฒด ๊ฐ์ง์๋ YOLO11 ๋ฅผ ์ฌ์ฉํ๊ณ ํ๋ฆผ ํจ๊ณผ ์ ์ฉ์๋ OpenCV๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ค์์ ๋จ์ํ๋ ๋ฒ์ ์ ๋๋ค:
import cv2
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")
while cap.isOpened():
success, im0 = cap.read()
if not success:
break
results = model.predict(im0, show=False)
for box in results[0].boxes.xyxy.cpu().tolist():
obj = im0[int(box[1]) : int(box[3]), int(box[0]) : int(box[2])]
im0[int(box[1]) : int(box[3]), int(box[0]) : int(box[2])] = cv2.blur(obj, (50, 50))
cv2.imshow("YOLO11 Blurring", im0)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
cap.release()
cv2.destroyAllWindows()
๋ฌผ์ฒด ํ๋ฆผ์ Ultralytics YOLO11 ์ ์ฌ์ฉํ๋ฉด ์ด๋ค ์ด์ ์ด ์๋์?
Ultralytics YOLO11 ๋ ์ค๋ธ์ ํธ ํ๋ฆผ ํจ๊ณผ์ ๋ช ๊ฐ์ง ์ด์ ์ ์ ๊ณตํฉ๋๋ค:
- ๊ฐ์ธ์ ๋ณด ๋ณดํธ: ๋ฏผ๊ฐํ๊ฑฐ๋ ์๋ณ ๊ฐ๋ฅํ ์ ๋ณด๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ฐ๋ฆด ์ ์์ต๋๋ค.
- ์ ํ์ ์ด์ : ํน์ ๊ฐ์ฒด๋ฅผ ๋์์ผ๋ก ํ๋ฆฌ๊ฒ ์ฒ๋ฆฌํ์ฌ ํ์ ์๊ฐ์ ์ฝํ ์ธ ๋ฅผ ์ ์งํฉ๋๋ค.
- ์ค์๊ฐ ์ฒ๋ฆฌ: ๋์ ํ๊ฒฝ์์ ์ค๋ธ์ ํธ ๋ธ๋ฌ๋ง์ ํจ์จ์ ์ผ๋ก ์คํํ์ฌ ์ฆ๊ฐ์ ์ธ ํ๋ผ์ด๋ฒ์ ํฅ์์ ์ ํฉํฉ๋๋ค.
์์ธํ ์ ์ฉ ์ฌ๋ก๋ ๋ฌผ์ฒด ํ๋ฆผ ํจ๊ณผ์ ์ฅ์ ์น์ ์์ ํ์ธํ์ธ์.
๊ฐ์ธ์ ๋ณด ๋ณดํธ๋ฅผ ์ํด ๋์์์์ ์ผ๊ตด์ ํ๋ฆฌ๊ฒ ์ฒ๋ฆฌํ๋ ๋ฐ Ultralytics YOLO11 ์ฌ์ฉํ ์ ์๋์?
์, Ultralytics YOLO11 ์ ๋์์์์ ์ผ๊ตด์ ๊ฐ์งํ๊ณ ํ๋ฆฌ๊ฒ ์ฒ๋ฆฌํ์ฌ ๊ฐ์ธ์ ๋ณด๋ฅผ ๋ณดํธํ๋๋ก ์ค์ ํ ์ ์์ต๋๋ค. ์ผ๊ตด์ ๊ตฌ์ฒด์ ์ผ๋ก ์ธ์ํ๋๋ก ๋ฏธ๋ฆฌ ํ๋ จํ๊ฑฐ๋ ํ๋ จ๋ ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ๊ฐ์ง ๊ฒฐ๊ณผ๋ฅผ OpenCV๋ก ์ฒ๋ฆฌํ์ฌ ๋ธ๋ฌ ํจ๊ณผ๋ฅผ ์ ์ฉํ ์ ์์ต๋๋ค. ๋ฌผ์ฒด ๊ฐ์ง์ ๋ํ ๊ฐ์ด๋( YOLO11 )๋ฅผ ์ฐธ์กฐํ์ฌ ์ผ๊ตด ๊ฐ์ง ๋์์ ๋ง๊ฒ ์ฝ๋๋ฅผ ์์ ํ์ธ์.
YOLO11 ์ ๋ฌผ์ฒด ํ๋ฆผ ํจ๊ณผ๋ฅผ ์ํ Faster R-CNN๊ณผ ๊ฐ์ ๋ค๋ฅธ ๋ฌผ์ฒด ๊ฐ์ง ๋ชจ๋ธ๊ณผ ์ด๋ป๊ฒ ๋น๊ต๋๋์?
Ultralytics YOLO11 ์ ์ผ๋ฐ์ ์ผ๋ก ์๋ ์ธก๋ฉด์์ Faster R-CNN๊ณผ ๊ฐ์ ๋ชจ๋ธ๋ณด๋ค ์ฑ๋ฅ์ด ๋ฐ์ด๋๋ฏ๋ก ์ค์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ์ ํฉํฉ๋๋ค. ๋ ๋ชจ๋ธ ๋ชจ๋ ์ ํํ ๊ฐ์ง ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง, YOLO11 ์ ์ํคํ ์ฒ๋ ์ค์๊ฐ ๋ฌผ์ฒด ํ๋ฆผ๊ณผ ๊ฐ์ ์์ ์ ์ค์ํ ๋น ๋ฅธ ์ถ๋ก ์ ์ต์ ํ๋์ด ์์ต๋๋ค. ๊ธฐ์ ์ ์ฐจ์ด์ ๋ฐ ์ฑ๋ฅ ์งํ์ ๋ํ ์์ธํ ๋ด์ฉ์ YOLO11 ์ค๋ช ์๋ฅผ ์ฐธ์กฐํ์ธ์.