别再手动画图了!用Python脚本一键生成YOLO results.txt的PR曲线对比图(附完整代码) 别再手动画图了用Python脚本一键生成YOLO results.txt的PR曲线对比图附完整代码在目标检测领域的研究和工程实践中PR曲线Precision-Recall Curve是评估模型性能的核心指标之一。无论是撰写学术论文还是技术报告研究者经常需要对比多个算法在不同类别上的表现。传统的手动处理方式——从results.txt提取数据、用Excel或Matlab绘制图表——不仅耗时耗力还容易在数据处理环节引入人为错误。本文将介绍一个全自动化的Python解决方案只需简单配置即可一键生成专业级PR曲线对比图。1. 为什么需要自动化PR曲线生成工具目标检测模型的评估通常涉及多个算法和多个类别的横向对比。以YOLO系列为例研究者可能需要同时分析YOLOv5、YOLOv8、DETR等算法在行人、车辆、交通标志等不同类别上的表现。手动处理这类任务存在三大痛点数据提取繁琐每个results.txt文件包含大量信息需要精确截取特定段落图表一致性差手动绘图难以保证多张图表采用统一的样式和比例修改成本高当需要新增算法或调整显示样式时几乎需要推倒重来我们的自动化脚本解决了这些问题# 核心功能演示 import matplotlib.pyplot as plt from pathlib import Path def auto_plot_pr_curve(results_dir, output_dir): 自动处理results文件夹下所有结果文件 # 自动识别算法名称无需手动维护列表 algorithm_files list(Path(results_dir).glob(*.txt)) # 自动提取类别和PR数据 # 自动生成统一风格的对比图表 # 自动保存到指定目录2. 环境配置与脚本基础使用2.1 准备工作环境确保你的Python环境已安装以下库pip install matplotlib numpy pandas推荐使用Python 3.8环境主要依赖库版本要求库名称最低版本推荐版本matplotlib3.5.03.7.1numpy1.21.01.24.3pandas1.3.02.0.22.2 文件结构准备按照以下结构组织你的实验数据project_folder/ │── scripts/ │ └── auto_pr_plotter.py # 我们的自动化脚本 └── results/ ├── YOLOv5s.txt ├── YOLOv8m.txt ├── DETR.txt └── ...3. 核心脚本详解与定制化配置3.1 算法与类别配置脚本支持两种配置方式自动识别模式推荐# 自动识别results目录下的所有.txt文件作为算法 algorithm_files [f.stem for f in Path(results).glob(*.txt)]手动指定模式algorithm_names [ YOLOv5s, YOLOv8m, DETR, OurMethod # 自定义算法名称 ]类别名称通过正则表达式自动提取也支持手动指定classes [person, car, traffic_light] # 你的目标类别3.2 可视化样式定制脚本提供多种专业配色方案可选# 科学期刊风格 sci_style { colors: [#1f77b4, #ff7f0e, #2ca02c, #d62728], font: Times New Roman, dpi: 600 } # 会议报告风格 conf_style { colors: [#003f5c, #58508d, #bc5090, #ff6361], font: Arial, dpi: 300 }通过修改plot_style参数快速切换plot_pr_curves(stylesci_style) # 使用学术期刊风格4. 高级功能与异常处理4.1 多图表输出模式支持三种输出布局单类别单图表默认每个类别生成单独的PNG文件多类别子图所有类别合并到一个PDF文件交互式HTML生成可交互的网页版图表启用多子图模式plot_pr_curves( output_modesubplots, figsize(12, 8), # 控制整体尺寸 ncols2 # 每行显示的子图数量 )4.2 常见报错解决方案文件编码问题# 强制指定UTF-8编码 with open(file_path, r, encodingutf-8) as f: content f.read()数据格式异常def safe_float_convert(value): 安全转换字符串为浮点数 try: return float(value.strip()) except ValueError: return 0.0 # 或采取其他恢复措施路径问题处理# 跨平台路径处理 output_dir Path(output).resolve() output_dir.mkdir(exist_okTrue) # 自动创建目录5. 完整代码实现与扩展建议以下是脚本的核心结构框架import re from pathlib import Path import matplotlib.pyplot as plt class PRPlotter: def __init__(self, results_dirresults): self.results_dir Path(results_dir) self._validate_dir() def _validate_dir(self): if not self.results_dir.exists(): raise FileNotFoundError(f目录不存在: {self.results_dir}) def parse_results(self): 解析所有结果文件 # 实现细节省略... def plot_individual(self, output_diroutput): 生成单类别图表 # 实现细节省略... def plot_subplots(self, output_filecomparison.pdf): 生成多子图合并文件 # 实现细节省略... if __name__ __main__: plotter PRPlotter() plotter.parse_results() plotter.plot_individual() # plotter.plot_subplots()扩展建议集成到训练流水线中在模型训练完成后自动生成评估图表添加AP值表格输出功能便于直接复制到论文中支持自定义置信度阈值分析