news 2026/9/8 23:44:43

Ultralytics YOLO26 实例分割与目标跟踪实战:基于 InstanceSegmentation Solution 的像素级多目标识别与追踪指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ultralytics YOLO26 实例分割与目标跟踪实战:基于 InstanceSegmentation Solution 的像素级多目标识别与追踪指南

Ultralytics YOLO26 实例分割与目标跟踪实战:基于 InstanceSegmentation Solution 的像素级多目标识别与追踪指南

【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics

实例分割(Instance Segmentation)与目标跟踪(Object Tracking)的组合是视频智能分析的核心能力,它能以像素级精度圈定每个独立对象,并跨帧维持其身份一致性。本指南以 docs/en/guides/instance-segmentation-and-tracking.md 为骨架,结合 Ultralytics 仓库中的InstanceSegmentationSolution 源码、配置与测试,系统讲解如何在 Python 与 CLI 下加载 YOLO26 分割模型,实现"逐实例着色 + 跨帧追踪"的视频分析管线,并完整说明所有可调参数、输出结构及应用选型要点。读完你将可以直接复现一个可运行、可保存、可指定类别与追踪器的一站式实例分割追踪程序。

什么是实例分割

实例分割(Instance Segmentation)是一种计算机视觉任务,它要求在像素级别识别并勾勒出图像中的每个独立对象。与只按类别划分像素的语义分割(Semantic Segmentation)不同,实例分割会为每一个对象实例给出唯一标签和精确轮廓——同一张图中两辆相邻的车、两个并肩的行人都会被当成彼此独立的"实例"分别处理。

这种"精细化空间理解"能力使实例分割成为许多需要精确感知场景的应用的技术基础,例如:

  • 医学影像:勾画肿瘤、器官或细胞结构边界;
  • 自动驾驶:区分道路上的每一个行人、车辆、路牌;
  • 工业自动化与安防:识别并统计零部件、人员、物料。

Ultralytics YOLO26 提供了强大的实例分割能力,其-seg系列模型(如yolo26n-seg.pt)在保持 YOLO 系模型一贯推理速度的同时,能够输出精确的目标边界。在 Ultralytics 仓库中,这一能力被封装为可直接调用的solutions高级接口,用户只需一个-seg模型权重文件即可开箱使用,相关模型定义可参考 ultralytics/nn/tasks.py 中的分割任务装配逻辑。

在 Ultralytics 的解决方案生态中,实例分割追踪通常有两种可视化形态:

  • 按类别着色(Class Objects):同一类别的对象共用一种颜色,用于清晰的类别区分与直观展示;
  • 按轨迹着色(Object Tracks):每条追踪轨迹拥有独立颜色,便于在视频帧之间快速辨认"同一个对象走到哪里了"。

实例分割 vs 目标检测 vs 语义分割

任务输出能否区分同类的不同个体粒度
目标检测(Detection)边界框 + 类别 + 置信度是(每框一个)框级
语义分割(Semantic Segmentation)每个像素一个类别像素级
实例分割(Instance Segmentation)每个对象一个掩码 + 类别是(逐掩码唯一)像素级
实例分割 + 追踪掩码 + 类别 + 跨帧 Track ID是,且跨帧保持一致像素级 + 时序

InstanceSegmentation Solution 的源码实现

在 Ultralytics 仓库中,本指南使用的核心类是 ultralytics/solutions/instance_segmentation.py 中定义的InstanceSegmentation。它继承自 ultralytics/solutions/solutions.py 中的BaseSolution,与ObjectCounterHeatmapSpeedEstimator等 Solution 共享同一套基础设施,统一从 ultralytics/solutions/init.py 对外导出。

