根据YOLOv5、v8、v7训练后生成的result文件用matplotlib进行绘图

1. 效果图

在这里插入图片描述

2. 认识result内容

2.1 YOLOv7的result.txt

参考链接:YOLOv7结果分析,txt文件内容

0/299      14.7G         0.07522         0.009375          0.02266          0.1073                    58            640           0.0002958    0.1458   0.0002676     4.469e-05          0.1005          0.01098       0.02545
训练轮数   GPU消耗     train/box_loss   train/obj_loss    train/cls_loss  train/total_loss     本轮中数据中目标数量   输入图片大小         P          R         mAP@.5     mAP@.5:.95        val/Box_loss  val/obj_loss   val/cls_loss

在这里插入图片描述

2.2 YOLOv5 | YOLOv8的result.csv(每列含义相同)

每列的含义是相同的,可能因为是同一个作者写的代码,所以result.csv的保存内容没有发生改变

YOLOv5

在这里插入图片描述

YOLOv8

在这里插入图片描述

3. 代码(只有map和loss)

  • 需要更改的地方:仅为result_dict中的内容,每行表示的是模型名称和该模型训练得到的result文件地址
  • v5、v8都是csv格式的,v7是txt格式的
  • 需要关注的重点地方:下面代码中关于下标的注释位置,下标都是从0开始向右依次加一的
  • plt.savefig("mAP50.png", dpi=600) # dpi可设为300/600/900,表示存为更高清的矢量图
  • data = pd.read_csv(res_path, usecols=[6]).values.ravel() 表示读取csv文件后,只取下标为6的一列的值values,并将值ravel()展平为一维数组(如果想要绘制result.csv/result.txt中的其他值,直接改为对应的下标即可。例如想要绘制train/box_loss,则绘制map50中的6改为1,10改为2
  • plt.plot(x, data, label=modelname, linewidth='1') # 线条粗细设为1
import matplotlib.pyplot as plt
import pandas as pd
import numpy as npif __name__ == '__main__':# 列出待获取数据内容的文件位置# v5、v8都是csv格式的,v7是txt格式的result_dict = {'YOLOv5m': r'C:\Users\dadandan\Desktop\workspace_temp\NeimengA_train_resultcsv\yolov5m\results.csv','YOLOv7': r'C:\Users\dadandan\Desktop\workspace_temp\NeimengA_train_resultcsv\yolov7\results.txt','YOLOv7-tiny': r'C:\Users\dadandan\Desktop\workspace_temp\NeimengA_train_resultcsv\yolov7-tiny\results.txt','YOLOv7-tiny-large': r'C:\Users\dadandan\Desktop\workspace_temp\NeimengA_train_resultcsv\yolov7-tiny-large\results.txt','YOLOv7-tiny-PConv': r'C:\Users\dadandan\Desktop\workspace_temp\NeimengA_train_resultcsv\yolov7-tiny-PConv\results.txt','YOLOv7-tiny-GhostNetv2': r'C:\Users\dadandan\Desktop\workspace_temp\NeimengA_train_resultcsv\yolov7-tiny-GhostNetv2\results.txt',# 'YOLOv8s': r'C:\Users\dadandan\Desktop\workspace_temp\NeimengA_train_resultcsv\yolov8s\results.csv','YOLOv7-tiny-large-GhostNetv2': r'C:\Users\dadandan\Desktop\workspace_temp\NeimengA_train_resultcsv\yolov7-tiny-large-GhostNetv2\results.txt','YOLOv7-GhostNetv2': r'C:\Users\dadandan\Desktop\workspace_temp\NeimengA_train_resultcsv\yolov7-GhostNetv2\results.txt','YOLOv7-FasterNet': r'C:\Users\dadandan\Desktop\workspace_temp\NeimengA_train_resultcsv\yolov7-FasterNet\results.txt'}# 绘制map50for modelname in result_dict:res_path = result_dict[modelname]ext = res_path.split('.')[-1]if ext == 'csv':data = pd.read_csv(res_path, usecols=[6]).values.ravel()    # 6是指map50的下标(每行从0开始向右数)else:   # 文件后缀是txtwith open(res_path, 'r') as f:datalist = f.readlines()data = []for d in datalist:data.append(float(d.strip().split()[10]))   # 10是指map50的下标(每行从0开始向右数)data = np.array(data)x = range(len(data))plt.plot(x, data, label=modelname, linewidth='1')   # 线条粗细设为1# 添加x轴和y轴标签plt.xlabel('Epochs')plt.ylabel('mAP@0.5')plt.legend()plt.grid()# 显示图像plt.savefig("mAP50.png", dpi=600)   # dpi可设为300/600/900,表示存为更高清的矢量图plt.show()# 绘制map50-95for modelname in result_dict:res_path = result_dict[modelname]ext = res_path.split('.')[-1]if ext == 'csv':data = pd.read_csv(res_path, usecols=[7]).values.ravel()    # 7是指map50-95的下标(每行从0开始向右数)else:with open(res_path, 'r') as f:datalist = f.readlines()data = []for d in datalist:data.append(float(d.strip().split()[11]))   # 11是指map50-95的下标(每行从0开始向右数)data = np.array(data)x = range(len(data))plt.plot(x, data, label=modelname, linewidth='1')# 添加x轴和y轴标签plt.xlabel('Epochs')plt.ylabel('mAP@0.5:0.95')plt.legend()plt.grid()# 显示图像plt.savefig("mAP50-95.png", dpi=600)plt.show()# 绘制训练的总lossfor modelname in result_dict:res_path = result_dict[modelname]ext = res_path.split('.')[-1]if ext == 'csv':box_loss = pd.read_csv(res_path, usecols=[1]).values.ravel()obj_loss = pd.read_csv(res_path, usecols=[2]).values.ravel()cls_loss = pd.read_csv(res_path, usecols=[3]).values.ravel()data = np.round(box_loss + obj_loss + cls_loss, 5)    # 3个loss相加并且保留小数点后5位(与v7一致)else:with open(res_path, 'r') as f:datalist = f.readlines()data = []for d in datalist:data.append(float(d.strip().split()[5]))data = np.array(data)x = range(len(data))plt.plot(x, data, label=modelname, linewidth='1')# 添加x轴和y轴标签plt.xlabel('Epochs')plt.ylabel('Loss')plt.legend()plt.grid()# 显示图像plt.savefig("loss.png", dpi=600)plt.show()

4. 关于绘制PR和F1,查看这篇文章

Python更改YOLOv5、v7、v8,实现调用val.py或者test.py后生成pr.csv,然后再整合绘制到一张图上(使用matplotlib绘制)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/245256.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

逆波兰表达式求值

逆波兰表达式求值 一:中缀表达式和逆波兰表达式二:力扣:[逆波兰表达式求值](https://leetcode-cn.com/problems/evaluate-reverse-polish-notation/)二:原理:三:代码实现: 一:中缀表达式和逆波兰表达式 中缀表达式就是…

Centos图形化界面封装OpenStack Centos镜像

目录 背景 环境 宿主机环境安装 创建与安装Centos7.8虚机 虚机设置 安全相关 安装ACPI服务 安装cloud-init 安装cloud-utils-growpart 停⽌虚拟机 删除个性化信息 模板化与压缩 登录与验证 背景 今天早上在Centos官网下载的CentOS-7-aarch64-GenericCloud-2003.…

Kali Linux三种网络攻击方法总结(DDoS、CC和ARP欺骗)

本文章使用的是Kali Linux的2020-4-installer-amd64版本 Kali Linux的安装过程本文章不做过多说明,请自行百度 请正确使用DDos和CC攻击,不要用来做违反当地法律法规的事情,否则后果自负 CSDN大礼包:《黑客&网络安全入门&am…

CSS、JS文件无法正确加载至页面问题与解决

目录 1. 问题出现 2. 分析与解决 3. 总结 1. 问题出现 自己在写项目是时候,想启动浏览器查询首页面index.jsp的显示效果 预期效果应该是下面这样的: 但是实际上是这样的: 意思也就是说可能是关于CSS、JS相关的引入方面出了问题&#xff…

百为智能流控路由器 RCE漏洞复现

0x01 产品简介 BYTEVALUE 百为流控路由器是一款追求带宽利用率的多功能路由器。 0x02 漏洞概述 百为智能流控路由器 /goform/webRead/open 路由的 ?path 参数存在有回显的命令注入漏洞,未经身份认证的攻击者可以利用此漏洞执行任意指令,获取服务器权限。 0x03 复…

代码随想录算法训练营第41天| 343. 整数拆分 96.不同的二叉搜索树

JAVA代码编写 343. 整数拆分 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n 2 输出: 1 解释: 2 1 1, 1 1 1。示例 2: 输入: n 10…

Optional源码分析(涉及Objects源码和Stream源码)

研究Optional源码之前先谈一谈Objects源码。 主要代码&#xff1a; ForceInlinepublic static <T> T requireNonNull(T obj) {if (obj null) {throw new NullPointerException();} else {return obj;}}ForceInlinepublic static <T> T requireNonNull(T obj, Str…

单个 Zip 文件体积超过 40GB

单个 Zip 文件体积超过 40GB WinRAR 平时用的多,不过有时候为了更好的通用性,也常常用到 zip 格式.查了一下资料,说是 zip 单个文件的体积不能超过 4GB. 自己动手试了下,用 WinRAR 创建出来的 zip 文件,大小可以超过 40GB, 如下图 为了压缩速度快,压缩方式用的是 “存储” Wi…

PHP使用HTTP代码示例模板

PHP是一种广泛用于服务器端的编程语言&#xff0c;它提供了许多内置的函数和扩展&#xff0c;以便开发人员能够轻松地处理HTTP请求和响应。在PHP中&#xff0c;您可以使用以下代码示例模板来处理HTTP请求和生成HTTP响应。 php复制代码 <?php // 处理GET请求 if ($…

Synchronized关键字的底层原理

Synchronized实现 Synchronized创建的时候一个互斥的对象锁&#xff0c;每次只有一个线程可以获取该锁。 其底层主要是基于Monitor实现的&#xff0c;在对象的对象头中存储了MarkWord存储的就是Monitor的地址。 对象的内存结构 对象在内存中存储主要分为三个部分&#xff1a…

天翼云:“百万IOPS”助推政企上云

随着数字化转型的加速&#xff0c;越来越多的企业选择了业务上云。众所周知&#xff0c;不论是政企关键/核心业务中的大型数据库、NoSQL、AI训练&#xff0c;还是互联网业务中的游戏、渲染等场景&#xff0c;对数据读写IOPS和时延有极高的要求。作为全球领先的云服务商&#xf…

第二证券:国际金价创新高 国内锂电企业有望加速出海

12月首个交易日&#xff0c;两市股指盘中弱势下探&#xff0c;午后止跌回升&#xff0c;沪指、创业板指翻红&#xff0c;北证50指数再度跳水。到收盘&#xff0c;沪指微涨0.07%报3031.64点&#xff0c;深成指跌0.07%报9720.57点&#xff0c;创业板指涨0.19%报1926.28点&#xf…