Knowledge Review(CVPR 2021)论文解析

paper:Distilling Knowledge via Knowledge Review

official implementation:https://github.com/dvlab-research/ReviewKD

前言 

识蒸馏将知识从教师网络转移到学生网络,可以提高学生网络的性能,作为一种“模型压缩”的方法被广泛使用。15年第一篇蒸馏方法KD对logits进行蒸馏,FitNet提出对feature进行蒸馏,后续AT、PKT、CRD等多种蒸馏方法被提出,这些蒸馏方法大都专注于改进教师与学生同一层级特征的转换和损失函数上。

本文的创新点

本文从另一个新的角度来思考蒸馏问题,即教师和学生网络之间的连接路径,之前的方法大都使用教师网络的同一层级的信息来指导学生,本文认为这是整个蒸馏框架的瓶颈所在。本文提出了一种新的蒸馏方法,关键点在于用教师网络的低层特征来监督学生网络的高层特征,从而提高蒸馏的效果。

本文提出的方法叫做knowledge review,如图1(d)所示,这种review机制用之前(浅层)的特征来指导当前的特征,这意味学生必须总是检查以前学过的东西,以更新对“旧知识”的理解和背景。这和人类的学习曲线很类似,一个小孩只能理解被教知识的一部分,在成长的过程中,过去几年学过的知识越来越多的被记住和理解。

方法介绍 

Review Mechanism

假设一张输入图片为 \(\mathbf{X}\),学生网络表示为 \(\mathcal{S} \),\(\mathbf{Y}_{s}=\mathcal{S}(\mathbf{X})\) 表示学生的输出logit。其中 \(\mathcal{S} \) 可以分成多个部分 \((\mathcal{S}_{1}, \mathcal{S}_{2},\cdot\cdot\cdot,\mathcal{S}_{n},\mathcal{S}_{c})\),其中 \(\mathcal{S}_{c}\) 表示classifier部分,\(\mathcal{S}_{1},\cdot\cdot\cdot,\mathcal{S}_{n}\) 表示不同的stage部分,那么 \(\mathbf{Y}_{s}\) 可以表示为

\(\circ \) 表示函数的嵌套,\(g\circ f(x)=g(f(x))\)。中间层的特征表示为 \((\mathbf{F}^1_{s},\cdot \cdot \cdot ,\mathbf{F}^{n}_{s} )\),第 \(i\) 层的特征计算如下

对于教师网络 \(\mathcal{T} \) 过程是类似的。单层的知识蒸馏可以表示如下

其中 \(\mathcal{M} \) 是转换函数,\(\mathcal{D}\) 是衡量教师和学生之间差异的距离函数。类似的,多层的知识蒸馏可以表示如下

其中 \(\mathbf{I}\) 存储了所有要进行蒸馏的层的特征。

本文提出的 \(review\) 机制是用之前的特征来指导当前的特征。 review机制下单层的蒸馏表示如下

 

尽管看上去和多层蒸馏很像,但实际上有本质的区别。这里学生的特征固定为 \(\mathbf{F}^{i}_{s}\),然后使用教师的前 \(i\) 层特征来指导 \(\mathbf{F}^{i}_{s}\)。当review机制和多层知识蒸馏结合时,损失函数表示如下

Residual Learning Framework

基于上述review机制得到的结构如图2(a)所示,推广到多层如图2(b)所示,但是由于不同stage之间巨大的信息差异这种策略不是最优的,并且过程复杂计算量大,比如如果一个网络有 \(n\) 个stage那么损失函数就需要计算 \(n(n+1)/2\) 对特征。为了使过程更加简洁优雅,我们可以将图2(b)的对应的式(6)重新表示如下

 其中为了简洁省去了转换函数,然后转换 \(i,j\) 两个求和的顺序,如下

当固定住 \(j\),式(9)计算的是教师特征 \(\mathbf{F}^{j}_{t}\) 和学生特征 \(\mathbf{F}^{j}_{s}-\mathbf{F}^{n}_{s}\) 之间的距离,然后我们将距离的和近似为融合特征的距离,如下

