使用Ultralytics YOLO11进行实例分割和跟踪 🚀
什么是实例分割?
Ultralytics YOLO11 实例分割涉及识别和勾勒图像中的单个物体,提供对空间分布的详细理解。与语义分割不同,它为每个物体提供唯一的标签和精确的轮廓,这对于物体检测和医学成像等任务至关重要。
Ultralytics包中提供了两种类型的实例分割跟踪:
-
按类别对象的实例分割: 每个类别对象被分配一个独特的颜色,以便清晰地视觉分离。
-
带对象轨迹的实例分割: 每个轨迹由不同的颜色表示,便于识别和跟踪。
观看: 使用Ultralytics YOLO11进行实例分割和对象跟踪
示例
实例分割 | 实例分割 + 对象跟踪 |
---|---|
Ultralytics实例分割 😍 | Ultralytics实例分割与对象跟踪 🔥 |
实例分割和跟踪
import cv2
from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors
model = YOLO("yolo11n-seg.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))
out = cv2.VideoWriter("instance-segmentation.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))
while True:
ret, im0 = cap.read()
if not ret:
print("视频帧为空或视频处理已成功完成。")
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()
```python 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") # 分割模型 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("视频帧为空或视频处理已成功完成。")
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 Issue 部分 或下方讨论部分发布您的问题。
常见问题
如何使用 Ultralytics YOLO11 进行实例分割?
要使用 Ultralytics YOLO11 进行实例分割,请使用 YOLO11 的分割版本初始化 YOLO 模型,并通过它处理视频帧。以下是一个简化的代码示例:
示例
import cv2
from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors
model = YOLO("yolo11n-seg.pt") # 分割模型
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 文档。
为什么我应该使用 Ultralytics YOLO11 进行实例分割和跟踪,而不是像 Mask R-CNN 或 Faster R-CNN 这样的模型?
与 Mask R-CNN 或 Faster R-CNN 等其他模型相比,Ultralytics YOLO11 提供实时性能、卓越的 准确性 和易用性。YOLO11 与 Ultralytics HUB 无缝集成,使用户能够高效管理模型、数据集和训练管道。了解更多 YOLO11 的优势,请参阅 Ultralytics 博客。
如何使用 Ultralytics YOLO11 实现对象跟踪?
要实现对象跟踪,请使用 model.track
方法,并确保每个对象的 ID 在各帧之间保持一致。以下是一个简单的示例:
Example
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") # 分割模型
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 数据集文档 中找到。