关于YOLOv5训练结果results.txt绘制对比图

news2024/11/17 8:30:44

目录

用两个results.txt在一幅图中画2条对比曲线

用一个results.txt在一幅图中画多条对比曲线:


用两个results.txt在一幅图中画2条对比曲线
# -*- coding:utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np


column = ['epoch', 'train_GIOU_loss', 'train_obj_loss', 'train_cls_loss', 'total', 'target', 'img_size', 'precision',
          'recall', 'MAP@0.5', 'F1', 'val_GIOU_loss', 'val_obj_loss', 'val_cls_loss']


def plot_result(result1, result2, title, yl):
    ind = column.index(title)  # 获取索引
    plt.rcParams['font.sans-serif'] = 'Times New Roman'
    plt.figure(figsize=(10, 8), dpi=400)
    x = result1[range(0, 60, 5), 0]
    y1 = result1[range(0, 60, 5), ind]
    y2 = result2[range(0, 60, 5), ind]
    line1 = plt.plot(x, y1, color="#8B4513", linewidth=2, label="yolov5", marker='^')
    line2 = plt.plot(x, y2, color="#90EE90", linewidth=2, label="advanced yolov5", marker='^')
    plt.xticks(range(0, 60, 5), fontsize=14)
    plt.yticks(fontsize=14)
    plt.xlabel('epoch', fontsize=16)
    plt.ylabel(yl, fontsize=16)
    plt.legend(loc="best", fontsize=16, frameon=False)
    plt.savefig('总损失对比图')
    plt.show()


# 获取results文件中的有效列并且新增epoch序号列
def result2matrix(result_dir, epoch_num):
    data = np.genfromtxt(result_dir)
    result = data[0:epoch_num + 1, 2:15]  # 获取数据
    print(f"\n一共{len(result)}个epoches的结果")
    epoch = np.arange(len(result))  # 生成epoch序号
    epoch = epoch.reshape(len(result), 1)
    result = np.hstack((epoch, result))  # 新添一列epoch
    return result


def plot_yolov5_curves(txt_dir1, txt_dir2):
    output1 = result2matrix(txt_dir1, epoch_num=60)
    output2 = result2matrix(txt_dir2, epoch_num=60)
    plot_result(output1, output2, 'total', 'total_loss')



'''
一共11个图,可根据自己要求拓展
'''
if __name__ == '__main__':
    dir1 = "results1.txt"
    dir2 = "results2.txt"
    plot_yolov5_curves(dir1, dir2)
用一个results.txt在一幅图中画多条对比曲线:
# -*- coding:utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np


column = ['epoch', 'train_GIOU_loss', 'train_obj_loss', 'train_cls_loss', 'train_landmark_loss', 'total', 'target', 'img_size', 'precision',
          'recall', 'MAP@0.5', 'F1', 'val_GIOU_loss', 'val_obj_loss', 'val_cls_loss']

# 同一幅图中画多条曲线
def plot_result(result1, yl):
    ind1 = column.index('train_GIOU_loss')  # 获取giou索引
    ind2 = column.index('train_obj_loss')  # 获取obj索引索引
    ind3 = column.index('train_cls_loss')  # 获取cls索引
    ind4 = column.index('train_landmark_loss')  # 获取landmark索引
    ind5 = column.index('total')  # 获取total索引
    plt.rcParams['font.sans-serif'] = 'Times New Roman'
    plt.figure(figsize=(10, 8), dpi=400)
    x = result1[range(0, 200, 10), 0]
    # 每条损失曲线对应的y值
    y1 = result1[range(0, 200, 10), ind1]
    y2 = result1[range(0, 200, 10), ind2]
    y3 = result1[range(0, 200, 10), ind3]
    y4 = result1[range(0, 200, 10), ind4]
    y5 = result1[range(0, 200, 10), ind5]

    # 画giou
    line1 = plt.plot(x, y1, color="#6F80BE", linewidth=2, label="CIoU_loss", marker='^')
    # 画obj
    line2 = plt.plot(x, y2, color="#67C2A3", linewidth=2, label="obj_loss", marker='8')
    # 画cls
    line3 = plt.plot(x, y3, color="#FC8A61", linewidth=2, label="cls_loss", marker='s')
    # 画landmark
    line4 = plt.plot(x, y4, color="#E889BD", linewidth=2, label="landmark_loss", marker='D')
    # 画total
    line5 = plt.plot(x, y5, color="#C82423", linewidth=2, label="total_loss", marker='>')

    plt.xticks(range(0, 200, 10), fontsize=14)
    plt.yticks(fontsize=14)
    plt.xlabel('epoch', fontsize=16)
    plt.ylabel(yl, fontsize=16)
    plt.legend(loc="best", fontsize=16, frameon=False)
    plt.savefig('损失对比图')
    plt.show()


