SWA Object Detection随机权重平均【论文+代码】

随机权重平均

    • 摘要
    • Introduction
    • SWA
    • 实验部分
    • 消融实验

摘要

您想在不增加推断成本和不改变检测器的情况下提高对象检测器的1.0 AP吗?让我们告诉您一个这样的秘方。这个秘方令人惊讶地简单:使用循环学习率训练您的检测器额外的12个epoches,然后将这12个checkpoints平均作为您的最终检测模型。这个强大的秘方受到随机权重平均(SWA)的启发,该方法在[1]中提出,用于改善深度神经网络的泛化能力。我们发现它在对象检测中也非常有效。在这个技术报告中,我们系统地研究了将SWA应用于对象检测以及实例分割的效果。通过大量的实验,我们发现了在对象检测中执行SWA的可行策略,并在具有挑战性的COCO基准测试中始终实现了对各种流行检测器(包括Mask RCNN、Faster RCNN、RetinaNet、FCOS、YOLOv3和VFNet)的∼1.0 AP的提高。我们希望这项工作能让更多的对象检测研究人员了解这项技术,并帮助他们训练更好的对象检测器。代码可在https://github.com/hyzxmaster/swa-object-detection找到。

Introduction

由于深度学习的巨大成功,目标检测在近年来取得了巨大进展。2015年, Faster RCNN[2]在COCO testdev[3]上仅达到了21.9 AP,而2020年最新的COCO排行榜[4]上这一数字已经提高到了约61.0。尽管如此,我们可以看到目标检测的演进正在变得缓慢,因为深度网络的特征表示学习能力几乎已经被挤干。根据2020年COCO+LVIS联合识别挑战赛[5]的报告,目标检测(实例分割赛道)在COCO上的表现已经达到饱和,这意味着进一步提高目标检测性能正在变得更加困难。即使研究人员费尽心思地设计更好的检测器模块,他们可能会发现在具有挑战性的COCO基准测试上进一步提高1.0 AP的性能是非常困难的。

另一方面,我们最近发现了一种非常简单但有效的增强物体检测器的方法,我们非常激动地与社区分享。您只需要使用周期性学习率训练您的检测器额外的12个epoches,然后将这12个checkpoints平均作为您的最终检测模型。因此,您可以在具有挑战性的COCO基准测试上获得约1.0 AP的提高。由于这种技术只会产生一些训练开销,因此您不需要担心任何推理成本或对检测器的任何更改。这种技术是在[1]中开发的,旨在改善深度网络中的泛化,称为随机权重平均(SWA)。我们在目标检测的研究中尝试了它,并对其在改进我们的目标检测器VarifocalNet [6]或VFNet进行了惊人的有效性。我们发现罕见的目标检测工作[7]采用了这种技术。因此,我们对将SWA应用于目标检测的效果进行了系统研究。由于其代表性和普及性,我们首先选择了Mask RCNN [8]作为我们的研究目标检测器。然后,我们尝试了不同的训练策略,并发现了在目标检测中执行SWA的可行策略。通过广泛的实验,我们发现SWA可以为各种目标检测器(包括Mask RCNN [8]、Faster RCNN [2]、RetinaNet [9]、FCOS [10]、YOLOv3 [11]和我们的VFNet [6])在COCO基准测试中提高约1.0 AP。这使我们感到非常激动,希望这项工作能够帮助社区训练更好的目标检测器。

SWA

我们简要介绍了SWA是什么以及为什么它有效。更多细节请参考SWA论文[1]、其博客[12]或相关教程[13]。

简单地说,SWA是在SGD优化策略上使用高常数学习率或周期性学习率的多个检查点的平均值。设wi为第i个检查点。==在传统的SGD中,通常选择最后一个检查点wn或最佳验证w∗i作为最终模型。==相比之下,在SWA中,多个检查点的平均值被采用作为最终模型。

为什么这个简单的方法有效?作者认为SGD通常会收敛到一组好的权重空间的边缘解(如图1中的W1),这个解通常比那些位于空间中心的解泛化性能差。使用周期性或高常数学习率的SGD优化可以探索靠近与深度神经网络高精度对应的平坦权重空间边界的多个点,如图1中的W1、W2和W3。然后,通过对这些点进行平均,SWA可以找到一个更为集中的解WSWA,其泛化性能显著提高。

