PaddleYOLO目标检测训练(集成SwanLab可视化全过程)

PaddleYolo 是飞桨(PaddlePaddle)框架下的一个目标检测库,主要用于图像和视频中的物体检测。PaddleYOLO包含YOLO系列模型的相关代码,支持YOLOv3、PP-YOLO、PP-YOLOv2、PP-YOLOE、PP-YOLOE+、RT-DETR、YOLOX、YOLOv5、YOLOv6、YOLOv7、YOLOv8、YOLOv5u、YOLOv7u、YOLOv6Lite、RTMDet等模型。

SwanLab 是一个开源的模型训练记录工具,面向AI研究者,提供了训练可视化、自动日志记录、超参数记录、实验对比、多人协同等功能。在SwanLab上,研究者能基于直观的可视化图表发现训练问题,对比多个实验找到研究灵感,并通过在线链接的分享与基于组织的多人协同训练,打破团队沟通的壁垒。

你可以使用PaddleYolo快速进行目标检测模型训练,同时使用SwanLab进行实验跟踪与可视化。

在线Demo

1. 引入SwanLabCallback

首先在你clone的PaddleYolo项目中,找到ppdet/engine/callbacks.py文件,在代码的底部添加如下代码:

class SwanLabCallback(Callback):def __init__(self, model):super(SwanLabCallback, self).__init__(model)try:import swanlabself.swanlab = swanlabexcept Exception as e:logger.error('swanlab not found, please install swanlab. ''Use: `pip install swanlab`.')raise eself.swanlab_params = {k[8:]: v for k, v in model.cfg.items() if k.startswith("swanlab_")}self._run = Noneif dist.get_world_size() < 2 or dist.get_rank() == 0:_ = self.runself.run.config.update(self.model.cfg)self.best_ap = -1000.self.fps = []@propertydef run(self):if self._run is None:self._run = self.swanlab.get_run() or self.swanlab.init(**self.swanlab_params)return self._rundef on_step_end(self, status):if dist.get_world_size() < 2 or dist.get_rank() == 0 and status['mode'] == 'train':training_status = status['training_staus'].get()batch_time = status['batch_time']data_time = status['data_time']batch_size = self.model.cfg['{}Reader'.format(status['mode'].capitalize())]['batch_size']ips = float(batch_size) / float(batch_time.avg)metrics = {"train/" + k: float(v) for k, v in training_status.items()}metrics.update({"train/ips": ips,"train/data_cost": float(data_time.avg),"train/batch_cost": float(batch_time.avg)})self.fps.append(ips)self.run.log(metrics)def on_epoch_end(self, status):if dist.get_world_size() < 2 or dist.get_rank() == 0:mode = status['mode']epoch_id = status['epoch_id']if mode == 'train':fps = sum(self.fps) / len(self.fps)self.fps = []end_epoch = self.model.cfg.epochif (epoch_id + 1) % self.model.cfg.snapshot_epoch == 0 or epoch_id == end_epoch - 1:save_name = str(epoch_id) if epoch_id != end_epoch - 1 else "model_final"tags = ["latest", f"epoch_{epoch_id}"]elif mode == 'eval':fps = status['sample_num'] / status['cost_time']merged_dict = {f"eval/{key}-mAP": map_value[0]for metric in self.model._metricsfor key, map_value in metric.get_results().items()}merged_dict.update({"epoch": status["epoch_id"],"eval/fps": fps})self.run.log(merged_dict)if status.get('save_best_model'):for metric in self.model._metrics:map_res = metric.get_results()key = next((k for k in ['bbox', 'keypoint', 'mask'] if k in map_res), None)if not key:logger.warning("Evaluation results empty, this may be due to ""training iterations being too few or not ""loading the correct weights.")returnif map_res[key][0] >= self.best_ap:self.best_ap = map_res[key][0]save_name = 'best_model'tags = ["best", f"epoch_{epoch_id}"]def on_train_end(self, status):self.run.finish()

2. 修改trainer代码

ppdet/engine/trainer.py文件中,在from .callbacks import那一行添加SwanLabCallback

from .callbacks import Callback, ComposeCallback, LogPrinter, Checkpointer, VisualDLWriter, WandbCallback, SwanLabCallback

接着,我们找到Trainer类的__init_callbacks方法,在if self.mode == 'train':下添加如下代码:

if self.cfg.get('use_swanlab', False) or 'swanlab' in self.cfg:self._callbacks.append(SwanLabCallback(self))

至此,你已经完成了SwanLab与PaddleYolo的集成!接下来,只需要在训练的配置文件中添加use_swanlab: True,即可开始可视化跟踪训练。

