YOLOv9 实例分割与全景分割:两条命令上手指南
产线质检时,只框出缺陷位置远远不够,你还需要像素级的区域标注,才能算出缺陷面积并指导返修。本文讲 YOLOv9 项目里的分割能力,覆盖实例分割和全景分割两类任务,以及各自的入口脚本、调参要点和结果验证方式。
为什么从检测走向分割
检测的输出是边界框加类别标签,它只回答“在哪里”,无法描述物体的轮廓或占据图像中的哪片区域。实例分割(Instance Segmentation)为每个实例额外输出一张掩码,让你看到每个物体逐像素的边界;全景分割(Panoptic Segmentation)则进一步把背景中的“东西”(stuff,如地面、天空)和前景“事物”区分开,给整张图统一标注。换句话说,从检测到分割,是在“位置”之上多给了一个“区域”维度,落到产线上就是能从“这里有个划痕”推进到“这个划痕的形状和面积是多少”。三种任务的入口脚本与能力对比如下:
| 维度 | 检测 | 实例分割 | 全景分割 |
|---|---|---|---|
| 输出 | 边界框+类别 | 边界框+掩码+类别 | 整图掩码(前景+背景) |
| 背景处理 | 不涉及 | 只处理前景 | 前景与 stuff 背景一起输出 |
| 典型场景 | 安防监控、计数 | 工业质检、面积测量 | 自动驾驶、场景理解 |
| 入口脚本 | detect.py | segment/predict.py | panoptic/predict.py |
五分钟跑通第一个分割 Demo
在仓库根目录执行下面这条命令,就能拿到第一个分割结果。
python segment/predict.py --weights gelan-c-seg.pt --source data/images/horses.jpg
标注图会写到项目根目录下的 runs/predict-seg/exp/,直接打开与输入图同名的 jpg 就能看到掩码叠加效果。如果你跑的时候带了 --save-txt,还可以打开 labels/ 子目录里同名的 txt,查看每个实例的多边形坐标。
最影响效果的参数是 --conf-thres,置信度阈值,默认 0.25,想减少误检就调高它。
模型里多出来的那几层
相对检测头,分割头多出的是一套掩码分支:先用卷积预测一小组掩码原型通道,再让每个尺度上的解码器结合实例的框级特征,还原出整张图的掩码。也就是说,检测只需要一组框和类别的回归层,分割则在多尺度特征之上叠了一层“原型+解码”的结构。实例分割的头在 models/segment/yolov9-c-dseg.yaml 里由 DualDSegment 模块实现,它汇总了 P2 到 P5 共 8 个层级的特征;全景版本在 models/panoptic/gelan-c-pan.yaml 中把头部换成 Panoptic,一次前向同时输出实例掩码和 stuff 背景掩码。
下图就是这套多出来的层给同一张图带来的四种输出形态:
从单张图到批量跑
验证完单张图之后,把 --source 换成目录就是批量处理。
python segment/predict.py --weights gelan-c-seg.pt --source data/images/ --save-txt --exist-ok
落地时最常动的三个调优点:
- 置信度阈值:改 segment/predict.py 里的
--conf-thres(默认 0.25),调高可过滤低置信实例,调低能召回更多小目标。 - 掩码分辨率:由
--imgsz控制(默认 640),想要更精细的掩码边缘就追加--retina-masks,开启原图分辨率渲染。 - 输出格式:
--save-txt把归一化多边形坐标写到labels/子目录,再加--save-conf会在每行附上置信度。
效果怎么验证
跑完之后,结果目录默认生成两类产物:叠加了掩码和框的同名标注图,以及(如果你传了 --save-txt)每实例一行、含类别和多边形坐标的 txt 标签文件。控制台结尾还会打印各阶段耗时和结果目录路径,可以直接核对吞吐是否满足产线要求。
这张示例图里,四匹相互遮挡的马被逐个区分开,没有发生合并,置信度都在 0.90 以上。标注框边缘紧贴马匹身体轮廓,在身体交叠处两个个体的分界依然清晰。
下一步可以做什么
跑通 Demo 之后,想继续改的地方都在项目里。
- 改网络结构:编辑
models/segment/与models/panoptic/下的 YAML 文件即可增删头部层数,不用动 Python 代码。 - 换损失函数:实例分割的掩码损失在
utils/segment/loss.py,全景分割的在utils/panoptic/loss.py,按你的任务权重直接改。 - 接自己的数据:仿照
data/coco.yaml准备一份数据集配置,再用segment/train.py启动训练。
回到开头的产线场景:缺陷区域像素级标注出来后,面积统计就能直接进 MES 系统。把上面命令里的 --weights 和 --source 换成你的模型权重与数据路径,就能直接跑起来。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考





