【YOLO】yolov5的训练策略1 -- 训练热身warmup

news2024/11/26 5:49:45

目录

  • 一、什么是训练热身
  • 二、常见的训练热身
    • 1. Constant Warmup
    • 2. Linner Warmup
    • 2. Cosine Warmup
  • 三、yolov5的训练热身代码

一、什么是训练热身

    众所周知学习率是一个非常重要的超参数,直接影响着网络训练的速度和收敛情况。通常情况下,网络开始训练之前,我们会随机初始化权重,设置学习率过大会导致模型振荡严重,学习率过小,网络收敛太慢。
    那这个时候该怎么做呢?是不是有人会说,我前面几十个或者几百个epoch学习率设置小一点,后面正常后,设置大一点呢,没错这就是最简单的Warmup。
   我们可以把Warmup的过程想成,模型最开始是一个小孩,学习率太大容易认识事物太绝对了,这个时候需要小的学习率,摸着石头过河,小心翼翼地学习,当他对事物有一定了解和积累,认知有了一定地水平,这个时候步子再迈大一点就没问题了。

二、常见的训练热身

1. Constant Warmup

在前面100epoch里,学习率线性增加,大于100epoch以后保持不变,整个过程如下如所示:
在这里插入图片描述

2. Linner Warmup

在前面100epoch里,学习率线性增加,大于100epoch以后保持线性下降,整个过程如下如所示:
在这里插入图片描述

2. Cosine Warmup

在前面100epoch里,学习率线性增加,大于100epoch以后保持x余弦方式下降,整个过程如下如所示:
在这里插入图片描述

三、yolov5的训练热身代码

    nb表示训练集划分的批次数量,例如nb=60,在超参数中warmup_epochs=3,则nw = 3 * 60= 180批次迭代,就是3个epoch。
    意思是前3个epoch都是处于热身阶段。
   要注意的代码中最少热身训练100批次迭代,要不然热身都还没有做完,运动就结束了。

# number of batches 数据集一共划分的批次
nb = len(train_loader)
# number of warmup iterations 热身的批次迭代次数, max(3 epochs, 100 iterations)
nw = max(round(self.hyp['warmup_epochs'] * nb), 100)

# 训练热身
for i, (imgs, targets, ...) in train_loader:
   ni = i + nb * epoch  # number integrated batches (since train start) 第几批次
   self.warmup(epoch, ni, nw)  # Warmup 热身阶段

# 热身函数
def warmup(self, epoch, ni, nw):
    """ 
    训练热身(前nw次迭代中)
    在前nw次迭代中, 根据以下计算获取accumulate、lr、momentum
    """
    if ni <= nw:
        xi = [0, nw]  # x interp
        self.accumulate = max(1, np.interp(ni, xi, [1, self.nbs / self.batch_size]).round())
        for j, x in enumerate(self.optimizer.param_groups):
            """
                bias lr falls from 0.1 to lr0, all other lrs rise from 0.0 to lr0
                bias的学习率从warmup_bias_lr=0.1下降到lr0
                其他参数的学习率从0.0增长到lr0
                动量momentum从warmup_momentum=0.8变化到hyp momentum=0.937
                """
                fp = [self.hyp['warmup_bias_lr'] if j == 0 else 0.0, x['initial_lr'] * self.lr_lambda(epoch)]
                x['lr'] = np.interp(ni, xi, fp)
                if 'momentum' in x:
                    fp = [self.hyp['warmup_momentum'], self.hyp['momentum']]
                    x['momentum'] = np.interp(ni, xi, fp)

点赞、关注、收藏、评论

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

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

相关文章

DNS 是如何影响你冲浪速度的?

本文详细介绍了 DNS 相关知识&#xff0c;包括 DNS 工作原理、如何提升域名解析速度、以及 DNS 记录与报文等内容。 1. 域名与域名服务器 在日常上网过程中&#xff0c;出于好记的原因&#xff0c;人们更喜欢在浏览器中输入网站的域名&#xff0c;而不是 IP 地址。比如想要访问…