在这里插入图片描述

在实践中,应用SWA训练物体检测器要回答两个主要问题。首先,从第m个epoch到第n个epoch,我们应该使用什么学习率计划进行SWA训练?使用高恒定学习率或循环学习率?其次,我们应该平均多少个checkpoints?也就是说,我们应该进行多少个epoches的SWA训练?在本报告中,我们通过广泛的实验回答了这些问题。

实验部分

在本章节中,我们进行了一系列实验,旨在研究SWA的效果,并发现适用于物体检测的合适方式。
数据集和评估指标。我们在广泛使用的MS COCO 2017数据集[3]上进行实验。我们在train2017数据集上训练检测器,并在val2017数据集上报告结果。我们采用标准的COCO风格的平均精度(AP)作为评估指标。

实现和训练细节。我们依靠MMDetection [14]进行实验。我们使用8个V100 GPU进行训练,总批量大小为16(每个GPU上2张图像)。为方便起见,我们在此介绍1x和2x训练计划[15]。==1x计划表示模型训练12个时期,并在第9个和第12个时期分别将初始学习率降低10倍,2x计划表示模型训练24个时期,并在第17个和第23个时期分别将初始学习率降低10倍。==为简洁起见,我们还在此描述了本报告中使用的物体检测器的命名规则。以MaskRCNN-R101-2x-0.02-0.0002-40.8-36.6为例解释。它意味着预训练的检测器Mask RCNN具有ResNet-101 [16]骨干网络,在2x计划下训练,初始学习率为0.02,结束学习率为0.0002,在COCO val2017上分别达到40.8 bbox AP和36.6 mask AP。

循环余弦退火学习率的示意图。在每个循环中,学习率从初始学习率lrmax(本例中为0.02)逐渐降低到结束学习率lrmin(本例中为0.0002),并在每个循环结束后重新开始。

在这里插入图片描述

消融实验

随后我们选择 Mask RCNN [8] 作为研究对象,以探索在目标检测和实例分割中如何正确使用 SWA。我们首先从 MMDetection 模型库中下载预训练模型 MaskRCNNR101-2x-0.02-0.0002-40.8-36.6 以及其配置文件作为起点。然后,我们使用不同的学习率策略对模型进行额外的 24 或 48 轮训练。第一种策略是固定学习率计划,其中选择了 0.02、0.002 和 0.0002。请注意,这些学习率对应于预训练模型的不同训练阶段中使用的学习率。第二种策略是循环学习率计划。如图 2 所示,每个epoch中,学习率从一个较大的值 lrmax 开始,然后相对地逐渐减小,直到达到 lrmin,然后再逐渐增加,最终再次回到 lrmax,以此循环。通过这些实验,我们可以评估 SWA 在不同训练策略下的性能表现。
请注意,学习率的减少是在每个 iteration中而不是每个epoch中发生的。在这项研究中,我们采用余弦退火学习率调度,选择两组(lrmax,lrmin),即(0.01,0.0001)和(0.02,0.0002),并选择1个epoch作为周期长度。
在这里插入图片描述
最终,我们将不同数量的checkpoints(6、12、24和48)平均,作为我们的最终SWA模型,并在COCO val2017上评估它们的性能。请注意,由于骨干网络中的批量归一化层被冻结[14],因此我们不需要按照原始的SWA论文再运行一遍数据来计算新的统计数据。

结果呈现在表格1中。如上所述,我们尝试了五种不同的训练策略,它们被分成两组。对于固定学习率的策略,我们在前15个epoch中使用了一个较大的学习率,并将其降低到原来的十分之一。对于一次性余弦退火策略,我们使用一个初始学习率并将其降低到零。最好的性能在一次性余弦退火策略中获得,其mAP为49.4%。