从源码可以清楚看到它的工作链路:

  1. 模型默认值__init__kwargs["model"] = kwargs.get("model", "yolo26n-seg.pt")——不传模型时自动回退到yolo26n-seg.pt(见 instance_segmentation.py)。
  2. 底层追踪BaseSolution.extract_tracks实际调用self.model.track(source=im0, persist=True, classes=self.classes, verbose=False, ...),意味着 Solution 内部默认就走"检测 + 追踪"路径,为每个实例分配 Track ID(见 solutions.py)。
  3. 掩码提取process方法中通过getattr(self.tracks, "masks", None)拿到每个实例的分割掩码。
  4. 绘制:当掩码存在时,利用Results.plot(..., color_mode="instance")把每个实例渲染为独立颜色并与边界框、类别、置信度标签叠加;当无掩码(例如误用了非-seg模型)时会打印告警并直接返回原图(见 instance_segmentation.py)。
  5. 返回结构SolutionResults,主要包含plot_im(已标注帧)与total_tracks(当前帧追踪实例总数)。

仓库测试 tests/test_solutions.py 中也覆盖了无掩码这一边界情形:传入一张全零帧并断言results.plot_im is not None,保证异常输入下管线不会崩溃。

配置参数如何解析

InstanceSegmentation的所有可选参数最终汇入 ultralytics/solutions/config.py 的SolutionConfig数据类。BaseSolution.__init__通过SolutionConfig().update(**kwargs)将关键字参数与默认值合并;update对未知键会直接抛出ValueError,因此传入参数名必须严格拼写正确model.track额外使用的参数(iouconfdevicemax_detquantizetrackerimgsz)由BaseSolution统一收拢进self.track_add_args(见 solutions.py),在后续每帧的model.track调用中生效。

CLI 命令映射

命令行使用yolo solutions isegment即进入本 Solution,其映射关系定义在 ultralytics/cfg/init.py("isegment": "InstanceSegmentation")。CLI 场景下若未指定sourceBaseSolution会自动下载官方演示视频作为默认输入源(见 solutions.py)。test_cli.py中的参数化测试 tests/test_cli.py 也把isegment纳入常规 CLI 冒烟测试集合。

快速开始:Segment and Track with YOLO26

InstanceSegmentationSolution 会对视频的每一帧运行 YOLO26 分割模型,逐对象绘制掩码并对每个实例单独着色,方便你在整个视频中持续跟踪某个对象。使用前请确保已安装 Ultralytics 及opencv-python;若需在无图形环境(如服务器、容器)中运行,务必自行关闭show或以 CLI 传入show=False

CLI 用法

# 使用 Ultralytics YOLO26 进行实例分割(默认展示输出窗口) yolo solutions isegment show=True # 指定本地视频源 yolo solutions isegment source="path/to/video.mp4" # 只分割特定类别,例如只关注类别 0(person)与类别 5(bus) yolo solutions isegment classes="[0, 5]"

CLI 方式下常用的补充参数示例:

# 使用 nano 级分割模型 + 关闭画面、降低置信度阈值、切换到 CPU yolo solutions isegment source="path/to/video.mp4" model="yolo26n-seg.pt" \ show=False conf=0.2 device="cpu"

Python 用法

import cv2 from ultralytics import solutions cap = cv2.VideoCapture("path/to/video.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)) video_writer = cv2.VideoWriter("isegment_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h)) # 初始化实例分割对象 isegment = solutions.InstanceSegmentation( show=True, # 是否实时弹出窗口展示输出 model="yolo26n-seg.pt", # 使用 YOLO26 分割模型;也可换成 yolo26s-seg/yolo26m-seg 等 # classes=[0, 2], # 可选:仅分割指定类别(如只处理 person 与 car) ) # 逐帧处理视频 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) # 送入一帧,返回 SolutionResults # print(results) # 可打印 total_tracks、speed 等结构化输出 video_writer.write(results.plot_im) # 写入已标注帧(含掩码/标签/追踪结果) cap.release() video_writer.release() cv2.destroyAllWindows() # 关闭所有展示窗口