小红书如何运营 策略方法总结

大家好&#xff0c;我是权知星球&#xff0c;今天跟大家分享一下小红书如何运营和策略方法总结。 小红书是一个生活方式和消费决策平台&#xff0c;并为用户提供入口&#xff0c;作为一个生活方式社区&#xff0c;小红书的独特之处在于其用户发布的内容都来自于真实生活&#…

MySQL-DDL-数据库操作

开发项目流程 数据库设计-DDL DDL&#xff1a;Data Definition Language&#xff0c;数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库、表&#xff09; 数据库 常见操作 查询 查询所有数据库&#xff1a;show databases&#xff1b; 查询当前数据库&#xf…

A Simple Framework for Contrastive Learning of Visual Representations(论文翻译)

A Simple Framework for Contrastive Learning of Visual Representations 摘要1介绍2 方法2.1 对比学习框架2.2 训练大批量数据2.3 评估协议 3.用于对比表示学习的数据增强3.1.数据增强操作的组合对于学习良好的表示至关重要3.2 对比学习需要更强的数据增强比有监督学习 4. 编…

STM32单片机WIFI阿里云老人智能家居语音识别定时吃药

实践制作DIY- GC00158-WIFI阿里云老人智能家居语音识别定时吃药 一、功能说明&#xff1a; 基于STM32单片机设计------WIFI阿里云老人智能家居语音识别定时吃药 二、功能说明&#xff1a; 电路组成&#xff1a;STM32F103CXT6最小系统LD3322语音识别模块LCD1602显示按键1个ULN2…

【网络安全】渗透测试工具——Burp Suite

渗透测试工具Burp Suite主要功能详解 前言一、 Proxy模块1.1 界面布局1.1.1 菜单栏&#xff08;1&#xff09; 菜单栏 Burp&#xff08;2&#xff09; 菜单栏 project&#xff08;3&#xff09; 菜单栏 Intruder&#xff08;4&#xff09; 菜单栏 Repeater&#xff08;5&#x…

微信小程序开发:必须掌握的 HTML、CSS 和 JavaScript 技术

引言 小程序是一种轻量级的应用程序&#xff0c;通过HTML、CSS和JavaScript等前端技术开发&#xff0c;可在移动设备上直接访问和使用&#xff0c;无需下载和安装。 文章目录 引言一、小程序开发的背景和重要性二、HTML、CSS和JavaScript在小程序开发中的作用三、HTML基础知识1…

一篇文章搞定《JVM的完美图解》

一篇文章搞定《JVM的完美图解》 前言常见的问题1、双亲委托机制2、类加载过程加载链接初始化 3、JVM内存结构图方法区堆栈本地方法栈程序计数器 4、对象的组成对象头示例数据对齐字节 5、JVM中怎么确定一个对象是否可以GC引用计数法&#xff08;早期策略&#xff09;可达性分析…

Java设计模式之行为型-中介者模式(UML类图+案例分析)

目录 一、基础概念 二、UML类图 三、角色设计 四、案例分析 五、总结 一、基础概念 中介者模式的核心思想是引入一个中介者对象&#xff0c;来封装和管理对象之间的交互关系。 对象之间不再直接交互&#xff0c;而是通过中介者间接交互。这样可以减少对象之间的依赖&…

浏览器调试技巧

浏览器调试技巧 文章将介绍几个 devtools 技巧。 缩放devtool ui 可能对于某些开发来说devtools 中的文本和按钮太小&#xff0c;使用起来不舒服。而浏览器也提供了可以缩放 devtools UI的方法。 devtools 的用户界面是使用 HTML、CSS 和 JavaScript 构建的&#xff0c;这意…

中国地图数据可视化制作,python的pyecharts模块读取excel中国着色地图可视化