对于固定的学习率组,我们可以看到学习率对每个SGD epoch的性能有很大影响。具体而言,当学习率为0.02时,每个SGD epoch的表现比预训练模型差得多,例如bbox AP为33.0-34.0,而bbox AP为40.8。相比之下,当学习率为0.0002时,每个SGD epoch的表现与预训练模型相当。虽然使用不同学习率的每个SGD epoch所达到的性能差别很大,但令人惊讶的是,通过对每个训练策略下的一定数量的检查点进行平均得到的SWA模型达到了相似的结果。我们可以看到,在表1的SWA 1-12列中,所有这三个SWA模型都获得了约40.5 bbox AP和36.5 mask AP的成绩。然而,这些结果都不如起始模型,并且表明恒定的学习率策略效果不佳。相比之下,循环学习率组在每个SGD epoch中实现了更稳定的结果,他们的SWA模型也取得了更好的结果。可以看到,学习率范围(0.02,0.0002)的表现要优于范围(0.01,0.0001),表明在预训练阶段使用的学习率已经很好地发挥作用。更详细地观察(0.02,0.0002)范围的结果,其SWA 1-12模型获得了41.7 bbox AP和37.4 mask AP的成绩,分别比预训练模型提高了0.9 bbox AP和0.8 mask AP。此外,SWA 1-12模型表现优于SWA 1-6模型,并且与SWA 1-24模型和SWA 1-48模型相当。这表明,训练另外12个epoch足以生成一个良好的SWA模型,特别是考虑到计算负担和收益之间的权衡。

通过比较表格1中的结果,我们可以推断出一种可行的策略,即在使用SWA训练更好的物体检测器时,经过传统训练使用初始学习率lrini和结束学习率lrend训练一个物体检测器,然后使用循环学习率(lrini,lrend)进行额外的12个时期的训练,最后将这12个检查点平均作为最终的检测模型。

基于上述观察结果,我们还尝试从头开始训练SWA Mask RCNN(主干在ImageNet [17]上预训练)。我们首先使用学习率0.02训练原始Mask RCNN模型16个时期,得到模型MaskRCNN-R101-16e-0.02-0.02-33.4-30.8。然后,我们使用循环学习率在另外12个epoch内训练模型,并将这些12个检查点平均作为SWA模型。如表1的最后一部分所示,我们可以看到这个SWA 1-12模型实现了41.7个bbox AP和37.4个mask AP,与通过训练MaskRCNN-R101-2x0.02-0.0002-40.8-36.6获得的SWA 1-12模型相同。这表明这样的混合训练策略也可以生成更好的物体检测器,并可用于从头开始训练新的物体检测器。

为了验证我们在物体检测中发现的SWA策略的有效性,我们将其应用于不同骨干网络的各种物体检测器,包括Mask RCNN、Faster RCNN、RetinaNet、FCOS、YOLOv3和VFNet。这些结果分别在表2、表3、表4、表5、表6和表7中呈现。从这些结果中,我们可以看到SWA在我们的训练策略下始终将这些检测器的性能提高了约1.0 AP,无论它们的原始性能是高还是低。这是非常令人鼓舞的,并使我们兴奋地将这一发现分享给社区。

我们可以在图3中查看比较性的定性例子。通过比较这些检测例子,我们可以看出SWA提高了物体定位和物体分类准确性,从而减少了误报和提高了召回率。

为了进一步了解SWA带来的改进的来源,我们分析了Mask RCNN和FCOS的结果。遵循论文Diagnosing Error in Object Detectors [18]的做法,我们绘制了预训练Mask RCNN(MaskRCNNR101-2x-0.02-0.0002-40.8-36.6)和其SWA模型以及FCOS(FCOS-R101-2x-0.01-0.0001-39.1)和其SWA模型的错误分布。COCO API生成的每个图都是一系列精度-召回(PR)曲线,其中每个PR曲线都保证在评估设置变得更加宽松时严格高于前一个,每个曲线下的面积对应于AP(在图例中显示)。

通过比较图4a和图4b、图4c和图4d以及图5a和图5b,我们可以推断出SWA不仅提高了物体定位准确性,而且还提高了物体分类准确性。例如,图4a显示预训练Mask RCNN在IoU=0.75时的总体AP为44.5,但SWA Mask RCNN将这个数字提高了1.0,达到45.5 AP,表明SWA提高了定位准确性。类似地,当忽略定位误差时,即图例中表示为Loc时,预训练Mask RCNN实现了68.1 AP,但SWA Mask RCNN实现了69.0 AP,这意味着SWA还提高了物体分类准确性。对于FCOS也可以看到类似的比较结果。

