论文推荐-使用 Noisy Student 进行自训练可以提高 ImageNet 分类的表现

本文主要是介绍论文推荐-使用 Noisy Student 进行自训练可以提高 ImageNet 分类的表现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

教师学生模型、伪标签、半监督学习和图像分类

使用 Noisy Student 进行自训练改进 ImageNet 分类是一篇由 Google Research、Brain Team 和Carnegie Mellon大学发表在2020 CVPR的论文

Noisy Student在训练时使用相等或更大的学生模型和在学习期间添加噪声(Dropout, Stochastic Depth,和数据增强)扩展了自训练和蒸馏方法。

  • 一个 EfficientNet 模型首先作为教师模型在标记图像上进行训练,为 300M 未标记图像生成伪标签。
  • 然后将更大的 EfficientNet 作为学生模型并结合标记图像和伪标签图像进行训练。
  • 学生网络训练完成后变为教师再次训练下一个学生网络,并迭代重复此过程。

Noisy Student的训练过程

标记图像 {(x1, y1), (x2, y2), …, (xn, yn)},未标记的图像 {~x1; ~x2, …, ~xm}
第 1 步:学习教师模型 θ t*,它可以最大限度地减少标记图像上的交叉熵损失:

第 2 步:使用正常(即无噪声)教师模型为干净(即无失真)未标记图像生成伪标签:

经过测试软伪标签(每个类的概率而不是具体分类)效果更好。

第 3 步:学习一个相等或更大的学生模型 θ s*,它可以最大限度地减少标记图像和未标记图像上的交叉熵损失,并将噪声添加到学生模型中:

步骤 4:学生网络作为老师,从第2步开始进行迭代训练。

噪声

噪声由两种类型:输入噪声和模型噪声。

  • 对于输入噪声,使用 RandAugment [18] 进行数据增强。简而言之,RandAugment 包括增强:亮度、对比度和清晰度。
  • 对于模型噪声,使用 Dropout [76] 和 Stochastic Depth [37]。

噪声具有在标记和未标记数据的决策函数中强制执行不变性的重要好处。

数据增强是Noisy Student训练中的一种重要方法,因为它迫使学生确保图像增强版本之间的预测一致性。

教师模型通过干净的图像来生成高质量的伪标签,而学生则需要使用增强图像作为输入来重现这些标签。

当 Dropout 和 Stochastic Depth 函数用作噪声时,教师模型在推理时表现得像一个集成(当它生成伪标签时),而学生模型表现得像一个单一的模型。换句话说,学生被迫模仿更强大的集成模型。

其他一些信息

Noisy Student在训练还通过一个额外的技巧更好地工作:数据过滤和平衡。教师模型具有低置信度(<0.3)的图像会被过滤,因为它们通常是域外图像。
每个类的未标记图像的数量需要进行平衡,因为 ImageNet 中的所有类都具有相似数量的标记图像。为此,复制没有足够图像的类中的图像。对于图像过多的类,会使用置信度最高的图像(最多 130K)。

一些训练的细节如下

  • 使用了 EfficientNet-L2,它比 EfficientNet-B7 更宽更深,但使用了较低的分辨率。
  • 使用了 FixRes。
  • JFT 用作未标记的数据集。用于训练学生模型的图像总数为 130M(包含一些重复图像)。因为重复所以这 130M 图像中只有 81M 独特图像。
  • 最大的模型 EfficientNet-L2 需要在 Cloud TPU v3 Pod 上训练 6 天,该 Pod 有 2048 个内核。

实验结果

EfficientNet-L2 with Noisy Student 在训练时达到了 88.4% 的 top-1 准确率,明显优于 EfficientNet 上报告的 85.0% 的最佳准确率。 3.4% 的总收益来自两个来源:
通过使模型更大(+0.5%)和Noisy Student(+2.9%)。

换句话说,Noisy Student 训练对准确性的影响比改变架构要大得多。

