์ฝ˜ํ…์ธ ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

Instance Segmentation and Tracking using Ultralytics YOLO11 ๐Ÿš€

What is Instance Segmentation?

Ultralytics YOLO11 instance segmentation involves identifying and outlining individual objects in an image, providing a detailed understanding of spatial distribution. Unlike semantic segmentation, it uniquely labels and precisely delineates each object, crucial for tasks like object detection and medical imaging.

Ultralytics ํŒจํ‚ค์ง€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์Šคํ„ด์Šค ์„ธ๋ถ„ํ™” ์ถ”์ ์—๋Š” ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์ด ์žˆ์Šต๋‹ˆ๋‹ค:

  • ํด๋ž˜์Šค ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•œ ์ธ์Šคํ„ด์Šค ์„ธ๋ถ„ํ™”: ๊ฐ ํด๋ž˜์Šค ๊ฐ์ฒด์—๋Š” ์‹œ๊ฐ์ ์œผ๋กœ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ณ ์œ ํ•œ ์ƒ‰์ƒ์ด ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.

  • ์˜ค๋ธŒ์ ํŠธ ํŠธ๋ž™์„ ์‚ฌ์šฉํ•œ ์ธ์Šคํ„ด์Šค ์„ธ๋ถ„ํ™”: ๋ชจ๋“  ํŠธ๋ž™์€ ๊ณ ์œ ํ•œ ์ƒ‰์ƒ์œผ๋กœ ํ‘œ์‹œ๋˜์–ด ์‰ฝ๊ฒŒ ์‹๋ณ„ํ•˜๊ณ  ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



Watch: Instance Segmentation with Object Tracking using Ultralytics YOLO11

์ƒ˜ํ”Œ

์ธ์Šคํ„ด์Šค ์„ธ๋ถ„ํ™” ์ธ์Šคํ„ด์Šค ์„ธ๋ถ„ํ™” + ์˜ค๋ธŒ์ ํŠธ ์ถ”์ 
Ultralytics ์ธ์Šคํ„ด์Šค ์„ธ๋ถ„ํ™” Ultralytics ์˜ค๋ธŒ์ ํŠธ ์ถ”์ ์„ ํ†ตํ•œ ์ธ์Šคํ„ด์Šค ์„ธ๋ถ„ํ™”
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()
from collections import defaultdict

import cv2

from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors

track_history = defaultdict(lambda: [])

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 ์ด์Šˆ ์„น์…˜ ๋˜๋Š” ์•„๋ž˜์— ์–ธ๊ธ‰๋œ ํ† ๋ก  ์„น์…˜์— ์ž์œ ๋กญ๊ฒŒ ์งˆ๋ฌธ์„ ๊ฒŒ์‹œํ•ด ์ฃผ์„ธ์š”.

์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

How do I perform instance segmentation using Ultralytics YOLO11?

To perform instance segmentation using Ultralytics YOLO11, initialize the YOLO model with a segmentation version of YOLO11 and process video frames through it. Here's a simplified code example:

์˜ˆ

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()

Learn more about instance segmentation in the Ultralytics YOLO11 guide.

What is the difference between instance segmentation and object tracking in Ultralytics YOLO11?

Instance segmentation identifies and outlines individual objects within an image, giving each object a unique label and mask. Object tracking extends this by assigning consistent labels to objects across video frames, facilitating continuous tracking of the same objects over time. Learn more about the distinctions in the Ultralytics YOLO11 documentation.

Why should I use Ultralytics YOLO11 for instance segmentation and tracking over other models like Mask R-CNN or Faster R-CNN?

Ultralytics YOLO11 offers real-time performance, superior accuracy, and ease of use compared to other models like Mask R-CNN or Faster R-CNN. YOLO11 provides a seamless integration with Ultralytics HUB, allowing users to manage models, datasets, and training pipelines efficiently. Discover more about the benefits of YOLO11 in the Ultralytics blog.

How can I implement object tracking using Ultralytics YOLO11?

๊ฐ์ฒด ์ถ”์ ์„ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด model.track ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ๊ฐ์ฒด์˜ ID๊ฐ€ ํ”„๋ ˆ์ž„ ๊ฐ„์— ์ผ๊ด€๋˜๊ฒŒ ํ• ๋‹น๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค:

์˜ˆ

from collections import defaultdict

import cv2

from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors

track_history = defaultdict(lambda: [])

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()

์ธ์Šคํ„ด์Šค ์„ธ๋ถ„ํ™” ๋ฐ ์ถ”์  ์„น์…˜์—์„œ ์ž์„ธํžˆ ์•Œ์•„๋ณด์„ธ์š”.

Are there any datasets provided by Ultralytics suitable for training YOLO11 models for instance segmentation and tracking?

Yes, Ultralytics offers several datasets suitable for training YOLO11 models, including segmentation and tracking datasets. Dataset examples, structures, and instructions for use can be found in the Ultralytics Datasets documentation.


9๊ฐœ์›” ์ „ ์ƒ์„ฑ๋จ โœ๏ธ 11 ์ผ ์ „ ์—…๋ฐ์ดํŠธ๋จ

๋Œ“๊ธ€