总之,我们系统地研究了将SWA应用于物体检测和实例分割的效果。我们发现,使用循环学习率在另外12个epoch内训练模型并平均这些12个checkpoints,可以在具有挑战性的COCO基准测试中将检测器的性能提高约1.0 AP。我们的广泛实验表明,这种技术适用于各种物体检测器,包括Mask RCNN、Faster RCNN、RetinaNet、FCOS、YOLOv3和VFNet。我们希望我们的工作可以让更多的研究人员知道这个简单而有效的方法,并帮助他们训练更好的物体检测器。

swa可以降低模型震荡:在训练过程中,模型的权重会不断变化,而SWA策略可以减少这种变化,使模型更加平滑。这样可以降低模型的震荡,提高训练的稳定性,有助于提高模型的性能。
提高模型泛化能力:SWA策略对训练期间的权重进行平均,可以减少模型在训练集上的过拟合现象,提高模型的泛化能力。
由于模型的参数属于高维空间,SGD训练的模型往往收敛到最优解的边界区域,采用swa可以使其接近最优解
一言概括就是:采用周期式学习速率(余弦退火学习速率)额外再训练你的模型12个epoch,然后简单地平均每个epoch训练得到的weights作为最终的模型。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

最强的Python可视化神器,你有用过么?

数据分析离不开数据可视化,我们最常用的就是Pandas,Matplotlib,Pyecharts当然还有Tableau,看到一篇文章介绍Plotly制图后我也跃跃欲试,查看了相关资料开始尝试用它制图。 1、Plotly Plotly是一款用来做数据分析和可视…

【数据结构】Java实现队列与循环队列

目录 1. 概念 2. 队列的使用 3. 自己动手实现队列 3.1 MyQueue接口 3.2 LinkedQueue类 3.3 入队列 3.4 出队列 3.5 获取队头元素 3.6 获取队列中有效元素个数与检测队列是否为空 3.7 toString方法 4. 整体实现 4.1 LinkedQueue类 4.2 Test类 4.3 测试结果 5. 循…

while实现1到100相加求和-课后程序(JavaScript前端开发案例教程-黑马程序员编著-第2章-课后作业)

【案例2-7】while实现1到100相加求和 一、案例描述 考核知识点 while循环语句 练习目标 掌握while循环语句。 需求分析 1-100之间的数相加求和,本案例通过while循环语句来实现。 案例分析 效果如图2-10所示。1-100所有数的和 具体实现步骤如下: 在&l…

【进阶数据结构】——红黑树

🌈感谢阅读East-sunrise学习分享——[进阶数据结构]红黑树 博主水平有限,如有差错,欢迎斧正🙏感谢有你 码字不易,若有收获,期待你的点赞关注💙我们一起进步🚀 🌈我们上一…

SpringCloud之 LoadBalancer和Feign负载均衡

文章目录LoadBalancer 负载均衡一、LoadBalanced 负载均衡🌽①观察负载均衡现象🌽②LoadBalanced 源码剖析二、自定义负载均衡三、OpenFeign 实现负载均衡🍆①添加依赖🍆②启动类添加 EnableFeignClients🍆③创建客户端…

MySQL的COUNT语句,竟然都能被面试官虐的这么惨!?

关于数据库中行数统计,无论是MySQL还是Oracle,都有一个函数可以使用,那就是COUNT 但是,就是这个常用的COUNT函数,却暗藏着很多玄机,尤其是在面试的时候,一不小心就会被虐。不信的话请尝试回答下…

一文了解Jackson注解@JsonFormat及失效解决

背景 项目中使用WRITE_DATES_AS_TIMESTAMPS: true转换日期格式为时间戳未生效。如下: spring:jackson:time-zone: Asia/Shanghaiserialization:WRITE_DATES_AS_TIMESTAMPS: true尝试是否关于时间的注解是否会生效,使用JsonForma和JsonFiled均失效。 常…

【Docker】CAdvisor+InfluxDB+Granfana容器监控

文章目录原生命令 docker stats容器监控3剑客CIGCAdvisorInfluxDBGranfanacompose容器编排,一套带走新建目录新建3件套组合的 docker-compose.yml检查配置,有问题才有输出 docker-compose config -q启动docker-compose文件 docker-compose up -d测试浏览…

HTML5 Canvas

HTML5 Canvas <canvas>元素是HTML5中的新元素&#xff0c;通过使用该元素&#xff0c;你可以在网页中绘制所需的图形。 标签定义图形&#xff0c;比如图表和其他图像&#xff0c;您必须使用脚本来绘制图形。在画布上&#xff08;Canvas&#xff09;画一个红色矩形&#…

