【目标检测】metrice_curve和loss_curve对比图可视化

代码如下:

import warnings
warnings.filterwarnings('ignore')import os
import pandas as pd
import numpy as np
import matplotlib.pylab as pltpwd = os.getcwd()names = ['model1', 'model2', 'model3','ours']plt.figure(figsize=(10, 10))plt.subplot(2, 2, 1)
for i in names:data = pd.read_csv(f'runs/train/{i}/results.csv')data['metrics/precision(B)'] = data['metrics/precision(B)'].astype(np.float32).replace(np.inf, np.nan)data['metrics/precision(B)'] = data['metrics/precision(B)'].fillna(data['metrics/precision(B)'].interpolate())plt.plot(data['metrics/precision(B)'], label=i)
plt.xlabel('epoch')
plt.title('precision')
plt.legend()plt.subplot(2, 2, 2)
for i in names:data = pd.read_csv(f'runs/train/{i}/results.csv')data['metrics/recall(B)'] = data['metrics/recall(B)'].astype(np.float32).replace(np.inf, np.nan)data['metrics/recall(B)'] = data['metrics/recall(B)'].fillna(data['metrics/recall(B)'].interpolate())plt.plot(data['metrics/recall(B)'], label=i)
plt.xlabel('epoch')
plt.title('recall')
plt.legend()plt.subplot(2, 2, 3)
for i in names:data = pd.read_csv(f'runs/train/{i}/results.csv')data['metrics/mAP50(B)'] = data['metrics/mAP50(B)'].astype(np.float32).replace(np.inf, np.nan)data['metrics/mAP50(B)'] = data['metrics/mAP50(B)'].fillna(data['metrics/mAP50(B)'].interpolate())plt.plot(data['metrics/mAP50(B)'], label=i)
plt.xlabel('epoch')
plt.title('mAP_0.5')
plt.legend()plt.subplot(2, 2, 4)
for i in names:data = pd.read_csv(f'runs/train/{i}/results.csv')data['metrics/mAP50-95(B)'] = data['metrics/mAP50-95(B)'].astype(np.float32).replace(np.inf, np.nan)data['metrics/mAP50-95(B)'] = data['metrics/mAP50-95(B)'].fillna(data['metrics/mAP50-95(B)'].interpolate())plt.plot(data['metrics/mAP50-95(B)'], label=i)
plt.xlabel('epoch')
plt.title('mAP_0.5:0.95')
plt.legend()plt.tight_layout()
plt.savefig('metrice_curve.png')
print(f'metrice_curve.png save in {pwd}/metrice_curve.png')plt.figure(figsize=(15, 10))plt.subplot(2, 3, 1)
for i in names:data = pd.read_csv(f'runs/train/{i}/results.csv')data['train/box_loss'] = data['train/box_loss'].astype(np.float32).replace(np.inf, np.nan)data['train/box_loss'] = data['train/box_loss'].fillna(data['train/box_loss'].interpolate())plt.plot(data['train/box_loss'], label=i)
plt.xlabel('epoch')
plt.title('train/box_loss')
plt.legend()plt.subplot(2, 3, 2)
for i in names:data = pd.read_csv(f'runs/train/{i}/results.csv')data['train/dfl_loss'] = data['train/dfl_loss'].astype(np.float32).replace(np.inf, np.nan)data['train/dfl_loss'] = data['train/dfl_loss'].fillna(data['train/dfl_loss'].interpolate())plt.plot(data['train/dfl_loss'], label=i)
plt.xlabel('epoch')
plt.title('train/dfl_loss')
plt.legend()plt.subplot(2, 3, 3)
for i in names:data = pd.read_csv(f'runs/train/{i}/results.csv')data['train/cls_loss'] = data['train/cls_loss'].astype(np.float32).replace(np.inf, np.nan)data['train/cls_loss'] = data['train/cls_loss'].fillna(data['train/cls_loss'].interpolate())plt.plot(data['train/cls_loss'], label=i)
plt.xlabel('epoch')
plt.title('train/cls_loss')
plt.legend()plt.subplot(2, 3, 4)
for i in names:data = pd.read_csv(f'runs/train/{i}/results.csv')data['val/box_loss'] = data['val/box_loss'].astype(np.float32).replace(np.inf, np.nan)data['val/box_loss'] = data['val/box_loss'].fillna(data['val/box_loss'].interpolate())plt.plot(data['val/box_loss'], label=i)
plt.xlabel('epoch')
plt.title('val/box_loss')
plt.legend()plt.subplot(2, 3, 5)
for i in names:data = pd.read_csv(f'runs/train/{i}/results.csv')data['val/dfl_loss'] = data['val/dfl_loss'].astype(np.float32).replace(np.inf, np.nan)data['val/dfl_loss'] = data['val/dfl_loss'].fillna(data['val/dfl_loss'].interpolate())plt.plot(data['val/dfl_loss'], label=i)
plt.xlabel('epoch')
plt.title('val/dfl_loss')
plt.legend()plt.subplot(2, 3, 6)
for i in names:data = pd.read_csv(f'runs/train/{i}/results.csv')data['val/cls_loss'] = data['val/cls_loss'].astype(np.float32).replace(np.inf, np.nan)data['val/cls_loss'] = data['val/cls_loss'].fillna(data['val/cls_loss'].interpolate())plt.plot(data['val/cls_loss'], label=i)
plt.xlabel('epoch')
plt.title('val/cls_loss')
plt.legend()plt.tight_layout()
plt.savefig('loss_curve.png')
print(f'loss_curve.png save in {pwd}/loss_curve.png')