要点提示:

  • results.plot_im是叠加了每个实例掩码、类别名、置信度以及追踪 ID 标注的成品帧,直接交给VideoWriter即可落盘;
  • results.total_tracks表示当前帧中正在追踪的实例数量,可用于在线统计或触发后续业务逻辑;
  • 视频源不仅支持本地 mp4,也可替换为摄像头索引(如0)或 RTSP 流地址(仅对传入 OpenCVVideoCapture的源有效)。

InstanceSegmentation 参数详解

本 Solution 的公开参数由三部分组成,分别来自 docs/macros/solutions-args.md、docs/macros/solutions-track-args.md 与 docs/macros/visualization-args.md 三份宏定义文件,其默认值与SolutionConfig保持一致。

通用参数

ArgumentTypeDefaultDescription
modelstrNone指向一个 Ultralytics YOLO 模型文件的路径。对InstanceSegmentation而言应使用-seg分割模型,未指定时默认加载yolo26n-seg.pt
line_widthint2Solution 绘制的框线、掩码轮廓与文本线条的粗细。
verboseboolTrue开启后,每帧处理完毕会打印输入尺寸、类别计数与处理耗时;追踪调用本身始终是静默的。

line_width在代码中直接决定掩码与标注的绘制观感;verbose会驱动 solutions.py 中基于Counter(self.clss)的逐帧日志输出。

追踪参数(可复用track参数)

ArgumentTypeDefaultDescription
trackerstr'botsort.yaml'指定追踪算法。内置选项:botsort.yamlbytetrack.yamlocsort.yamldeepocsort.yamlfasttrack.yamltracktrack.yaml,对应配置文件位于 ultralytics/cfg/trackers/ 目录。
conffloat0.25检测置信度阈值;值越低能追踪到越多对象,但可能引入误检。
ioufloat0.7交并比(IoU)阈值,用于过滤重叠检测框。
classeslistNone按类别索引过滤结果。例如classes=[0, 2, 3]只追踪指定的类。
devicestrNone推理设备,如cpucuda:00,用于在 CPU、指定 GPU 或其它计算设备间切换。

除上表外,BaseSolution内部还会把max_det(单帧最大检测数,默认300)、quantize(推理精度,如16表示 FP16,替代已废弃的half)与imgsz(推理输入尺寸,默认640)透传给追踪调用。实际需要时也可显式传入这些参数,例如在低显存设备上把max_det调小或调整imgsz以换取吞吐。

可视化参数

ArgumentTypeDefaultDescription
showboolFalseTrue时在窗口中实时展示标注结果,便于开发调试期即时反馈。Python 中默认为False
show_confboolTrue在标签旁展示每个检测的置信度,可直观体现模型把握程度。
show_labelsboolTrue在可视化输出中展示每个检测的类别标签。
show_boxesboolTrue在检测对象周围绘制边界框,便于视觉定位。

上述三个show_*开关在 instance_segmentation.py 中初始化,并在results.plot(...)时作为conf=labels=boxes=参数传入。将三者全部设为False即可得到"只画掩码、不带任何标注文字与边框"的纯净输出。

常见参数组合示例

