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,与ObjectCounter、Heatmap、SpeedEstimator等 Solution 共享同一套基础设施,统一从 ultralytics/solutions/init.py 对外导出。
从源码可以清楚看到它的工作链路:
- 模型默认值:
__init__中kwargs["model"] = kwargs.get("model", "yolo26n-seg.pt")——不传模型时自动回退到yolo26n-seg.pt(见 instance_segmentation.py)。 - 底层追踪:
BaseSolution.extract_tracks实际调用self.model.track(source=im0, persist=True, classes=self.classes, verbose=False, ...),意味着 Solution 内部默认就走"检测 + 追踪"路径,为每个实例分配 Track ID(见 solutions.py)。 - 掩码提取:
process方法中通过getattr(self.tracks, "masks", None)拿到每个实例的分割掩码。 - 绘制:当掩码存在时,利用
Results.plot(..., color_mode="instance")把每个实例渲染为独立颜色并与边界框、类别、置信度标签叠加;当无掩码(例如误用了非-seg模型)时会打印告警并直接返回原图(见 instance_segmentation.py)。 - 返回结构:
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额外使用的参数(iou、conf、device、max_det、quantize、tracker、imgsz)由BaseSolution统一收拢进self.track_add_args(见 solutions.py),在后续每帧的model.track调用中生效。
CLI 命令映射
命令行使用yolo solutions isegment即进入本 Solution,其映射关系定义在 ultralytics/cfg/init.py("isegment": "InstanceSegmentation")。CLI 场景下若未指定source,BaseSolution会自动下载官方演示视频作为默认输入源(见 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保持一致。
通用参数
| Argument | Type | Default | Description |
|---|---|---|---|
model | str | None | 指向一个 Ultralytics YOLO 模型文件的路径。对InstanceSegmentation而言应使用-seg分割模型,未指定时默认加载yolo26n-seg.pt。 |
line_width | int | 2 | Solution 绘制的框线、掩码轮廓与文本线条的粗细。 |
verbose | bool | True | 开启后,每帧处理完毕会打印输入尺寸、类别计数与处理耗时;追踪调用本身始终是静默的。 |
line_width在代码中直接决定掩码与标注的绘制观感;verbose会驱动 solutions.py 中基于Counter(self.clss)的逐帧日志输出。
追踪参数(可复用track参数)
| Argument | Type | Default | Description |
|---|---|---|---|
tracker | str | 'botsort.yaml' | 指定追踪算法。内置选项:botsort.yaml、bytetrack.yaml、ocsort.yaml、deepocsort.yaml、fasttrack.yaml、tracktrack.yaml,对应配置文件位于 ultralytics/cfg/trackers/ 目录。 |
conf | float | 0.25 | 检测置信度阈值;值越低能追踪到越多对象,但可能引入误检。 |
iou | float | 0.7 | 交并比(IoU)阈值,用于过滤重叠检测框。 |
classes | list | None | 按类别索引过滤结果。例如classes=[0, 2, 3]只追踪指定的类。 |
device | str | None | 推理设备,如cpu、cuda:0或0,用于在 CPU、指定 GPU 或其它计算设备间切换。 |
除上表外,BaseSolution内部还会把max_det(单帧最大检测数,默认300)、quantize(推理精度,如16表示 FP16,替代已废弃的half)与imgsz(推理输入尺寸,默认640)透传给追踪调用。实际需要时也可显式传入这些参数,例如在低显存设备上把max_det调小或调整imgsz以换取吞吐。
可视化参数
| Argument | Type | Default | Description |
|---|---|---|---|
show | bool | False | 为True时在窗口中实时展示标注结果,便于开发调试期即时反馈。Python 中默认为False。 |
show_conf | bool | True | 在标签旁展示每个检测的置信度,可直观体现模型把握程度。 |
show_labels | bool | True | 在可视化输出中展示每个检测的类别标签。 |
show_boxes | bool | True | 在检测对象周围绘制边界框,便于视觉定位。 |
上述三个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, # 加粗绘制线条 )提示:
model、classes、conf、iou、tracker等参数都可通过命令行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_im、total_tracks外,还包含speed字段(区分track与solution两段耗时),可供性能监控或延迟统计使用;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 分割推理 → 逐实例掩码渲染 → 跨帧追踪"的完整闭环,并通过model、classes、tracker、conf、iou及各类可视化开关覆盖从快速演示到生产部署的不同需求。理解其背后BaseSolution+SolutionConfig+model.track的实现结构,将帮助你在ObjectCounter、Heatmap、SpeedEstimator等同族 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),仅供参考