跳转至内容

使用 Ultralytics YOLO11 🚀 进行实例分割和追踪

什么是实例分割?

实例分割是一项计算机视觉任务,涉及在像素级别识别和勾勒图像中的各个对象。与仅按类别对像素进行分类的语义分割不同,实例分割会唯一地标记并精确地描绘每个对象实例,这对于需要详细空间理解的应用(如医学成像、自动驾驶和工业自动化)至关重要。

Ultralytics YOLO11 提供了强大的实例分割功能,可以在保持 YOLO 模型的速度和效率的同时,实现精确的目标边界检测。

Ultralytics 软件包中有两种类型的实例分割跟踪可用:

  • 使用类别对象进行实例分割: 每个类别对象都分配有唯一的颜色,以便清晰地进行视觉分离。

  • 带有对象轨迹的实例分割: 每个轨迹都用不同的颜色表示,便于在视频帧中轻松识别和跟踪。



观看: 使用 Ultralytics YOLO11 进行带有对象追踪的实例分割

示例

实例分割 实例分割 + 对象追踪
Ultralytics 实例分割 Ultralytics 实例分割与对象跟踪
Ultralytics 实例分割 😍 Ultralytics 实例分割与对象跟踪 🔥

使用 Ultralytics YOLO 进行实例分割

# Instance segmentation using Ultralytics YOLO11
yolo solutions isegment show=True

# Pass a source video
yolo solutions isegment source="path/to/video.mp4"

# Monitor the specific classes
yolo solutions isegment classes="[0, 5]"
import cv2

from ultralytics import solutions

cap = cv2.VideoCapture("path/to/video.mp4")
assert cap.isOpened(), "Error reading video file"