from ultralytics import solutions isegment = solutions.InstanceSegmentation( model="yolo26m-seg.pt", # 换用更大更强的分割模型 classes=[0, 2], # 只处理 person 与 car conf=0.3, # 提高置信度阈值,减少误检 iou=0.5, # 更严格的去重叠 tracker="bytetrack.yaml", # 使用 ByteTrack 追踪器 show=False, # 关闭窗口(服务器场景) show_labels=True, # 保留类别标签 show_conf=False, # 不展示置信度 line_width=3, # 加粗绘制线条 )

提示:modelclassesconfioutracker等参数都可通过命令行key=value的形式传给yolo solutions isegment,无需修改任何代码即可快速换参试验。

多源输入与输出复用

InstanceSegmentation底层使用 OpenCV 处理帧,因此你可以将上一节示例中的视频源替换为:

  • USB / 内置摄像头cv2.VideoCapture(0)
  • RTSP / HLS 网络流cv2.VideoCapture("rtsp://user:pass@ip:554/stream")
  • 图片序列:循环读取目录帧或直接对单张图片调用一次isegment(im0)

每帧调用返回的SolutionResults(定义见 solutions.py)除plot_imtotal_tracks外,还包含speed字段(区分tracksolution两段耗时),可供性能监控或延迟统计使用;str(results)会以key=value形式打印所有非空字段,方便接入日志系统。

应用场景

结合像素级轮廓与跨帧 ID 追踪,YOLO26 实例分割追踪方案在以下行业已有明确落点:

垃圾分类与回收

在垃圾处理设施中用于识别并分拣不同材质——塑料、纸板、金属及其它可回收物。模型能够以较高精度分割各类废弃物,使自动化分拣系统更高效地运转,减少人工介入。

自动驾驶

在自动驾驶场景中,实例分割帮助在像素层面识别并持续追踪行人、车辆、交通标志等道路要素。对环境的精确理解直接服务于导航与安全决策,而 YOLO 系模型实时性较好,适合这类强时效应用。

医学影像

实例分割可在医学扫描图中圈出肿瘤、器官或细胞结构。YOLO26 对对象边界的精细勾画能力,使其对辅助诊断与治疗规划具有参考价值。

施工现场监控

在工地场景中,对重型机械、工人与物料进行实例级追踪,可用于监控设备位置、探测人员进入危险区域的行为,同时辅助优化施工流程与资源调度。

常见问题(FAQ)

如何用 Ultralytics YOLO26 做实例分割?

初始化一个-seg版本的 YOLO26 模型,然后逐帧送入视频即可。简化示例如下:

import cv2 from ultralytics import solutions cap = cv2.VideoCapture("path/to/video.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)) video_writer = cv2.VideoWriter("instance-segmentation.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h)) # 初始化 InstanceSegmentation isegment = solutions.InstanceSegmentation( show=True, # 实时展示输出 model="yolo26n-seg.pt", # YOLO26 分割模型 ) # 处理视频 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()

更多关于分割任务本身(数据集组织、训练与推理细节)的内容,可阅读 YOLO 分割任务指南。

实例分割与目标追踪有什么区别?

实例分割负责在单帧图像内识别并勾画每个独立对象,为每个对象赋予唯一的标签与掩码;目标追踪则在此基础上,为对象在视频帧之间分配一致的 ID,从而持续跟踪同一对象。两者在 YOLO26 方案中天然结合——InstanceSegmentation内部先走model.track拿到含 Track ID 的检测,再叠加像素掩码绘制,因此可以同时获得精确的边界信息和随时间连续的对象运动轨迹。

为什么选择 YOLO26 而不是 Mask R-CNN / Faster R-CNN?

依据官方指南的说明,Ultralytics YOLO26 相比 Mask R-CNN、Faster R-CNN 等方案在易用性与实时性上更具优势:YOLO 系列采用单阶段检测,整图一次前向即可同时得到检测与分割结果,推理吞吐更高,同时与 Ultralytics 的模型管理、数据集与训练流水线无缝衔接。需要强调的是,具体是否"更快更准"取决于硬件、输入尺寸与评测数据,实际选型时应结合自身基准测试判断。文档同时提到其与 Ultralytics 平台的集成能力,便于用户统一管理模型、数据集与训练任务。

Ultralytics 提供了哪些适合训练实例分割模型的数据集?

官方提供了若干带像素级标注的分割数据集,包括 COCO-Seg、用于快速验证的小型子集 COCO8-Seg、面向包裹分拣的 Package-Seg 以及裂缝检测的 Crack-Seg。若要做更垂直的定制任务,也可按照 Ultralytics 数据集格式自行构建自定义数据集。完整的数据集说明与用法参见 Ultralytics 数据集文档。

