app介绍网站模板网站模
2026/2/5 19:40:20 网站建设 项目流程
app介绍网站模板,网站模,wordpress用户量上限,自己的免费网站空间YOLOv9评估模块怎么用#xff1f;metrics计算与seaborn可视化 YOLOv9 官方版训练与推理镜像#xff0c;不只是一个能跑起来的环境#xff0c;更是一个开箱即用的完整评估工作台。很多用户在完成模型训练后#xff0c;面对 val.py 或 test.py 生成的一堆 .txt 和 .json 文件…YOLOv9评估模块怎么用metrics计算与seaborn可视化YOLOv9 官方版训练与推理镜像不只是一个能跑起来的环境更是一个开箱即用的完整评估工作台。很多用户在完成模型训练后面对val.py或test.py生成的一堆.txt和.json文件不知所措——这些文件里到底藏着哪些指标mAP 是怎么算出来的Precision-Recall 曲线长什么样混淆矩阵能不能画出来本文不讲原理推导不堆公式只带你用最直接的方式从镜像里已有的代码出发提取真实评估结果、计算核心 metrics、用 seaborn 做出清晰专业的可视化图表。你不需要重装依赖、不用改配置、甚至不用下载额外数据——所有操作都在/root/yolov9目录下5 分钟内就能看到第一张 PR 曲线图。1. 先搞清楚YOLOv9 的评估输出在哪、是什么YOLOv9 官方代码中评估流程主要由val.py驱动它会在验证阶段自动保存三类关键输出预测结果文件存于runs/val/{name}/labels/每个.txt对应一张图的检测框class x_center y_center width height confidenceCOCO 格式 JSONruns/val/{name}/predictions.json标准 COCO detection 格式供 pycocotools 计算metrics 汇总文件runs/val/{name}/results.txt纯文本包含 mAP0.5、mAP0.5:0.95、Precision、Recall、F1 等核心数值但注意官方val.py默认不生成混淆矩阵、不保存 PR 曲线点、不输出 per-class 指标表格——这些都需要我们自己调用内部函数或补一小段代码来提取。好消息是镜像里已经预装了seaborn、pandas、matplotlib所有绘图能力就绪只差一步“唤醒”。2. 手动提取 metrics从 results.txt 到结构化 DataFrameresults.txt是一行多列的空格分隔文本格式固定但不易读。我们先把它变成可分析的表格。2.1 解析 results.txt 获取基础指标进入镜像后执行以下命令查看当前评估结果假设你已完成一次验证cat runs/val/yolov9-s/results.txt你会看到类似这样的输出截取前几行Class Images Labels P R mAP50 mAP50-95: all 10000 32456 0.782 0.741 0.762 0.521 class0 1000 3245 0.791 0.748 0.769 0.528 class1 1000 3245 0.773 0.734 0.755 0.514现在我们写一段轻量 Python 脚本把这堆文字转成 pandas DataFrame方便后续筛选和绘图# save as parse_results.py in /root/yolov9 import pandas as pd import re def parse_results_txt(path): with open(path, r) as f: lines f.readlines() # 跳过表头行找实际数据行 data_lines [] for line in lines: if re.match(r^\s*(all|class\d)\s, line.strip()): parts line.strip().split() if len(parts) 6: # Class, Images, Labels, P, R, mAP50, mAP50-95 row { class: parts[0], images: int(parts[1]), labels: int(parts[2]), precision: float(parts[3]), recall: float(parts[4]), mAP50: float(parts[5]), mAP50-95: float(parts[6]) if len(parts) 6 else 0.0 } data_lines.append(row) return pd.DataFrame(data_lines) # 使用示例 df parse_results_txt(runs/val/yolov9-s/results.txt) print(df)运行它python parse_results.py你会得到一个清晰的表格比如classimageslabelsprecisionrecallmAP50mAP50-95all10000324560.7820.7410.7620.521person100032450.7910.7480.7690.528car100032450.7730.7340.7550.514这就是你所有模型的核心性能快照。你可以用df.loc[df[class] person][mAP50].values[0]快速获取某类 mAP也可以用df.describe()看整体分布。3. 深挖一步绘制 Precision-Recall 曲线PR Curveresults.txt只给单点值P/R 在默认置信度阈值 0.001 下但 PR 曲线需要不同置信度下的 P-R 对。YOLOv9 的val.py内部其实已计算了整条曲线只是没默认保存。我们只需复用其compute_ap函数并手动遍历阈值。3.1 复用 val.py 中的 AP 计算逻辑打开/root/yolov9/utils/metrics.py找到ap_per_class函数——它返回(p, r, ap, f1, unique_classes)其中p和r就是各阈值下的 Precision 和 Recall 数组。我们写一个新脚本plot_pr_curve.py# save as plot_pr_curve.py in /root/yolov9 import numpy as np import matplotlib.pyplot as plt import seaborn as sns from utils.metrics import ap_per_class from utils.general import box_iou from pathlib import Path import torch # 设置 seaborn 主题 sns.set_style(whitegrid) plt.rcParams[font.size] 12 def load_predictions_and_targets(val_dir): 从 runs/val/{name} 加载 pred 和 target pred_dir Path(val_dir) / labels gt_dir Path(/path/to/your/val/labels) # 替换为你的真实验证集标签路径 # 实际使用时建议用 val.py 生成的 targets.npz若存在或从 dataset 加载 # 此处为简化演示我们跳过加载直接说明逻辑 print( 提示真实使用需提供真实 GT 标签路径) print( 建议方式运行 val.py 时加 --save-json它会自动生成 targets.npz) return None, None def plot_pr_curve_for_class(precisions, recalls, class_nameall, axNone): if ax is None: fig, ax plt.subplots(1, 1, figsize(6, 5)) ax.plot(recalls, precisions, marker., labelf{class_name}, linewidth2) ax.set_xlabel(Recall) ax.set_ylabel(Precision) ax.set_title(fPrecision-Recall Curve — {class_name}) ax.set_xlim(0, 1) ax.set_ylim(0, 1.05) ax.grid(True, alpha0.3) ax.legend() return ax # 示例假设你已有 p, r 数组来自 ap_per_class 输出 # 这里我们用模拟数据展示绘图效果 np.random.seed(42) recalls np.linspace(0, 1, 20) precisions 0.8 - 0.3 * recalls 0.1 * np.random.randn(20) # 模拟下降趋势 precisions np.clip(precisions, 0.1, 1.0) # 绘图 fig, ax plt.subplots(1, 1, figsize(6, 5)) plot_pr_curve_for_class(precisions, recalls, person, ax) plt.tight_layout() plt.savefig(pr_curve_person.png, dpi300, bbox_inchestight) plt.show()运行后你会得到一张干净专业的 PR 曲线图。虽然上面用了模拟数据但真实场景中你只需在val.py末尾加两行代码就能拿到真实的p和r# 在 val.py 最后添加 from utils.metrics import ap_per_class p, r, ap, f1, _ ap_per_class(*stats) # stats 来自 val.py 内部 np.savez(pr_data.npz, pp, rr, apap) # 保存为 numpy 文件然后用np.load(pr_data.npz)读取即可绘图。整个过程无需修改模型结构不增加训练开销。4. 更进一步绘制混淆矩阵Confusion MatrixYOLOv9 官方未提供混淆矩阵可视化但它在val.py中已计算了confusion_matrix对象类型为utils.metrics.ConfusionMatrix。我们只需调用其.matrix属性并用 seaborn 绘图。4.1 一行命令生成混淆矩阵热力图创建plot_confusion_matrix.py# save as plot_confusion_matrix.py in /root/yolov9 import numpy as np import seaborn as sns import matplotlib.pyplot as plt from utils.metrics import ConfusionMatrix import torch # 假设你已运行 val.py 并保存了 confusion_matrix.pkl或从 val.py 中提取 # 这里我们演示如何从 .npz 或直接构造 matrix 绘图 # 方式一如果你在 val.py 中加了保存逻辑 # np.savez(confusion_matrix.npz, matrixcm.matrix.cpu().numpy(), namesnames) # 方式二用模拟数据演示替换为你的真实 matrix n_classes 3 cm_matrix np.array([ [85, 5, 2], # class0: 85 正确5 错成 class12 错成 class2 [ 3, 92, 1], # class1 [ 4, 0, 88] # class2 ]) class_names [person, car, dog] # 绘图 plt.figure(figsize(6, 5)) sns.heatmap( cm_matrix, annotTrue, fmtd, cmapBlues, xticklabelsclass_names, yticklabelsclass_names, cbar_kws{label: Count} ) plt.title(Confusion Matrix) plt.xlabel(Predicted) plt.ylabel(True) plt.tight_layout() plt.savefig(confusion_matrix.png, dpi300, bbox_inchestight) plt.show()运行后一张带数字标注的蓝色热力图就生成了。你会发现错检最多的是 person → car5 次而 car → person 只有 3 次——这提示你可能需要加强 person 类的小目标特征学习或调整 anchor 匹配策略。5. 实用技巧一键生成评估报告 PDF含所有图表把上面三步整合就能生成一份完整的评估报告。我们写一个generate_report.py# save as generate_report.py in /root/yolov9 from fpdf import FPDF import os from PIL import Image # 创建 PDF pdf FPDF() pdf.add_page() pdf.set_font(Arial, size14) pdf.cell(200, 10, txtYOLOv9 Model Evaluation Report, lnTrue, alignC) pdf.ln(10) # 添加 metrics 表格用 parse_results.py 输出 pdf.set_font(Arial, size12) pdf.cell(200, 10, txt1. Core Metrics Summary, lnTrue) pdf.ln(5) # 插入 results.txt 截图或用 text 表格此处简化为文字 pdf.set_font(Courier, size10) with open(runs/val/yolov9-s/results.txt, r) as f: for line in f.readlines()[:10]: # 前10行 pdf.cell(0, 6, txtline.strip(), lnTrue) pdf.ln(10) # 插入图表 for img in [pr_curve_person.png, confusion_matrix.png]: if os.path.exists(img): pdf.image(img, w180) pdf.ln(10) pdf.output(yolov9_evaluation_report.pdf) print( Report saved as yolov9_evaluation_report.pdf)注意镜像中未预装fpdf和PIL但安装仅需两行pip install fpdf pillow运行后一份带标题、指标表格、PR 曲线、混淆矩阵的 PDF 报告就生成了——适合发给同事、存档、或作为模型迭代的 baseline 记录。6. 总结YOLOv9 评估不是黑盒而是可触摸的工具链YOLOv9 的评估模块从来不是只能看一眼results.txt就结束的流程。它是一套完整的能力组合results.txt是你的性能快照用几行 pandas 就能结构化ap_per_class是你的曲线引擎配合 seaborn 就能产出专业 PR 图ConfusionMatrix是你的诊断显微镜热力图直指模型弱点再加一点胶水代码PDF 报告、自动邮件通知、CI/CD 中断阈值检查……全都可以落地。你不需要成为 PyTorch 专家也不用重写 metrics 模块。镜像里已有的代码、已装好的 seaborn、已配好的 conda 环境就是你最好的起点。下一步建议你① 先跑通parse_results.py确认能读出自己的 mAP② 修改val.py加一行np.savez(pr_data.npz, ...)拿到真实 PR 数据③ 用plot_confusion_matrix.py查看哪两类最容易混淆④ 最后把三个脚本打包成eval_all.sh一键生成全部结果。评估的价值不在于数字多高而在于你能否快速定位问题、验证改进、形成闭环。YOLOv9 已经把门推开剩下的路你来走。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询