3. 修改配置文件

我们以yolov3_mobilenet_v1_roadsign为例。

configs/yolov3/yolov3_mobilenet_v1_roadsign.yml文件中,在下面添加如下代码:

use_swanlab: true
swanlab_project: PaddleYOLO # 可选
swanlab_experiment_name: yolov3_mobilenet_v1_roadsign # 可选
swanlab_description: 对PaddleYOLO的一次训练测试 # 可选
# swanlab_workspace: swanhub # 组织名,可选

4. 开始训练

python -u tools/train.py -c configs/yolov3/yolov3_mobilenet_v1_roadsign.yml --eval

在训练过程中,即可看到整个训练过程的日志,以及训练结束后自动生成的可视化图表。
在这里插入图片描述

5. 相关链接

  • PaddleYOLO: https://github.com/PaddlePaddle/PaddleYOLO
  • SwanLab:https://swanlab.cn

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

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

相关文章

移动电源测试中最核心的测试项目有哪些?-纳米软件

移动电源在如今的生活中扮演着重要的角色&#xff0c;对其进行准确的测试至关重要。以下是移动电源测试中一些较为核心的测试项目&#xff1a; 一、容量测试 内部电池容量测试&#xff1a;通过设计大量整机及内部电池容量测试实验&#xff0c;可以准确了解移动电源的实际容量…

跟着尚硅谷学vue2—进阶版4.0—Vuex1.0

5. Vuex 1. 理解 Vuex 1. 多组件共享数据-全局事件总线实现 红线是读&#xff0c;绿线是写 2. 多组件共享数据-vuex实现 vuex 不属于任何组件 3. 求和案例-纯vue版 核心代码 1.Count.vue <template><div><h1>当前求和为&#xff1a;{{ sum }}</h1&…

ChatGPT 搜索 vs Google 搜索

原文&#xff1a;Amanda Caswell - 2024.11.01 随着 OpenAI 推出的实时搜索功能&#xff0c;ChatGPT 正在逐步成为像 Google 这样的传统搜索引擎的竞争对手。ChatGPT 以其对话式的回答方式而闻名&#xff0c;它能够在没有广告干扰的情况下提供实时的上下文信息。 我迫不及待地…

LeetCode【0017】电话号码的字母组合

本文目录 1 中文题目2 最优解法&#xff1a;迭代法2.1 方法思路2.2 Python代码2.3 复杂度分析 3 题目总结 1 中文题目 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下&#xff08;与电话按键相…

iOS 18.2 重磅更新:6个大动作

根据外媒报道&#xff0c;iOS 18.2迎来重磅更新&#xff0c;将带来6个大动作&#xff0c;这是一次非常实用的更新。不过要注意的是&#xff0c;其中涉及到AI的功能&#xff0c;国行iPhone 暂时还不可用&#xff0c;只能等审核通过了。 1&#xff0c;Safari下载进度 过去通过S…

《TCP/IP网络编程》学习笔记 | Chapter 9:套接字的多种可选项

《TCP/IP网络编程》学习笔记 | Chapter 9&#xff1a;套接字的多种可选项 《TCP/IP网络编程》学习笔记 | Chapter 9&#xff1a;套接字的多种可选项套接字可选项和 I/O 缓冲大小套接字多种可选项getsockopt & setsockoptSO_SNDBUF & SO_RCVBUF SO_REUSEADDR发生地址绑定…

D66【python 接口自动化学习】- python基础之数据库

day66 SQL-DQL-排序分页 学习日期&#xff1a;20241112 学习目标&#xff1a;MySQL数据库-- 135 SQL-DQL-排序分页 学习笔记&#xff1a; 结果查询 结果分页限制 总结 排序和分页限制的语法 2. 关键字总结&#xff1a;

Groovy有哪些官方文档和教程可以学习?

Groovy Language Documentation&#xff1a; 这是Groovy的官方文档&#xff0c;提供了详细的语言规范、教程和指南。您可以从这里下载JavaDoc和在线文档&#xff0c;以及获取关于如何开始使用Groovy的指导。[Groovy Language Documentation][1] Groovy官方教程&#xff1a; 官…

LeetCode 3.无重复字符的最长子串

LeetCode 3.无重复字符的最长子串 思路&#x1f9d0;&#xff1a; 使用滑动窗口哈希表&#xff0c;哈希表映射每一个字符串&#xff0c;左右指针表示当前区间&#xff0c;当出现一个字符串那么就将哈希表1&#xff0c;右指针移动&#xff0c;当哈希表对应位置大于1时&#xff0…

