Noisy Student(CVPR 2020)论文解读

news2024/11/27 0:34:15

paper:Self-training with Noisy Student improves ImageNet classification

official implementation:https://github.com/google-research/noisystudent

本文的创新点

本文提出了一种新的半监督方法Noisy Student Training,主要包括三步:(1)在有标签数据上训练一个教师模型(2)利用教师模型在无标签数据上生成伪标签(3)结合有标签的图片和伪标签的图片训练学生模型。重复迭代这个过程,将学生作为教师重新生成伪标签,然后再训练一个新的学生模型。

Noisy Student Training从两个方面提高自训练和蒸馏的能力。首先,它使用的学生模型比教师模型更大(或至少相等),这样学生可以更好的从一个更大的数据集中学习。其次,它给学生模型增加的噪声,这迫使学生模型更努力的从伪标签中学习。

方法介绍

算法1概述了Noisy Student Training的过程。算法的输入包括有标签和无标签的图片。我们首先在有标签图片上用交叉熵损失训练一个教师模型。然后用教师模型在无标签图片上生成伪标签。伪标签可以是soft(连续分布)或hard(one-hot分布)。然后我们训练一个学生模型,在标签图片和无标签图片上最小化交叉熵损失。最后我们迭代这个过程,将训练好的学生模型作为教师模型在无标签数据上生成新的伪标签,并训练一个新的学生模型。算法的过程如图1所示

 

本文方法的关键改进在于给学生模型增加噪声,并使用不小于教师模型的学生模型。这使得该方法不同于知识蒸馏:1)蒸馏中通常不适用噪声 2)蒸馏中通常使用比教师小的学生模型。我们可以把本文的方法看作一种knowledge expansion,通过给学生模型足够的容量和更困难的学习环境(添加噪声),我们希望学生模型比教师更好。

作者在实验中使用了两种类型的噪声:输入噪声和模型噪声。输入噪声使用了数据增强方法RandAugment(具体见RandAugment(NeurIPS 2020)论文速读-CSDN博客),模型噪声使用了dropout和stochastic depth(见Stochastic Depth 原理与代码解析-CSDN博客)。

当应用于无标签数据时,噪声有一个重要的好处,即enforce决策函数在标签数据和无标签数据上的不变性。首先,数据增强是Noisy Student Training中一种重要的噪声方法,因为它迫使学生在同一张图片的不同增强变形上的预测一致性。具体来说,教师在干净的图片上生成高质量的伪标签,而学生则需要用增强后的图片来复制这些标签,即学生必须确保增强后的图片和原始图片是相同的类别。其次,当使用dropout和stochastic depth作为噪声时,教师模型在推理时(生成伪标签时)表现的像一个集成模型,而学生则像一个单一的模型。换句话说,学生被迫模仿一个更强大的集成模型。

Other Techniques 作者还使用了额外的trick:data filtering和balancing,这让Noisy Student Training的效果更进一步。具体来说,我们过滤掉教师模型推理时置信度低的图片,因为这些通常是out-of-doman图片。为了确保无标签图片的分布和训练集的分布相匹配,我们还需要平衡无标签图片中每个类别的数量,因为ImageNet中所有类别都有相似数量的标签图片。具体做法是,对于数量不够的类别进行复制,对数量太多的类别,只用置信度最高的图片。

最后作者还强调了下在实验中使用hard或soft伪标签Noisy Student的效果都很好。对于out-of-doman的无标签数据,soft伪标签的效果稍好些。

实验结果

实验细节

数据集. 有标签数据选用ImageNet数据集。无标签数据选用JFT数据集,并从中过滤掉ImageNet验证集中的图片。然后在剩下的图片上进行data filtering和balancing。首先用在ImageNet上训练的EfficientNet-B0模型为JFT中的每张图片预测一个标签,然后选择置信度大于0.3的图片。每个类别,选择置信度最高的130K张图片,如果本身不足130K的随机复制进行补齐。这样用于训练学生模型的图片共有130M张(实际只有81M,其它都是复制的)。

模型结构. 作者选择EfficientNet作为baseline模型,并进一步增大EfficientNet-B7得到EfficientNet-L2,后者并前者更深更宽但用了更小的输入分辨率。

训练细节. 对于有标签数据,batch size默认选择2048。有标签数据的训练时长和学习率根据batch size进行调整,具体来说,对于大于EfficientNet-B4的学生模型训练350个epoch,对于更小的学生模型训练700个epoch。训练350个epoch且batch size为2048时,初始学习率为0.128每个2.4个epoch衰减0.97,训练700个epoch时每个4.8个epoch进行衰减。