其中 \(\mathcal{U} \) 是融合特征的模块,得到的结构如图2(c)所示。然后如图2(d)所示,作者用递归的方式对融合的计算进行进一步优化,\(\mathbf{F}^{j}_{s},\cdot\cdot\cdot,\mathbf{F}^{n}_{s}\) 的融合可以看成是 \(\mathbf{F}^{j}_{s}\) 和 \(\mathcal{U}(\mathbf{F}^{j+1}_{s},\cdot\cdot\cdot,\mathbf{F}^{n}_{s})\) 的融合,其中 \(\mathcal{U} (\cdot,\cdot)\) 看作一个递归函数,\(\mathbf{F}^{j+1}_{s}\) 到 \(\mathbf{F}^{n}_{s}\) 的融合定义为 \(\mathbf{F}^{j+1,n}_{s}\),损失函数可以表示为

图2(d)的结构非常优雅并且利用残差学习的概念简化了蒸馏过程,例如,学生stage4的特征和stage3的特征结合到一起来模拟教师stage3的特征,因此学生stage4的特征学习了教师和学生stage3之间的残差,这种残差信息很有可能是教师产生更高质量结果的关因素。

ABF and HCL

受SENET的启发,作者设计了一个基于注意力的融合模块,如图3(a)所示,高层特征首先resize成和低层特征一样的shape,然后concat一起生成两个 \(H\times W\) 的特征图,然后分别与原本的两个特征图相乘最后再相加得到最终结果。

HCL如图3(b)所示,我们通常用 \(\mathcal{L}_{2}\) 距离作为两个特征图之间的损失函数,但都是用在同一level的特征之间,但本文中不同层级的特征聚集到一起然后向teacher学习,直接利用全局 \(\mathcal{L}_{2}\) 距离不足以传递不同层级之间的复合信息,受PSPNET的启发,作者提出了HCL,利用spatial pyramid pooling将知识的传递划分到不同层级的context信息中。

实验结果

在CIFAR100数据集上,无论教师和学生的网络结构是否一样,本文提出的review蒸馏方法都优于之前的方法。

在ImageNet上也取得了最优的结果

目标检测任务中,使用COCO数据集,在两阶段Faster R-CNN和单阶段RetinaNet上实验,也都取得了最优的结果。

 

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

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

相关文章

np.array无法直接用matplotlib画图,因为需要借用np.squeeze先转化

文章目录 前言一、使用步骤1.没使用np.squeeze转化2.使用np.squeeze转化 前言 实际工作中,时而难免会遇见np.array无法直接用matplotlib画图的情况,这个时候,是因为在画图之前少了一个步骤,需要先借用np.squeeze先转化 一、使用步…

如何学习 Spring ?学习 Spring 前要学习什么?

整理了一下Spring的核心概念BeanDefinitionBeanDefinition表示Bean定义,BeanDefinition中存在很多属性用来描述一个Bean的特点。比如:class,表示Bean类型scope,表示Bean作用域,单例或原型等lazyInit:表示Be…

Matlab 在一个文件中调用另一个文件中的函数

文章目录 Part.I IntroductionPart.II 方法Chap.I A 文件中只有一个函数Chap.II A 文件中有多个函数 Part.I Introduction 本文介绍一下在脚本文件 B 中调用文件 A 中的函数的方法。 Part.II 方法 目的:在文件B.m调用A.m中的函数 默认两个文件在一个文件夹下&…

Python中查看对象的所有属性和方法以及查看属性是否存在

Python中查看对象的所有属性和方法以及查看属性是否存在 作者:爱编程的小金毛球球 日期:2023年12月3日 Python提供许多的内置函数和模块来帮助开发人员查看对象的所有属性,例如:dir(),vars(),__dict__等。 …

深度学习好文记录,反复学习

recent update time:2023.12.2 深度学习入门 - 知乎、这本书也很好,作者写的专栏不错。 机器学习,深度学习一些好文_一只菜得不行的鸟的博客-CSDN博客 卷积神经网络学习路线(五)| 卷积神经网络参数设置,提…

Python 错误 TypeError: __str__ Returned Non-String but Printing Output

本文旨在解决当我们尝试打印字符串而不是在函数中使用 return 语句时出现的问题。 Python 返回非字符串错误但打印输出 以下代码显示了 TypeError: str returned non-string,但它仍然打印输出。 示例代码: class xy:def __init__(self, x, y):self.x …

华为OD机试真题-靠谱的车-2023年OD统一考试(C卷)

题目描述: 程序员小明打了一辆出租车去上班。出于职业敏感,他注意到这辆出租车的计费表有点问题,总是偏大。 出租车司机解释说他不喜欢数字4,所以改装了计费表,任何数字位置遇到数字4就直接跳过,其余功能都正常。 比如: 1. 23再多一块钱就变为25; 2. 39再多一块…

力扣611题 有效三角形的个数 双指针算法