Noisy Student 训练超过了需要 35 亿张带有标签的 Instagram 图像的 FixRes ResNeXt-101 WSL [55, 86] 86.4% 的最新准确率, 作为比较,Noisy Student Training 只需要 300M 未标记的图像,这可能更容易收集。 并且与 FixRes ResNeXt-101 WSL 相比,所提出的模型的参数数量也大约少了两倍。如果仅使用大约一半的模型大小,Noisy Student训练也优于 BiT-L。

不进行迭代训练的Noisy Student

Noisy Student 训练导致所有模型大小的持续提高率为 0.8%。具有Noisy Student 的 EfficientNets 在模型大小和准确性之间提供了更好的权衡。

稳健性基准测试

ImageNet-C 和 P 测试集 [31] 包括具有常见损坏和扰动的图像,例如模糊、雾化、旋转和缩放。
ImageNet-A 测试集 [32] 由难度较大的图像组成,这些图像会导致最先进模型的准确性显著下降。

标准模型的预测是不正确的,而 Noisy Student Training 模型的预测是正确的。

在ImageNet-A上,它将前一名的准确率从61.0%提高到83.7%。
在ImageNet-C上,它将 mean corruption error(mCE)从45.7减少到28.3。
在ImageNet-P上,如果使用224×224(直接比较)的分辨率,它会导致mean flip rate (mFR)为14.2,如果使用299×299的分辨率,则会降低至12.2。

对抗性鲁棒性结果

FGSM 攻击在输入图像 [25] 上执行一个梯度下降步骤,每个像素的更新设置为 ε。

Noisy Student训练将 EfficientNet-L2 的准确率从 1.1% 提高到 4.4%,尽管该模型并未针对对抗鲁棒性进行优化。

消融研究

Stochastic Depth, Dropout 和数据增强等噪声在使学生模型比教师模型表现更好方面发挥着重要作用。 随着噪声功能的移除,性能持续下降。发现向生成伪标签的教师模型添加噪声会导致准确性降低,这表明拥有强大的无噪声教师模型是非常重要的。

模型性能在第一次迭代中提高到 87.6%,然后在第二次迭代中提高到 88.1%。对于最后一次迭代,未标记的批量大小和标记的批量大小之间的比率更大,用于将最终性能提高到 88.4%。
(更多消融在论文的附录中介绍。如果有兴趣,请仔细阅读。)

总结

  • 使用性能更好的大型教师模型会带来更好的结果。
  • 为了获得更好的性能,需要大量未标记的数据。
  • 在某些情况下,对于域外数据,软伪标签比硬伪标签更有效。
  • 大型学生模型对于让学生变为更强大的模型很重要。
  • 数据平衡对于小型模型很有用。
  • 标记数据和未标记数据的联合训练优于首先使用未标记数据进行预训练然后对标记数据进行微调。
  • 在未标记的批次大小和标记的批次大小之间使用较大的比率可以使模型在未标记数据上训练更长时间,以实现更高的准确性。
  • 从头开始训练学生有时比用老师初始化学生要好,而用老师初始化的学生仍然需要大量的训练 epoch 才能表现良好。

https://www.overfit.cn/post/894964adab5c4c14b5cba4564f12a93f

论文地址:

[2020 CVPR] [Noisy Student]
Self-training with Noisy Student improves ImageNet classification https://arxiv.org/abs/1911.04252

本文作者:Sik-Ho Tsang

这篇关于论文推荐-使用 Noisy Student 进行自训练可以提高 ImageNet 分类的表现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/304208

相关文章

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

MyBatis ParameterHandler的具体使用

《MyBatisParameterHandler的具体使用》本文主要介绍了MyBatisParameterHandler的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、概述二、源码1 关键属性2.setParameters3.TypeHandler1.TypeHa

Spring 中的切面与事务结合使用完整示例

《Spring中的切面与事务结合使用完整示例》本文给大家介绍Spring中的切面与事务结合使用完整示例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录 一、前置知识:Spring AOP 与 事务的关系 事务本质上就是一个“切面”二、核心组件三、完