# Video writer
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("isegment_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Initialize instance segmentation object
isegment = solutions.InstanceSegmentation(
    show=True,  # display the output
    model="yolo11n-seg.pt",  # model="yolo11n-seg.pt" for object segmentation using YOLO11.
    # classes=[0, 2],  # segment specific classes i.e, person and car with pretrained model.
)

# Process video
while cap.isOpened():
    success, im0 = cap.read()

    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break

    results = isegment(im0)

    # print(results)  # access the output

    video_writer.write(results.plot_im)  # write the processed frame.

cap.release()
video_writer.release()
cv2.destroyAllWindows()  # destroy all opened windows

InstanceSegmentation 参数

这是一个包含以下内容的表格 InstanceSegmentation 参数:

参数 类型 默认值 描述
model str None Ultralytics YOLO 模型文件的路径。
region list '[(20, 400), (1260, 400)]' 定义计数区域的点列表。

您还可以利用 track 内的参数 InstanceSegmentation 解决方案:

参数 类型 默认值 描述
tracker str 'botsort.yaml' 指定要使用的跟踪算法,例如: bytetrack.yamlbotsort.yaml.
conf float 0.3 设置检测的置信度阈值;较低的值允许跟踪更多对象,但可能包含误报。
iou float 0.5 设置用于过滤重叠检测的 Intersection over Union (IoU) 阈值。
classes list None 按类别索引过滤结果。例如, classes=[0, 2, 3] 仅跟踪指定的类别。
verbose bool True 控制跟踪结果的显示,提供被跟踪对象的可视化输出。
device str None 指定用于推理的设备(例如, cpu, cuda:00)。允许用户在 CPU、特定 GPU 或其他计算设备之间进行选择,以执行模型。

此外,以下可视化参数可供使用:

参数 类型 默认值 描述
show bool False 可视化参数: True,则在窗口中显示带注释的图像或视频。这对于开发或测试期间的即时视觉反馈非常有用。
line_width None or int None 指定边界框的线条宽度。 如果 None,则线条宽度会根据图像大小自动调整。 提供视觉自定义以提高清晰度。
show_conf bool True 在标签旁边显示每个检测的置信度分数。 可以深入了解模型对每次检测的确定性。
show_labels bool True 在可视化输出中显示每个检测的标签。 能够立即理解检测到的对象。

实例分割的应用

使用 YOLO11 进行实例分割在各个行业中都有许多实际应用:

废物管理与回收

YOLO11 可用于废物管理设施,以识别和分类不同类型的材料。该模型可以高精度地分割塑料垃圾、纸板、金属和其他可回收物,使自动化分拣系统能够更有效地处理废物。考虑到全球产生的 70 亿吨塑料垃圾中只有约 10% 得到回收,这一点尤其有价值。

自动驾驶车辆

自动驾驶汽车中,实例分割有助于在像素级别识别和跟踪行人、车辆、交通标志和其他道路元素。对环境的这种精确理解对于导航和安全决策至关重要。YOLO11 的实时性能使其成为这些时间敏感型应用的理想选择。

医学影像

实例分割可以识别并勾勒出医学扫描中的肿瘤、器官或细胞结构。YOLO11 精确描绘对象边界的能力使其对于 医学诊断 和治疗计划非常有价值。

建筑工地监控

在建筑工地,实例分割可以跟踪重型机械、工人和材料。这有助于通过监控设备位置和检测工人何时进入危险区域来确保安全,同时优化工作流程和资源分配。

注意

如有任何疑问,请随时在 Ultralytics Issue Section 或下面提到的讨论区中发布您的问题。

常见问题

如何使用 Ultralytics YOLO11 执行实例分割?

要使用 Ultralytics YOLO11 执行实例分割,请使用 YOLO11 的分割版本初始化 YOLO 模型,并通过它处理视频帧。 这是一个简化的代码示例:

import cv2

from ultralytics import solutions

cap = cv2.VideoCapture("path/to/video.mp4")
assert cap.isOpened(), "Error reading video file"

# Video writer
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("instance-segmentation.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Init InstanceSegmentation
isegment = solutions.InstanceSegmentation(
    show=True,  # display the output
    model="yolo11n-seg.pt",  # model="yolo11n-seg.pt" for object segmentation using YOLO11.
)

# Process video
while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or processing is complete.")
        break
    results = isegment(im0)
    video_writer.write(results.plot_im)

cap.release()
video_writer.release()
cv2.destroyAllWindows()

了解更多关于 Ultralytics YOLO11 指南 中的实例分割。

在 Ultralytics YOLO11 中,实例分割和目标跟踪有什么区别?

实例分割识别并勾勒出图像中的各个对象,为每个对象提供唯一的标签和掩码。对象跟踪通过为视频帧中的对象分配一致的 ID 来扩展此功能,从而有助于持续跟踪同一对象随时间的推移。当像 YOLO11 的实现中那样组合使用时,您将获得强大的功能来分析视频中对象的运动和行为,同时保持精确的边界信息。

与其他模型(如 Mask R-CNN 或 Faster R-CNN)相比,为什么我应该使用 Ultralytics YOLO11 进行实例分割和跟踪?

与其他模型(如 Mask R-CNN 或 Faster R-CNN)相比,Ultralytics YOLO11 具有实时性能、卓越的准确性和易用性。YOLO11 通过单次处理图像(单阶段检测),在保持高精度的同时显著提高了速度。它还与 Ultralytics HUB 无缝集成,使用户能够高效地管理模型、数据集和训练流程。对于需要速度和准确性的应用,YOLO11 提供了最佳平衡。

Ultralytics 是否提供适合训练 YOLO11 模型进行实例分割和跟踪的数据集?

是的,Ultralytics 提供了多个适合训练 YOLO11 模型以进行实例分割的数据集,包括 COCO-SegCOCO8-Seg(一个用于快速测试的较小子集)、Package-SegCrack-Seg。这些数据集带有实例分割任务所需的像素级注释。对于更专业的应用,您还可以按照 Ultralytics 格式创建自定义数据集。完整的数据集信息和使用说明可以在 Ultralytics 数据集文档 中找到。



📅 创建于 1 年前 ✏️ 更新于 4 个月前

评论