# 获取results文件中的有效列并且新增epoch序号列
def result2matrix(result_dir, epoch_num):
    data = np.genfromtxt(result_dir)
    result = data[0:epoch_num + 1, 2:16]  # 获取数据
    print(f"\n一共{len(result)}个epoches的结果")
    epoch = np.arange(len(result))  # 生成epoch序号
    epoch = epoch.reshape(len(result), 1)
    result = np.hstack((epoch, result))  # 新添一列epoch
    return result


def plot_yolov5_curves(txt_dir1):
    output1 = result2matrix(txt_dir1, epoch_num=200)
    plot_result(output1, 'loss')

'''
一共11个图,可根据自己要求拓展
'''
if __name__ == '__main__':
    dir1 = "results.txt"
    plot_yolov5_curves(dir1)


示例如下: 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

美国CFTC启用举报奖励机制!打击人工智能投资欺诈行为

最近几周,美国监管机构对欺诈者利用人工智能 (AI) 的说法来引诱投资者实施诈骗发出警告。掌握人工智能诈骗原始信息的个人可以匿名举报 ,并有资格根据商品期货交易委员会 (CFTC) 和证券交易委员会 (SEC) 举报计划获得金钱奖励。CFTC 关于人工智能诈骗的咨…

Docker部署Halo容器并结合内网穿透实现公网访问本地个人博客

文章目录 1. Docker部署Halo1.1 检查Docker版本如果未安装Docker可参考已安装Docker步骤:1.2 在Docker中部署Halo 2. Linux安装Cpolar2.1 打开服务器防火墙2.2 安装cpolar内网穿透 3. 配置Halo个人博客公网地址4. 固定Halo公网地址 本文主要介绍如何在CentOS 7系统使…

迷你世界制作甜甜圈

local R,r20,5--中心半径(内径与外径和的1/4)、扩充半径(高的一半) local x0,y0,z00,20,0--起点坐标 local d10000--单次遍历方块数 local id600--方块id local s,all,t-1,0,0--步骤、总方块数、循环 local demath.random(2,18)/2 local x,y,z0,0,0--当前坐标 local func…

毕业神刊!1区、CCF推荐SCI,最新26天录用!6天见刊

一手刊源 • 毕业快刊 春节一过,距离2024年上半年毕业的日子近在眼前,你的毕业论文已安排投稿了吗?时间着急的作者,不妨重点关注本期小编推荐的毕业快刊:无中科院预警记录,非三大出版社,指标情…

还在为选择办公软件而烦恼吗?不妨试试ONLYofficeV8.0

目录 一.优势一DOC 1.丰富的文字处理功能 2.按用户既定的规则编辑 3.使用AI助手 4.保持创意 5.深入分析文本 6.改善团队工作流程 7.轻松对比文档 8.扩展编辑功能 二.优势二sheet 1.数据分析 2.轻松实现精准计算 3.轻松分析数据 4.可视化呈现数据 5.增强团队协作…

通过盲注脚本复习sqllabs第46关 order by 注入

Less-46 从本关开始,我们开始学习 order by 相关注入的知识。本关的 sql 语句为$sql "SELECT * FROM users ORDER BY $id";尝试?sort1 desc或者 asc,显示结果不同,则表明可以注入。(升序 or 降序排列)从上述的 sql 语句中我们可以…

Netty-初体验

Netty 引入依赖服务端服务端处理读写业务的Handler客户端实现客户端handler Netty具备设计优雅、使⽤⽅便、性能强劲等优点&#xff0c; 引入依赖 <dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>…

CVE-2024-0918 TEW-800MB RCE漏洞分析

漏洞描述 固件版本为1.0.1.0的TEW-800MB路由器存在命令注入漏洞。如果攻击者获得了web管理权限&#xff0c;他们可以将命令注入到httpd未知函数中的post请求参数DeviceURL中&#xff0c;从而获得shell权限。。 参考链接 TEW-800MB (notion.site)https://warp-desk-89d.notio…

盘点那些世界名校计算机专业采用的教材

