跳至内容

使用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 设置交叉重叠 (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根据图像大小自动调整线宽。提供可视化定制,使图像更加清晰。

实例分割的应用

使用YOLO11 进行实例分割在各行各业都有大量实际应用:

废物管理和回收

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

自动驾驶汽车

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

医学影像

实例分割可以识别和勾勒医学扫描中的肿瘤、器官或细胞结构。YOLO11 能够精确划分对象的边界,这使它在医疗诊断和治疗规划方面具有重要价值。

施工现场监控

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

备注

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

常见问题

如何使用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 的实现方法,您将获得强大的功能,用于分析视频中的物体移动和行为,同时保持精确的边界信息。

例如,在分割和跟踪方面,为什么要使用Ultralytics YOLO11 而不是其他模型,如掩码 R-CNN 或更快 R-CNN?

与 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 年前 ✏️已更新 5 天前

评论