关键文件速查

以下为本文涉及的核心源码与配置位置,便于深入阅读:

用途文件
Solution 实现类ultralytics/solutions/instance_segmentation.py
基类与结果对象ultralytics/solutions/solutions.py
统一配置容器ultralytics/solutions/config.py
Solutions 导出清单ultralytics/solutions/init.py
CLIisegment映射ultralytics/cfg/init.py
追踪器配置文件ultralytics/cfg/trackers/
参数宏定义docs/macros/solutions-args.md、docs/macros/solutions-track-args.md、docs/macros/visualization-args.md
单元测试(含无掩码边界场景)tests/test_solutions.py
CLI 冒烟测试tests/test_cli.py

结语

通过ultralytics.solutions.InstanceSegmentation,你可以在十余行代码内完成"YOLO26 分割推理 → 逐实例掩码渲染 → 跨帧追踪"的完整闭环,并通过modelclassestrackerconfiou及各类可视化开关覆盖从快速演示到生产部署的不同需求。理解其背后BaseSolution+SolutionConfig+model.track的实现结构,将帮助你在ObjectCounterHeatmapSpeedEstimator等同族 Solution 之间举一反三,灵活搭建更复杂的视频理解应用。

【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/8 23:44:08

OpenMAIC 多智能体协作实测:四种交互模式、MCP接入与排坑指南

上个月给团队做 AI 内部培训,我把 OpenMAIC 搬进了课堂。这个项目最打动我的点不是“又一个大模型聊天壳”,而是它把多智能体之间怎么沟通、怎么分工、怎么互相制约这件事,真正做成了一块可以反复实验的试验田。以前我讲 Agent 开发&#xff…

作者头像 李华
网站建设 2026/9/8 23:43:08

机器人测试流程设计:从立项到量产的四大关键锚点

1. 项目概述:这不是一份测试用例清单,而是一张量产前的“风险地图”“聊聊机器人测试流程:从立项到量产,一个测试工程师的思考(一)”——这个标题里藏着三个关键信号:机器人、测试流程、从立项到…

作者头像 李华
网站建设 2026/9/8 23:43:06

查重与AIGC双标红?虎贲双向合规改写方案全解析

如果你最近正在赶毕业论文、期刊返修稿,大概率对这几个词特别敏感:查重率、AIGC疑似率。前者是学术不端的老检测指标,后者是近两年新增的AI生成内容检测指标。很多人吭哧吭哧把重复率从38%改到12%,一提交,又弹出一个AI…

作者头像 李华
网站建设 2026/9/8 23:42:52

用CD74HC4067扩展ADC采集的完整实战:电路、代码与调试坑

上礼拜调试一块多路采集板,MCU内置ADC只有8个通道,传感器却有14路,逼得我把吃灰的CD74HC4067翻出来扩通道。4067这种16选1模拟开关,在嵌入式里算是最朴素的ADC扩展方案,几毛钱一颗、控制逻辑简单,但真把它调…

作者头像 李华
网站建设 2026/9/8 23:41:18

STM32C5硬件I²C轮询读取LSM6DSVE陀螺仪数据实战

1. 项目概述:为什么轮询读取LSM6DSVE陀螺仪数据在STM32C5上依然值得深挖 你手上有一块刚到手的STM32C5开发板,芯片是ST新推出的Cortex-M33内核、带TrustZone安全扩展的高性能MCU,主频跑得比F4还稳,外设资源也更丰富。但当你想把板…

作者头像 李华
网站建设 2026/9/8 23:40:10

DBeaver 24.1.5免安装版实战:从解压到数据库连接全指南

简介:DBeaver是一款流行的通用数据库管理工具,这份资源为24.1.5社区版免安装压缩包,面向需要在Windows平台快速部署数据库客户端的开发、测试与运维人员,省去安装向导、解压后即可运行。压缩包共1031个文件,体积约120.…

作者头像 李华