噪声. 对EfficientNet-B7和L2选择相同的噪声超参。其中最后一层stochastic depth的概率为0.8,其它层遵循linear decay rule。最后一层的dropout rate为0.5。对于RandAugment,选择两种随机变换,强度设置为27。

迭代训练. 作者实验得到的最好模型是将学生作为教师模型迭代三次得到的。首先在ImageNet上训练一个EfficientNet-B7作为教师模型。然后在无标签数据上训练一个EfficientNet-L2的学生模型,无标签数据的batch size是有标签数据的14倍。然后将这个EfficientNet-L2的学生模型作为教师模型再训练一个新的EfficientNet-L2的学生模型。最后再迭代一次,此时无标签的batch size设置有标签的28倍。

在ImageNet验证集上的结果如表2所示,用Noisy Student训练的EfficientNet-L2达到了88.4%的准确率,远超于之前EfficientNet系列的85.0%的准确率。提升的3.4%中0.5%来源于更大的模型,2.9%来源于Noisy Student Training,这表明Noisy Student Training对模型精度的影响比调整网络结构大得多。

此外,88.4%的精度还超过了之前采用FixRes ResNeXt-101 WSL的86.4%的SOTA,且后者使用了35亿张有标签的Instagram图片。

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

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

相关文章

每日一题 — 串联所有单词的子串

30. 串联所有单词的子串 - 力扣(LeetCode) 思路:因为words里面的每一个字符串的长度都是固定的,所以可以将题转换成字符在字符串中的所有异位词 设出哈希表定义left和right进窗口维护count判断出窗口维护count 代码: …

Langchain入门到实战-第三弹

Langchain入门到实战 Langchain中RAG入门官网地址Langchain概述代码演示调用RAG功能更新计划 Langchain中RAG入门 Retrieval Augmented Generation 翻译成中文是“检索增强生成” 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息…

算法打卡day35

今日任务: 1)343. 整数拆分 2)96.不同的二叉搜索树 3)复习day11 343. 整数拆分 题目链接:343. 整数拆分 - 力扣(LeetCode) 给定一个正整数 n,将其拆分为至少两个正整数的和&#xf…

Vue3 + Element-Plus 使用 Table 插槽时数据未及时更新

Vue3 Element-Plus 使用 Table 插槽时数据未及时更新 问题重现解决方法最终效果 问题重现 这里我已经通过二级分类 id 查询到一级分类和二级分类&#xff0c;但是使用插槽和 v-for 渲染出来还是之前的分类 id&#xff0c;但是一点击表格或者保存代码他又能正常刷新出来。 <…

算法设计与分析实验报告c++实现(矩阵链相乘、投资问题、完全背包问题、数字三角形、最小生成树、背包问题)

一、实验目的 1&#xff0e;加深学生对分治法算法设计方法的基本思想、基本步骤、基本方法的理解与掌握&#xff1b; 2&#xff0e;提高学生利用课堂所学知识解决实际问题的能力&#xff1b; 3&#xff0e;提高学生综合应用所学知识解决实际问题的能力。 二、实验任务 用动态…

1.2MHz,固定频率白光LED驱动器

一、产品概述 TX6216是一款升压转换器&#xff0c;设计用于通过单节锂离子电池驱动多达7个串联的白光LED。 TX6216采用电流模式&#xff0c;固定频率架构来调节LED电流&#xff0c;LED电流通过外部电流检测电阻测量。其低104mV反馈电压可降低功率损耗并提高效率。 TX6216具有…

笔试题1 -- 吃掉字符串中相邻的相同字符(点击消除_牛客网)

吃掉字符串中相邻的相同字符 文章目录 吃掉字符串中相邻的相同字符题目重现解法一&#xff1a;(基于 erase() 函数实现)解法二&#xff1a;&#xff08;利用 栈 辅助实现&#xff09;总结 题目链接&#xff1a; 点击消除_牛客网 题目重现 牛牛拿到了一个字符串。 他每次“点击…

JMeter控制器数据库获取一组数据后遍历输出

目录 1、测试计划中添加Mysql Jar包 2、添加线程组 3、添加 jdbc connection configuration 4、添加JDBC Request&#xff0c;从数据库中获取数据 5.获取数据列表&#xff0c;提取所有goodsName信息 6.通过添加控制器遍历一组数据 6.1 方式一&#xff1a;循环控制器方式 …

Vue3从入门到实战:深度掌握通信插槽slot

