找回密码
 立即注册
首页 业界区 业界 手搓一个可以自动化对比yolo模型性能曲线的工具 ...

手搓一个可以自动化对比yolo模型性能曲线的工具

岑韬哎 2025-10-1 17:59:04

视频演示

手搓一个可以自动化对比yolo模型性能曲线的工具


 
大家好,我是Coding茶水间。
今天分享一个实用工具——yolo模型性能曲线的工具。
它可以帮助你在论文写作或模型评估中,轻松对比不同YOLO版本(如YOLOv5、YOLOv8、YOLOv11、YOLOv12)的训练结果曲线。
工具基于PyQt5开发,支持加载多个CSV文件、自定义曲线颜色、修改图例标签、调整坐标轴,并保存高清图片。
这个工具源于日常需求:训练多个YOLO模型后,每个模型都有独立的results.csv文件,包含epoch、loss、precision、recall、mAP等指标。
如果要对比曲线,通常需要手动用Matplotlib或Excel处理,很麻烦。
现在,用这个GUI工具,一键加载、多曲线叠加、个性化调整,超级方便!
1.png

工具功能亮点


  • 多文件加载:支持批量选择YOLO训练生成的results.csv文件。
  • 指标选择:下拉菜单切换显示召回率(Recall)、精准度(Precision)、mAP50、mAP50-95、F1指数,以及训练/验证集的Box Loss、Class Loss、DFL Loss。
  • 曲线自定义:为每条曲线设置颜色、修改图例标签(默认用文件名)。
  • 图表调整:开启/关闭网格线,编辑X/Y轴标签和标题。
  • 保存图片:一键导出PNG高清图,插入论文或报告。
  • 跨平台支持:自动适配Windows、macOS、Linux的中文字体显示。
使用步骤


  • 运行工具:安装PyQt5、pandas、matplotlib后,执行Python脚本启动GUI。
  • 加载文件:点击“加载 CSV 文件”,多选YOLO results.csv(例如YOLOv5、YOLOv8等)。
  • 设置曲线:在文件列表选中文件,点击“设置曲线颜色”选择颜色;点击“修改图例标签”输入新名称(如“YOLOv5”)。
  • 选择指标:从下拉框选指标,如“召回率 (Recall)”,点击“更新图表”。
  • 调整轴标题:输入X轴(如“迭代次数”)、Y轴(如“值”)、标题(如“召回率对比曲线”),点击“更新坐标轴”。
  • 保存:满意后点击“保存图片”,导出到本地。
2.png

例如,对比YOLOv12和YOLOv8的mAP50-95曲线:加载两个CSV,设不同颜色,选mAP50-95,调整标题为“不同YOLO版本mAP对比”,保存插入论文。曲线更直观,突出改进点!
3.png

代码实现关键点

工具核心是PyQt5的QMainWindow类,结合Matplotlib的FigureCanvas嵌入绘图。数据用pandas处理CSV。以下是关键代码片段解释
1. 初始化和UI布局

在__init__中设置窗口,自动适配字体(Windows用SimHei,macOS动态查找中文字体,Linux用WenQuanYi Micro Hei),避免中文乱码。
  1. system = platform.system()
  2. if system == 'Windows':
  3.     plt.rcParams['font.sans-serif'] = ['SimHei']
  4. # ... 其他系统处理
复制代码
4.gif
UI分左侧控制面板(按钮、列表、下拉框)和右侧图表区(画布、输入框)。用QHBoxLayout分栏,stretch控制比例。
2. 文件加载和数据存储

load_files方法用QFileDialog批量选CSV,读入pandas DataFrame。存储在self.data_files字典:键为文件路径,值为(数据, 颜色, 标签)。
  1. data = pd.read_csv(file)
  2. label = os.path.splitext(os.path.basename(file))[0]  # 提取文件名作为默认标签
  3. self.data_files[file] = (data, QColor(0, 0, 255), label)  # 默认蓝色
复制代码
5.gif
文件列表用QListWidget显示,选中项可改颜色/标签。
3. 曲线绘制更新

update_plot清空Figure,创建ax subplot。根据选中指标(如"metrics/recall(B)"),为每个数据绘制plot线。F1指数需计算:F1 = 2 * (P * R) / (P + R)。
  1. metric_key = self.get_metric_key(metric)  # 映射中文到列名
  2. if metric_key == "F1":
  3.     data["F1"] = 2 * (data["metrics/precision(B)"] * data["metrics/recall(B)"]) / (...)
  4. ax.plot(data["epoch"], data[metric_key], label=label, color=color_hex)
  5. ax.legend()  # 添加图例
  6. ax.grid(self.grid_toggle.isChecked())  # 网格开关
复制代码
6.gif
颜色从QColor转RGB/hex。update_axis更新xlabel/ylabel/title。
4. 保存和辅助功能

save_image用Figure.savefig导出高清PNG。edit_legend_label用QInputDialog改标签。clear_selection清空数据和列表。
指标映射在get_metric_key字典,便于扩展。
  1. def update_plot(self):
  2.         """更新图表"""
  3.         self.figure.clear()
  4.         ax = self.figure.add_subplot(111)
  5.         metric = self.metric_combo.currentText()
  6.         for file, (data, color, label) in self.data_files.items():
  7.             print(label)
  8.             color_rgb = color.getRgb()[:3]
  9.             color_hex = "#{:02x}{:02x}{:02x}".format(*color_rgb)
  10.             
  11.             # 显示当前选中的指标
  12.             metric_key = self.get_metric_key(metric)
  13.             if metric_key == "F1" and "metrics/precision(B)" in data.columns and "metrics/recall(B)" in data.columns:
  14.                 data["F1"] = 2 * (data["metrics/precision(B)"] * data["metrics/recall(B)"]) / (
  15.                         data["metrics/precision(B)"] + data["metrics/recall(B)"])
  16.             if metric_key in data.columns:
  17.                 ax.plot(data["epoch"], data[metric_key], label=label, color=color_hex)
  18.         ax.set_xlabel("Epoch")
  19.         ax.set_ylabel("Value")
  20.         ax.set_title(metric)
  21.         ax.legend()
  22.         ax.grid(self.grid_toggle.isChecked())
  23.         self.canvas.draw()
复制代码
7.gif
注意事项


  • 依赖:PyQt5, pandas, matplotlib。pip安装即可。
  • CSV格式:必须是YOLO Ultralytics生成的results.csv,包含标准列如"epoch"、"metrics/recall(B)"等。
  • 扩展:可加更多指标或支持其他框架的CSV。
这个工具大大简化了YOLO多模型对比,节省时间。
也欢迎反馈改进建议,一起优化。
感谢阅读,Coding茶水间下期见!


来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册