验证码处理在自动化测试中的应用

在进行自动化测试时&#xff0c;处理验证码是一项常见的挑战&#xff0c;特别是图形验证码。每次刷新都会生成新的验证码&#xff0c;因此我们可以采用以下两种方法来获取验证码&#xff1a; 获取验证码图片链接&#xff1a;例如 src"http://example.com/getcaptcha/123&q…

云计算在智能交通系统中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 云计算在智能交通系统中的应用 云计算在智能交通系统中的应用 云计算在智能交通系统中的应用 引言 云计算概述 定义与原理 发展历…

全球碳循环数据集(2000-2023)包括总初级生产力、生态系统净碳交换和生态系统呼吸变量

全球碳循环数据集&#xff08;2000-2023&#xff09; 数据介绍 PFTs_XGB FLUX 是一个基于 XGBOOST 机器学习模型的全球碳循环数据集。该数据集通过对全球植被功能类型&#xff08;PFTs&#xff09;的分类&#xff0c;结合了 FLUXNET、AmeriFlux 和 ICOS 通量站点的现场观测数据…

Kafka经典面试题

1、kafka消息发送的流程&#xff1f; producer发送过程中启动两个线程 一个main线程 一个sender线程&#xff0c;在main线程中先创建一个双端队列&#xff08;RecordAccumlator、producerbatch&#xff09;&#xff0c;main将我们需要发送的东西经过拦截器&#xff0c;序列化&a…

HTB:Photobomb[WriteUP]

目录 连接至HTB服务器并启动靶机 使用nmap对靶机进行端口开放扫描 再次使用nmap对靶机开放端口进行脚本、服务扫描 使用ffuf进行简单的子域名扫描 使用浏览器直接访问该域名 选取一个照片进行下载&#xff0c;使用Yakit进行抓包 USER_FLAG&#xff1a;a9afd9220ae2b5731…

蓝桥杯c++算法学习【1】之枚举与模拟(卡片、回文日期、赢球票、既约分数:::非常典型的比刷例题!!!)

别忘了请点个赞收藏关注支持一下博主喵&#xff01;&#xff01;&#xff01; 关注博主&#xff0c;更多蓝桥杯nice题目静待更新:) 枚举与模拟 一、卡片&#xff1a; 【问题描述】 小蓝有很多数字卡片&#xff0c;每张卡片上都是一个数字&#xff08;0到9&#xff09;。 小蓝…

html页面中的内容替换,或改变某些字的颜色

1. html页面中的内容替换,或改变某些字的颜色 前端使用innnerHtml显示返回值+innerHtml文字显示两种不同的颜色(两部分显示颜色不一样) 1.1. html字符串改变某些字的颜色 需求:要文本框的字体部分改变颜色、大小、换行等功能。在了解需求后,文本框input发现完全满足不了现需…

Linux——简单认识vim、gcc以及make/Makefile

前言&#xff1a;大佬写博客给别人看&#xff0c;菜鸟写博客给自己看&#xff0c;我是菜鸟。 1、vim操作&#xff1a; 默认打开vim时&#xff0c;vim处于命令模式。(在其他模式中&#xff0c;Esc就能够返回命令模式) 常用的命令有&#xff1a; n gg&#xff1a;跳转到n行&…

C++基础(12.红黑树实现)

目录 红黑树的概念&#xff1a; 红黑树规则&#xff1a; 红黑树如何确保最长路径不超过最短路径的2倍的&#xff1f; 红黑树的效率&#xff1a; 红黑树的插入: 红黑树树插入⼀个值的大概过程: 情况1&#xff1a;变色 情况2&#xff1a;单旋变色&#xff1a; 情况3&…

Spark 的容错机制:保障数据处理的稳定性与高效性

Spark 的介绍与搭建&#xff1a;从理论到实践_spark环境搭建-CSDN博客 Spark 的Standalone集群环境安装与测试-CSDN博客 PySpark 本地开发环境搭建与实践-CSDN博客 Spark 程序开发与提交&#xff1a;本地与集群模式全解析-CSDN博客 Spark on YARN&#xff1a;Spark集群模式…

Linux内核编程(二十)RTC子系统一驱动rx8010

本文目录 一、基础知识点1.什么是RTC&#xff1f;2. RTC方案3. 电路原理图 二、RTC芯片&#xff08;RX8010&#xff09;移植三、关于时间的一些命令四、应用层使用1. 使用RTC驱动2. 使用time.h库&#xff08;额外知识点&#xff09; 一、基础知识点 1.什么是RTC&#xff1f; R…