可视化结果展示
在这里插入图片描述

在这里插入图片描述

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

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

相关文章

【LeetCode hot100|Week2】滑动窗口,子串

笔记用于个人复习和巩固,题解非原创,参考LeetCode官方题解以及各个大佬的解法,希望给大家带来帮助,同时笔记也能督促我学习进步 这周主要把滑动窗口和子串的题目刷了一遍 文章目录Week2D1 滑动窗口209. 长度最小的子数组713. 乘积…

vue2纯前端对接海康威视摄像头实现实时视频预览

vue2纯前端对接海康威视摄像头实现实时视频预览一、环境准备二、代码集成1.1 准备webrtcstreamer.js,粘贴即用,不用做任何修改1.2 封装视频组件,在需要视频的地方引入此封装的视频组件即可,也是粘贴即用,注意其中impor…

Android 设置禁止截图和禁止长截图

1.禁止截图 在 Activity 代码中 , 可以在调用 setContentView 函数之前 ,为 Window 窗口对象 设置 LayoutParams.FLAG_SECURE 标志位 , 可以禁止对本界面进行截屏 ,Window 窗口对象 , 可通过 getWindow 方法获取 ,核心代码如下 :getWindow().setFlags(LayoutParams.FLAG_SECUR…

AR 巡检在工业的应用|阿法龙XR云平台

AR 巡检的应用覆盖电力、石油化工、智能制造、轨道交通、冶金等对设备可靠性和安全性要求极高的行业,具体场景包括:电力行业变电站内设备的状态检查:通过 AR 眼镜扫描设备,实时显示设备额定参数、历史故障记录、实时传感器数据&am…

【C++】STL详解(七)—stack和queue的介绍及使用

✨ 坚持用 清晰易懂的图解 代码语言, 让每个知识点都 简单直观 ! 🚀 个人主页 :不呆头 CSDN 🌱 代码仓库 :不呆头 Gitee 📌 专栏系列 : 📖 《C语言》🧩 《…

深度学习周报(9.8~9.14)

目录 摘要 Abstract 1 LSTM相关网络总结与对比 1.1 理论总结 1.2 代码运行对比 2 量子计算入门 3 总结 摘要 本周首先总结了LSTM、Bi-LSTM与GRU的区别与优缺点,对比了三者实战的代码与效果,还另外拓展了一些循环神经网络变体(包括窥视…

Quat 四元数库使用教程:应用场景概述

基础概念 四元数是一个包含四个元素的数组 [x, y, z, w],其中 x,y,z表示虚部,w 表示实部。单位四元数常用于表示3D空间中的旋转。 1. 创建和初始化函数 create() - 创建单位四元数 应用场景:初始化一个新的四元数对象,通常作为其他…

【Java后端】Spring Boot 多模块项目实战:从零搭建父工程与子模块

如何用 Spring Boot 搭建一个父工程 (Parent Project),并在其中包含多个子模块 (Module),适合企业级项目或者需要分模块管理的场景。Spring Boot 多模块项目实战:从零搭建父工程与子模块在日常开发中,我们经常会遇到这样的需求&am…

企业级AI会议系统技术实现:快鹭如何用AI重构会议全流程

摘要 本文深度解析快鹭AI会议系统的核心技术架构,重点探讨其在语音识别、自然语言处理、数据集成和安全防护等方面的技术实现。通过对比传统会议系统的技术痛点,分析快鹭AI如何通过技术创新实现会议筹备时间减少67%、数据调取速度提升100倍的显著效果。…

【CSS学习笔记3】css特性

1css三大特性 1.1层叠性:就近原则,最新定义的样式 1.2继承性:子标签集成父标签的样式,如文本和字号 行高的继承:不加单位指的是当前文字大小的倍数 body {font: 12px/1.5 Microsoft YaHei;color: #be1313;} div {…

[C语言]常见排序算法①

1.排序的概念及常见的排序算法排序在咱们日常生活中十分的常见,就好比是网上购物的时候通常能够选择按照什么排序,比如价格、评论数量、销量等。那么接下来咱们就来了解一些关于排序的概念。排序:所谓排序,就是使一串记录&#xf…

文献阅读笔记:RS电子战测试与测量技术文档

信息来源:罗德与施瓦茨(Rohde & Schwarz)公司关于电子战(Electronic Warfare, EW)测试与测量解决方案专业技术文档。 该文档由台湾地区应用工程师Mike Wu撰写,核心围绕电子战基础、雷达系统、实战应用及…

别再纠结 Postman 和 Apifox 了!这款开源神器让 API 测试更简单

别再纠结 Postman 和 Apifox 了!这款开源神器让 API 测试更简单🔥 作为一名开发者,你是否还在为选择 API 测试工具而纠结?Postman 太重、Apifox 要联网、付费功能限制多?今天给大家推荐一款完全免费的开源替代方案 ——…

微调神器LLaMA-Factory官方保姆级教程来了,从环境搭建到模型训练评估全覆盖

1. 项目背景 开源大模型如LLaMA,Qwen,Baichuan等主要都是使用通用数据进行训练而来,其对于不同下游的使用场景和垂直领域的效果有待进一步提升,衍生出了微调训练相关的需求,包含预训练(pt)&…

创建其他服务器账号

✅ 在 /home74 下创建新用户的完整步骤1. 创建用户并指定 home 目录和 shellsudo useradd -m -d /home74/USERNAME -s /bin/bash USERNAME-m:自动创建目录并复制 /etc/skel 默认配置文件(.bashrc 等)。-d:指定用户 home 路径&…

【WebGIS】Vue3使用 VueLeaflet + 天地图 搭建地图可视化平台(基础用法)

初始化 创建项目 nodejs 18.0.6npm 9.5.1 引入地图服务 VueLeaflet GitHub - vue-leaflet/vue-leaflet: vue-leaflet 与 vue3 兼容 Vue Leaflet (vue2-leaflet) package.josn安装版本 直接添加四个依赖 {// ..."scripts": {// ...},"depen…

OpenCV 开发 -- 图像阈值处理

文章目录[toc]1 基本概念2 简单阈值处理cv2.threshold3 自适应阈值处理cv2.adaptiveThreshold更多精彩内容👉内容导航 👈👉OpenCV开发 👈1 基本概念 图像阈值处理(Thresholding)是图像处理中的一种基本技术…

单串口服务器-工业级串口联网解决方案

在工业自动化、智能电网、环境监测等领域,传统串口设备(如PLC、传感器、仪表等)的网络化升级需求日益增长。博为智能单串口服务器凭借高性能硬件架构、多协议支持和工业级可靠性,为RS485设备提供稳定、高效的TCP/IP网络接入能力&a…

第 9 篇:深入浅出学 Java 语言(JDK8 版)—— 吃透泛型机制,筑牢 Java 类型安全防线

简介:聚焦 Java 泛型这一“类型安全保障”核心技术,从泛型解决的核心痛点(非泛型代码的运行时类型错误、强制类型转换冗余)切入,详解泛型的本质(参数化类型)、核心用法(泛型类/接口/…

MySQL和Redis的数据一致性问题与业界常见解法

一、为什么会出现数据不一致? 根本原因在于:这是一个涉及两个独立存储系统的数据更新操作,它无法被包装成一个原子操作(分布式事务)。更新数据库和更新缓存是两个独立的步骤,无论在代码中如何排列这两个步骤…