数据格式如下&#xff1a; import pandas as pd from pyecharts import options as opts from pyecharts.charts import Map from pyecharts.globals import ChartType# 读取Excel数据 data pd.read_excel(C:\\Users\\Administrator\\Desktop\\国内数据.xlsx)# 创建地图实例 m…

大学英语四六级考点听力案例-内蒙古民族大学外国语学院四六级考试听力电台

大学英语四六级考点听力案例-内蒙古民族大学外国语学院四六级考试听力电台 北京海特伟业科技有限公司发布于2023年7月13日 文/任洪卓 一、大学英语四六级考点听力广播系统用户需求 内蒙古民族大学位于内蒙古东部通辽市&#xff0c;是一所综合型民族大学&#xff0c;为内蒙古自…

电子水尺——实时监测、高精度测量

法国作家雨果说过&#xff1a;一个城市的良心是下水道。当洪水四溢时&#xff0c;城市的下水道让滔滔之水悄然排淌&#xff0c;城市回归安详。 往期&#xff0c;水位监测总是“被动”执行&#xff0c;这样的做法不仅效率低下&#xff0c;还难以做到及时调度和合理应对。 山东…

2023.7.13-输入一个整数n,输出从1开始累加到n的求和

从1累加到n的计算公式为S(1n)n/2。 程序&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() {int a1;int i 0;int sum 0;printf("整数n的值:");scanf("%d",&a);for (i 0; i < a; i){sum i;}printf("从…

opencv 05 彩色RGB像素值操作

opencv 05 彩色RGB像素值操作 RGB 模式的彩色图像在读入 OpenCV 内进行处理时&#xff0c;会按照行方向依次读取该 RGB 图像的 B 通道、G 通道、R 通道的像素点&#xff0c;并将像素点以行为单位存储在 ndarray 的列中。例如&#xff0c; 有一幅大小为 R 行C 列的原始 RGB 图像…

用户案例 | Apache DolphinScheduler 离线调度在自如多业务场景下的应用与实践

用户案例 | 自如 随着自如业务的快速发展&#xff0c;不断增长的调度任务和历史逾万的存量任务对平台稳定性提出了更高的要求。同时&#xff0c;众多非专业开发人员也需要一种更为“亲民”的调度平台使用体验。 如何满足这些日渐凸显的需求对自如大数据平台的开发团队来说&am…

重复值--Pandas

1. 删除重复行&#xff1a;drop_duplicate() 1.1 函数功能 返回去除重复行的DataFrame&#xff0c;不考虑索引。 1.2 函数语法 DataFrame.drop_duplicates(subsetNone, *, keepfirst, inplaceFalse, ignore_indexFalse)1.3 函数参数 参数含义subset列标签或列标签组成的列…

操作系统第四篇

C语言 第四章 C语言4.1 gcc简介4.2 C语言基础4.3 GNU Binutils 简介4.4 8086 汇编与 C 语言混合编程4.4.1 混合编程的几个问题4.4.2 混合编程的一个实例 第四章 C语言 前面章节用 x86 汇编语言写了引导记录 mbr.bin&#xff0c;并让 BIOS 引导到内存 0x07c00 处执行成功。然后用…

Git 工具出现克隆库失败详解

Git 工具出现克隆库失败详解 现象 错误字符串&#xff1a;git unable to access xxx: Encountered end of 原因 总体来说出现这个原因通常是因为网络连接的问题。具体的有以下几个方面 远程仓库不存在&#xff1a;检查所指定的远程仓库是否存在&#xff0c;确保仓库名称、U…

嵌套虚拟机-监控嵌套虚拟机-libvmi-volatility

接上回&#xff1a; libvmi监控-使用examples cd ~ git clone https://github.com/libvmi/libvmi.git cd libvmi mkdir build cd build # 注意&#xff0c;由于我们是vmi的虚拟机&#xff0c;所以cmake编译时需要加上该编译选项&#xff08;参考libvmi github上的readme&…