当前位置: 首页 > news >正文

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

视频演示

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

目录

视频演示

工具功能亮点

使用步骤

代码实现关键点

1. 初始化和UI布局

2. 文件加载和数据存储

3. 曲线绘制更新

4. 保存和辅助功能

注意事项


大家好,我是Coding茶水间。

今天分享一个实用工具——yolo模型性能曲线的工具。

它可以帮助你在论文写作或模型评估中,轻松对比不同YOLO版本(如YOLOv5、YOLOv8、YOLOv11、YOLOv12)的训练结果曲线。

工具基于PyQt5开发,支持加载多个CSV文件、自定义曲线颜色、修改图例标签、调整坐标轴,并保存高清图片。

这个工具源于日常需求:训练多个YOLO模型后,每个模型都有独立的results.csv文件,包含epoch、loss、precision、recall、mAP等指标。

如果要对比曲线,通常需要手动用Matplotlib或Excel处理,很麻烦。

现在,用这个GUI工具,一键加载、多曲线叠加、个性化调整,超级方便!

工具功能亮点

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

使用步骤

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

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

代码实现关键点

工具核心是PyQt5的QMainWindow类,结合Matplotlib的FigureCanvas嵌入绘图。数据用pandas处理CSV。以下是关键代码片段解释(完整代码见文末获取方式):

1. 初始化和UI布局

在__init__中设置窗口,自动适配字体(Windows用SimHei,macOS动态查找中文字体,Linux用WenQuanYi Micro Hei),避免中文乱码。

system = platform.system()
if system == 'Windows':plt.rcParams['font.sans-serif'] = ['SimHei']
# ... 其他系统处理

UI分左侧控制面板(按钮、列表、下拉框)和右侧图表区(画布、输入框)。用QHBoxLayout分栏,stretch控制比例。

2. 文件加载和数据存储

load_files方法用QFileDialog批量选CSV,读入pandas DataFrame。存储在self.data_files字典:键为文件路径,值为(数据, 颜色, 标签)。

data = pd.read_csv(file)
label = os.path.splitext(os.path.basename(file))[0]  # 提取文件名作为默认标签
self.data_files[file] = (data, QColor(0, 0, 255), label)  # 默认蓝色

文件列表用QListWidget显示,选中项可改颜色/标签。

3. 曲线绘制更新

update_plot清空Figure,创建ax subplot。根据选中指标(如"metrics/recall(B)"),为每个数据绘制plot线。F1指数需计算:F1 = 2 * (P * R) / (P + R)。

metric_key = self.get_metric_key(metric)  # 映射中文到列名
if metric_key == "F1":data["F1"] = 2 * (data["metrics/precision(B)"] * data["metrics/recall(B)"]) / (...)
ax.plot(data["epoch"], data[metric_key], label=label, color=color_hex)
ax.legend()  # 添加图例
ax.grid(self.grid_toggle.isChecked())  # 网格开关

颜色从QColor转RGB/hex。update_axis更新xlabel/ylabel/title。

4. 保存和辅助功能

save_image用Figure.savefig导出高清PNG。edit_legend_label用QInputDialog改标签。clear_selection清空数据和列表。

指标映射在get_metric_key字典,便于扩展。

def update_plot(self):"""更新图表"""self.figure.clear()ax = self.figure.add_subplot(111)metric = self.metric_combo.currentText()for file, (data, color, label) in self.data_files.items():print(label)color_rgb = color.getRgb()[:3]color_hex = "#{:02x}{:02x}{:02x}".format(*color_rgb)# 显示当前选中的指标metric_key = self.get_metric_key(metric)if metric_key == "F1" and "metrics/precision(B)" in data.columns and "metrics/recall(B)" in data.columns:data["F1"] = 2 * (data["metrics/precision(B)"] * data["metrics/recall(B)"]) / (data["metrics/precision(B)"] + data["metrics/recall(B)"])if metric_key in data.columns:ax.plot(data["epoch"], data[metric_key], label=label, color=color_hex)ax.set_xlabel("Epoch")ax.set_ylabel("Value")ax.set_title(metric)ax.legend()ax.grid(self.grid_toggle.isChecked())self.canvas.draw()

注意事项

  • 依赖:PyQt5, pandas, matplotlib。pip安装即可。
  • CSV格式:必须是YOLO Ultralytics生成的results.csv,包含标准列如"epoch"、"metrics/recall(B)"等。
  • 扩展:可加更多指标或支持其他框架的CSV。

这个工具大大简化了YOLO多模型对比,节省时间。

也欢迎反馈改进建议,一起优化。

感谢阅读,Coding茶水间下期见!

http://www.dtcms.com/a/388855.html

相关文章:

  • 海图科技双撕裂检测装置:筑牢矿用皮带运输安全防线
  • 32、语言模型训练全流程:从数据到模型的工程化实现
  • 打造一款支持 Mermaid 与 ECharts 的 Markdown 编辑器:基于 Vditor 的实战指南
  • 《算法闯关指南:优选算法-双指针》--07三数之和,08四数之和
  • 华为显卡部署
  • Salesforce知识点:LWC(Lightning Web Components)面试题及答案
  • 【C/C++】一文通关C/C++内存管理:动态开辟改朝换代——new/delete
  • 安卓13_ROM修改定制化-----修改rom 实现“usb安装”选项默认开启
  • Git 常用命令速查表
  • Day45 51单片机UART串口通信与数码管时钟系统
  • 企业级图像AIGC技术观察:Seedream 4.0 模型能力与应用场景分析
  • Kurt-Blender零基础教程:第2章:建模篇——第2节:什么是修改器与建模马拉松
  • fbx 导入到 blender 出现很多黑色虚线的解决方法
  • 记力扣.2779 数组的最大美丽值 练习理解
  • Day26_【深度学习(6)—神经网络NN(2)前向传播的搭建案例】
  • 古老的游戏之竞技体育
  • CURSOR平替(deepseek+VScode)方案实现自动化编程
  • java对电子发票是否原件的快速检查
  • 贪心算法应用:顶点覆盖问题详解
  • Odoo中非库存商品的高级自动化采购工作流程
  • 缺少自动化测试会对 DevOps 带来哪些风险
  • 深入解析 Python 中的 __pycache__与字节码编译机制
  • SEO 优化:元数据 (Metadata) API 和站点地图 (Sitemap) 生成
  • postman+Jenkins进行API automation集成
  • 【算法磨剑:用 C++ 思考的艺术・单源最短路收官】BF/SPFA 负环判断模板 + 四大算法全总结
  • Flink的介绍及应用
  • 微信小程序插屏广告(InterstitialAd)全解析与实战应用案例
  • 格雷希尔G70R系列快速密封连接器+GT系列软管组件的配套组合方案,在新能源汽车老化测试的应用
  • 【Debug日志| 随机下降】
  • 滑动窗口法的优化与实战——力扣209.长度最小的子数组