清华、北大、MIT、CMU、斯坦福的学霸们在新学期里要学什么&#xff1f;今天我们来盘点一下那些世界名校计算机专业采用的教材。 书单目录 1.《深入理解计算机系统》&#xff08;原书第3版&#xff09;2. 《算法导论》&#xff08;原书第3版&#xff09;3. 《计算机程序的构造和…

【已解决】Zip压缩文件设置了密码怎么办?

Zip是一种常见的压缩格式文件&#xff0c;文件还可以设置密码保护。那设置了密码的Zip文件要如何打开呢&#xff1f;不清楚的小伙伴一起来看看吧。 想要打开带密码的Zip文件&#xff0c;我们需要用到适用于Zip格式的解压缩软件&#xff0c;比如WinRAR或者7-Zip软件都是可以的。…

【数据结构】_队列

目录 1.概念 2.队列的使用 3.队列模拟实现 4.循环队列 5.双端队列 6.栈与队列的互相实现 6.1 用队列实现栈 6.2 用栈实现队列 1.概念 &#xff08;1&#xff09;队列是只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff1b; &am…

PyTorch深度学习实战(37)——CycleGAN详解与实现

PyTorch深度学习实战&#xff08;37&#xff09;——CycleGAN详解与实现 0. 前言1. CycleGAN 基本原理2. CycleGAN 模型分析3. 实现 CycleGAN小结系列链接 0. 前言 CycleGAN 是一种用于图像转换的生成对抗网络(Generative Adversarial Network, GAN)&#xff0c;可以在不需要配…

分布式事务-CAP定理+BASE理论+解决方案(两阶段提交+TCC事务)

事务就是指一个操作单元&#xff0c;操作单元中的所有操作要么同时成功要么同时失败。单体项目中的事务一般都是使用数据库提供的事务机制来完成的&#xff0c;但是分布式事务的事务参与者位于不同的节点上&#xff0c;也就是分布在不同的服务器上。分布式事务的最大问题就是各…

安卓游戏开发之音频技术优劣分析

一、引言 在安卓游戏开发中&#xff0c;音频处理技术扮演着至关重要的角色&#xff0c;它不仅能够增强游戏的沉浸感和玩家体验&#xff0c;还能通过声音效果传达关键的游戏信息。以下将对几种常见的安卓游戏音频处理技术进行优劣分析&#xff0c;并结合应用场景来阐述其特点。 …

Jmeter之内置函数__property和__P的区别

1. __property函数 作用 读取 Jmeter 属性 语法格式 ${__property(key,var,default)} 参数讲解 小栗子 ${__property(key)} 读取 key 属性如果找不到 key 属性&#xff0c;则返回 key&#xff08;属性名&#xff09; ${__property(key,,default)} 读取 key 属性如果找不到 k…

Linux内核中并发与竞争的处理方法之原子操作简介

一. 简介 当我们发现驱动程序中存在并发和竞争的时候一定要处理掉&#xff0c;接下来我们依次来学习一下 Linux 内核提供的几种并发和竞争的处理方法。 本文学习Linux内核提供的一种处理并发与竞争的方法&#xff1a;原子操作。 二. 原子操作简介 原子操作就是指不能再进一步…

【旧文更新】基于STM32L496的低功耗ADXL345加速度读取、TMP75温度检测

【旧文更新】基于STM32L496的低功耗ADXL345加速度读取、TMP75温度检测 文章目录 关于旧文新发加速度和温度检测附录&#xff1a;Cortex-M架构的SysTick系统定时器精准延时和MCU位带操作SysTick系统定时器精准延时延时函数阻塞延时非阻塞延时 位带操作位带代码位带宏定义总线函…

抖音小店怎么做起来?分享几种起店方式,新手商家认真选择!

大家好&#xff0c;我是电商糖果 网上关于抖音小店的起店方式有很多&#xff0c;有人说这种模式利润高&#xff0c;有人说这种模式长久。 东听一句&#xff0c;西听一句&#xff0c;让很多朋友感到比较迷茫。 根本不知道哪种方式更适合自己。 这里糖果就把网上最常见的五种…

线性代数:线性方程组解的结构

目录 齐次/非齐次方程组的解 Ax 0 的解的性质 定理 Ax b 的解的性质 相关证明 例1 例2 例3 齐次/非齐次方程组的解 Ax 0 的解的性质 定理 Ax b 的解的性质 相关证明 例1 例2 例3

2023年12月 Python(五级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,共50分) 第1题 下面代码的输出结果是?( ) dict1 = {1: 10, 2: 20, 3: 30} dict2 <