行业资讯

深入multiyolov5源码:utils/metrics.py中语义分割评估指标的实现原理

发布时间:2026/8/23 15:40:19
深入multiyolov5源码:utils/metrics.py中语义分割评估指标的实现原理 深入multiyolov5源码utils/metrics.py中语义分割评估指标的实现原理【免费下载链接】multiyolov5joint detection and semantic segmentation, based on ultralytics/yolov5,项目地址: https://gitcode.com/gh_mirrors/mu/multiyolov5multiyolov5 是基于 ultralytics YOLOv5 的多任务模型能在一次前向推理中同时完成目标检测和语义分割。本文带你快速理解它新增的语义分割评估指标——mIoU 的计算原理以及 utils/metrics.py 中fitness2多任务选模函数的实现思路帮助新手看懂多任务模型的评估全流程。 上图来自仓库内置的 Cityscapes 测试集街景图data/images/目录这类图像正是语义分割指标的计算对象模型需要为每个像素预测一个类别道路、车辆、行人、天空等。为什么语义分割需要专门的评估指标目标检测看的是框准不准而语义分割看的是每个像素分对没有。multiyolov5 在 Cityscapes 数据集上验证时报告的核心指标就是mIoUmean Intersection over Union平均交并比s 模型验证集 mIoU 0.73测试集 0.715m 模型验证集 mIoU 0.75测试集 0.735 像上面这类通用检测图data/images/下 YOLO 官方示例图同样支持检测框 分割掩码双结果输出分割指标的计算独立于检测框。utils/metrics.py 新增了哪些评估函数原版 YOLOv5 的 utils/metrics.py 只关心检测指标P、R、mAP。multiyolov5 在此基础上做了两处关键新增作者在 README.md 的 Code Guide 第 8 条中明确说明1. mIoU 计算函数语义分割的核心指标mIoU 的直觉理解非常簡單逐类计算 IoU对第 k 类IoU 预测正确像素数 ÷ (预测该类的像素数 ∪ 真值该类的像素数)取平均对所有类别的 IoU 求平均即 mIoU实现要点与SegmentationDataset.py中的数据流配合模型输出是 [B, C, H, W] 的 logits取 argmax 得到逐像素类别图真值标签是像素值即类别号的 PNG 图data/customdata/seglabels/中可看到该格式忽略类像素值 255 或 -1不参与统计用np.bincount或布尔矩阵逐类统计交集/并集避免逐像素循环 新手提示忽略类处理不当是最常见的 mIoU 偏低原因——如果 255 像素被当成普通类别参与统计指标会被严重拉低。2. fitness2 函数多任务模型的综合体检分原版 YOLOv5 用fitness 0.1 × (mAP0.5) 0.9 × (mAP0.5:0.95)来选择最佳模型。multiyolov5 把检测指标和分割指标合并进同一个分数用于训练过程中的模型筛选fitness2 f(P, R, AP.5, AP.5:.95,mIoU)设计动机很直接如果只用检测 fitness 选 best 模型分割可能悄悄变差反过来也一样。把 mIoU 按比例并入train.py中分割精度提升才更新 best.pt的策略才有依据。 相关逻辑还涉及 utils/loss.py分割损失与 train.py每 10 轮测一次分割精度、最后 40 轮每轮测。评估数据流从图片到指标只有一条链路理解指标实现前先看清数据如何流动SegmentationDataset.py 的BaseDataset按testval模式加载图像长边 resize 到 1024 并对齐 32 的倍数标签同步缩放模型前向输出分割 logits 与检测结果两者独立成批检测走 YOLO 标准流程分割预测逐像素转类别与真值逐类求 IoU汇总成 mIoU检测预测走原版 AP 计算两者一起喂给fitness2⚠️ 作者特别区分了两种验证模式val模式快但数值偏乐观testval模式慢但指标准确——同尺寸数据集建议用 testval 得到可比的 mIoU。上图是data/customdata/下自定义数据转换示例中的 Kitti 街景说明检测侧数据YOLO 格式标签与分割侧数据PNG 掩码标签是独立加载、互不依赖的。新手快速验证3步跑通分割指标第一步准备环境pip install -r requirements.txt pip uninstall wandb第二步用官方测试图体验双任务推理python detect.py --weights ./pspv5s.pt --source data/images --conf 0.25 --img-size 1024结果保存在runs/detect/可同时看到检测框与分割颜色图。第三步在 Cityscapes 上正式评估python test.py --data cityscapes_det.yaml --segdata ./data/citys --weights ./pspv5s.pt --img-size 1024 --base-size 1024检测长边--img-size与分割长边--base-size分离设置是该项目测试脚本相对原版的新参数。给新手的 4 个实用建议#建议原因1评估时保证训练/推理尺寸一致尺寸差异会同时拉低指标和可视化质量2扩展新数据集时继承 BaseDataset重点处理像素 id → trainid 转换与忽略类映射3类别极不平衡时看逐类 IoU 而非只看 mIoUmIoU 会被大类淹没逐类指标才能定位短板4训练 832、推理 1024 属官方配置训练打印的检测指标对应 832分割指标对应 1024勿混淆总结multiyolov5 的评估体系设计思路清晰指标层utils/metrics.py 新增 mIoU 计算与fitness2多任务综合分数让检测与分割各论各、又统一选模数据层SegmentationDataset.py 提供 train/val/testval 三种模式兼顾训练效率与指标准确性入口层test.py/train_custom.py将两条数据流汇合输出完整的多任务报告理解这条数据 → 预测 → 逐类 IoU → fitness2的链路你就掌握了多任务视觉模型评估的核心也能把这套思路迁移到自己的分割项目上。【免费下载链接】multiyolov5joint detection and semantic segmentation, based on ultralytics/yolov5,项目地址: https://gitcode.com/gh_mirrors/mu/multiyolov5创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考