611. 有效三角形的个数 给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。 示例 1: 输⼊: nums [2,2,3,4] 输出: 3 解释:有效的组合是: 2,3,4 (使⽤第⼀个 2) 2,3,4 (使⽤第⼆个 2) 2,2,3 ⽰例 2: 输⼊: nums [4,2,3,4] 输出: 4 解…

Topic和Partition

作用 主题作为消息的一级分类, 分区是对二级分类。分区是Kafka可伸缩性和水平扩展的关键, 也是多副本机制保证可用性的基础。分区可以有一到多个副本, 每个副本对应1个日志文件, 每个日志文件对应1到多个日志分段。每个日志分段又可以细分为日志文件, 索引文件和快照文件。 创…

CAP概念和三种情况、Redis和分布式事务的权衡

借鉴:https://cloud.tencent.com/developer/article/1840206 https://www.cnblogs.com/huanghuanghui/p/9592016.html 一:CAP概念和三种情况 1.概念: C全称Consistency(一致性):这个表示所有节点返回的数…

轻易云AI:引领企业数智化转型提升企业AI效率

近期,轻易云AI与汤臣倍健的合作引起了业界的广泛关注。通过这一合作,轻易云AI不仅成功打造了集团小汤AI助手这一标志性的企业智能助手,更重要的是,这一合作凸显了轻易云AI作为专业AI应用集成专家的核心能力。轻易云AI已成功集成了…

Spring之RestTemplate详解

Spring之RestTemplate详解 1 RestTemplate1.1 引言1.2 环境配置1.2.1 非Spring环境下使用RestTemplate1.2.2 Spring环境下使用 RestTemplate1.2.3 Spring环境下增加线程号 1.3 API 实践1.3.1 GET请求1.3.1.1 不带参请求1.3.1.2 带参的get请求(使用占位符号传参)1.3.1.3 带参的g…

创建内存泄漏(js的问题)

如果没有有意识地编写代码来避免内存泄漏,那么内存泄漏几乎是不可避免的JavaScript问题。它们的发生方式有很多种,所以我们只重点介绍几种比较常见的情况。 内存泄漏实例1:对不存在的对象的悬空引用 考虑以下代码: var theThing null; var replaceTh…

Redis7--基础篇4(Redis事务)

Redis事务是什么 可以一次执行多个命令,本质是一组命令的集合,一个事务中的所有命令都会序列化,按顺序串行,而不会被其他命令插入。 其作用就是在一个队列中,一次性、顺序、排他的执行一系列命令。 Redis事务 VS 数据…

【每日一题】拼车+【差分数组】

文章目录 Tag题目来源解题思路方法一:差分 写在最后 Tag 【差分数组】【数组】【2023-12-02】 题目来源 1094. 拼车 解题思路 本题朴素的解题思路是统计题目中提到的每一个站点的车上人数,如果某个站点的车上人数大于车上的座位数直接返回 false&…

SSE4.2 指令集内置函数来加速32位循环冗余校验(CRC-32)计算

1、_mm_crc32_u8 为什么比查表快? _mm_crc32_u8 指令使用了 SIMD 技术(即单指令多数据流技术),可以同时处理多个字节的数据。这些字节被打包成 64 位整数,然后使用单条 _mm_crc32_u64 指令计算它们的 CRC-32 校验和。…

基于 Vue、Datav、Echart 框架的 “ 数据大屏项目 “,通过 Vue 组件实现数据动态刷新渲染,内部图表可实现自由替换

最近在研究大数据分析,基于 Vue、Datav、Echart 框架的 " 数据大屏项目 ",通过 Vue 组件实现数据动态刷新渲染,内部图表可实现自由替换。部分图表使用 DataV 自带组件,可进行更改,详情请点击下方 DataV 文档…

flask中遇到ImportError: cannot import name ‘url_encode‘ from ‘werkzeug‘

报错信息 Traceback (most recent call last): File “book_management_sys.py”, line 5, in from forms import Login, SearchBookForm, ChangePasswordForm, EditInfoForm, SearchStudentForm, NewStoreForm, StoreForm, BorrowForm File “C:\pythonProject\pythonProject…

abapgit 安装及使用

abapgit 需求 SA[ BASIS 版本 702 及以上 版本查看路径如下: 安装步骤如下: 1. 下载abapgit 独立版本 程序 链接如下:raw.githubusercontent.com/abapGit/build/main/zabapgit_standalone.prog.abap 2.安装开发版本 2.1 在线安装 前置条…