slot_默认插槽的概念&#xff1a; 在Vue中&#xff0c;插槽&#xff08;slot&#xff09;是一种用于在组件中插入内容的特殊技术。默认插槽是其中一种类型的插槽&#xff0c;它允许你在组件的模板中指定一个位置&#xff0c;以便在使用组件时插入自定义的内容。 想象一下你有…

Linux中安装seata

Linux中安装seata 一、准备1、环境2、下载3、上传到服务器4、解压 二、配置1、备份配置文件2、导入sql3、修改配置前4、修改配置后5、在nacos中配置 三、使用1、启动2、关闭 一、准备 1、环境 因为要在 nacos 中配置&#xff0c;要求安装并启动 nacos 。可以参考这篇博客。 …

【十一】MyBatis Plus 原理分析

MyBatis Plus 原理分析 摘要 Java EE开发中必不可少ORM框架&#xff0c;目前行业里最流行的orm框架非Mybatis莫属了&#xff0c;而Mybatis框架本身没有提供api实现&#xff0c;所以市面上推出了Mybatis plus系列框架&#xff0c;plus版是mybatis增强工具&#xff0c;用于简化My…

【JAVA基础篇教学】第十二篇:Java中多线程编程

博主打算从0-1讲解下java基础教学&#xff0c;今天教学第十二篇&#xff1a;Java中多线程编程。 多线程编程是利用多个线程同时执行任务来提高程序的效率和性能。在 Java 中&#xff0c;多线程编程可以通过继承 Thread 类或实现 Runnable 接口来实现。下面是一个简单的多线程…

IntelliJ IDEA2024 安装包(亲测可用)

目录 一、软件简介 二、软件下载 一、软件简介 IDEA&#xff08;Integrated Development Environment for Apache&#xff09; 是一款专为 Apache 开发者设计的集成开发环境。该软件提供了丰富的功能和工具&#xff0c;帮助开发者更高效地创建、调试和部署 Apache 项目。 主…

自定义类型: 结构体 (详解)

本文索引 一. 结构体类型的声明1. 结构体的声明和初始化2. 结构体的特殊声明3. 结构体的自引用 二. 结构体内存对齐1. 对齐规则2. 为啥存在对齐?3. 修改默认对齐值 三. 结构体传参四. 结构体实现位段1. 什么是位段?2. 位段的内存分配3. 位段的应用4. 位段的注意事项 ​ 前言:…

计算机系列之操作系统的系统

2、大话操作系统的启动 当按下开机键时&#xff0c;BIOS 就会开始执行 ​ BIOS 就是放在主板上 ROM 里面的一段程序。 ​ ROM Read Only Memory&#xff08;只能读取的内存&#xff09; ​ 所以 BIOS 在出厂的时候就可以直接写死在 ROM 里面。 ​ 每次开机的时候&#xff…

JavaScript 高性能编程 —— 加载和运行

JavaScript 在浏览器中的性能,可认为是开发者所要面对的最重要的可用性问题。此问题因 JavaScript 的阻塞特征而复杂,也就是说,当 JavaScript 运行时其他的事情不能被浏览器处理。 事实上,大多数浏览 器使用单进程处理 UI 更新和 JavaScript 运行等多个任务,而同一时间只能…

Python --- 在python中安装NumPy,SciPy和Matplotlib(Windows平台)

在python中安装NumPy&#xff0c;SciPy和Matplotlib(Windows平台) NumPy NumPy是Python的一个最常用最基本的扩展程序库之一&#xff0c;主要用于矩阵运算或数组计算。很多其他的python库都要依赖于NumPy才能跑。 NumPy的发展史&#xff1a; Matrix-sig 1995年&#xff0c;特殊…

设定延迟任务和定时任务并优化定时任务

一丶设定延时任务 1.设定延迟任务要求如下 ①在系统中建立easylee用户&#xff0c;设定其密码为easylee ②延迟任务由root用户建立 ③要求在5小时后备份系统中的用户信息文件到/backup中 ④确保延迟任务是使用非交互模式建立 ⑤确保系统中只有root用户和easylee用户可以执…

【Qt 学习笔记】Qt常用控件 | 按钮类控件Check Box的使用及说明

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 按钮类控件Check Box的使用及说明 文章编号&#xff1a;…

P5730 【深基5.例10】显示屏

思路&#xff1a; 此题只需要两层循环&#xff0c;通过数组映射即可求出答案 AC代码&#xff1a; #include<iostream>using namespace std;typedef long long ll; const int N 10; int a[N];int main() {ll n,m;cin >> n >> m;for(ll in;i<m;i){ll nu…