Java基础知识之HashMap的使用

一、HashMap介绍 HashMap是Map接口的一个实现类&#xff08;HashMap实现了Map的接口&#xff09;&#xff0c;它具有Map的特点。HashMap的底层是哈希表结构。 Map是用于保存具有映射关系的数据集合&#xff0c;它具有双列存储的特点&#xff0c;即一次必须添加两个元素&#xf…

5个高清/4K视频素材网站,免费下载。

本期跟大家分享5个超好用的视频素材网站&#xff0c;4K质量&#xff0c;免费可商用。 1、菜鸟图库 https://www.sucai999.com/video.html?vNTYwNDUx 菜鸟图库主要提供设计素材为主&#xff0c;自媒体相关素材也很多&#xff0c;像商用图片、背景图、视频素材、音频素材都很齐…

算法刷题总结 (二) 回溯与深广搜算法

算法总结2 回溯与深广搜算法一、理解回溯算法1.1、回溯的概念1.2、回溯法的效率1.3、回溯法问题分类1.4、回溯法的做题步骤二、经典问题2.1、组合问题2.1.1、77. 组合 - 值不重复2.1.2、216.组合总和III - 值不重复且等于目标值2.1.3、17. 电话号码的字母组合 - 双层回溯2.1.4、…

KafKa知识汇总

前言 汇总相关知识 Kafka快速实战与基本原理详解

LeetCode:215. 数组中的第K个最大元素

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; &#x1f33b;算法&#xff0c;不如说它是一种思考方式&#x1f340;算法专栏&#xff1a; &#x1f449;&#x1f3fb;123 一、&#x1f331;215. 数组中的第K个最大元素 题目描述&#xff1a;给定整数数组nums和整…

Django 之 Cookie 和 Session

3. Cookie 和 Session 会话 因为 HTTP 协议是无状态的&#xff0c;每次浏览器请求 request都是无状态的&#xff0c;后台服务器无法识别当前请求与上一次请求及之后请求是否为同一用户。 对于静态网站来说无所谓&#xff08;所有用户看到的都是一样的&#xff09;&#xff0c…

【C++】引用详细解析

目录引用的概念引用的用法引用的特性常引用&#xff08;涉及权限的放大与缩小&#xff09;引用的使用场景**作参数****作返回值**正确使用引用返回传值、传引用效率比较引用和指针的区别引用的概念 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0…

干货 | 开关电源的PCB布线设计技巧—如何降低EMI?

开关电源PCB排版是开发电源产品中的一个重要过程。许多情况下&#xff0c;一个在纸上设计得非常完美的电源可能在初次调试时无法正常工作&#xff0c;原因是该电源的PCB排版存在着许多问题。为了适应电子产品飞快的更新换代节奏&#xff0c;产品设计工程师更倾向于选择在市场上…

【Zblog建站】搭建属于自己的博客网站,并内网穿透实现公网访问

文章目录1. 前言2. Z-blog网站搭建2.1 XAMPP环境设置2.2 Z-blog安装2.3 Z-blog网页测试2.4 Cpolar安装和注册3. 本地网页发布3.1. Cpolar云端设置3.2 Cpolar本地设置4. 公网访问测试5. 结语1. 前言 想要成为一个合格的技术宅或程序员&#xff0c;自己搭建网站制作网页是绕不开…

第十四届蓝桥杯三月真题刷题训练——第 20 天

目录 第 1 题&#xff1a;纸张尺寸 问题描述 输入格式 输出格式 样例输入1 样例输出1 样例输入 2 样例输出 2 运行限制 代码&#xff1a; 解析&#xff1a; 第 2 题&#xff1a;最大数字 第 3 题&#xff1a;全排列的价值_递推公式 问题描述 输入格式 输出格式…

【中级软件设计师】—操作系统考点总结篇(二)

【中级软件设计师】—操作系统考点总结篇&#xff08;二&#xff09; 1.操作系统概述 1.1操作系统的功能 1.2 特殊的操作系统 1.3 进程的概念和状态 进程与程序的区别&#xff1a; 进程是程序的一次执行过程&#xff0c;没有程序就没有进程 程序是一个静态的概念&#xff0c;…