YOLOv9 实例分割与全景分割:两条命令上手指南

YOLOv9 实例分割与全景分割:两条命令上手指南

【免费下载链接】yolov9 Implementation of paper - YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information 【免费下载链接】yolov9 项目地址: https://gitcode.com/GitHub_Trending/yo/yolov9

产线质检时,只框出缺陷位置远远不够,你还需要像素级的区域标注,才能算出缺陷面积并指导返修。本文讲 YOLOv9 项目里的分割能力,覆盖实例分割和全景分割两类任务,以及各自的入口脚本、调参要点和结果验证方式。

为什么从检测走向分割

检测的输出是边界框加类别标签,它只回答“在哪里”,无法描述物体的轮廓或占据图像中的哪片区域。实例分割(Instance Segmentation)为每个实例额外输出一张掩码,让你看到每个物体逐像素的边界;全景分割(Panoptic Segmentation)则进一步把背景中的“东西”(stuff,如地面、天空)和前景“事物”区分开,给整张图统一标注。换句话说,从检测到分割,是在“位置”之上多给了一个“区域”维度,落到产线上就是能从“这里有个划痕”推进到“这个划痕的形状和面积是多少”。三种任务的入口脚本与能力对比如下:

维度检测实例分割全景分割
输出边界框+类别边界框+掩码+类别整图掩码(前景+背景)
背景处理不涉及只处理前景前景与 stuff 背景一起输出
典型场景安防监控、计数工业质检、面积测量自动驾驶、场景理解
入口脚本detect.pysegment/predict.pypanoptic/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 背景掩码。

下图就是这套多出来的层给同一张图带来的四种输出形态:

YOLOv9 多任务分割输出对比:检测、实例分割、语义分割、全景分割

从单张图到批量跑

验证完单张图之后,把 --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 换成你的模型权重与数据路径,就能直接跑起来。

【免费下载链接】yolov9 Implementation of paper - YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information 【免费下载链接】yolov9 项目地址: https://gitcode.com/GitHub_Trending/yo/yolov9

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

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值