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上实验,也都取得了最优的结果。

 

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

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

相关文章

数据结构树,二叉树,堆

目录 ​编辑 1.树概念及结构 2. 树的表示 3.二叉树概念及结构 特殊的二叉树 二叉树的性质 ​编辑 二叉树选择题 二叉树的存储结构 4.堆的概念及结构 父亲孩子下标关系​编辑 堆的实现接口 堆结构体设计堆的初始化堆的销毁 堆的插入(附:向上调整算法) 堆…

[多线程]线程安全问题再讨论 - volatile

目录 1.引言 2.volatil关键字 2.1内存可见性 2.2指令重排序 1.引言 大家好,我是老cu,今天我们来继续聊聊线程安全问题 线程安全是我们在编程开发中遇到的非常常见,棘手 的问题.同时也是多线程部分很复杂的问题.为了线程安全我们要做很多努力.也要对线程安全部分的代码进行慎…

计算机网络的分类

目录 一、按照传输介质进行分类 1、有线网络 2、无线网络 二、按照使用者进行分类 1、公用网 (public network) 2、专用网(private network) 三、按照网络规模和作用范围进行分类 1、PAN 个人局域网 2、LAN 局域网 3、MAN 城域网 4、 WAN 广域网 5、Internet 因特…

【算法】直接插入排序

目录 1. 说明2. 举个例子3. java代码示例4. java示例截图 1. 说明 1.直接插入排序的方式和打牌一样,刚开始数组为空 2.拿到一个数字后从左到右将它与数组中的每一个数字进行比较,然后插入合适的位置 3.到最后,数组按照既定的顺序排序好 2. 举…

代码随想录算法训练营第五十三天【动态规划part14】 | 1143.最长公共子序列、1035.不相交的线、53. 最大子序和

1143.最长公共子序列 题目链接 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 求解思路 动规五部曲 1.确定dp数组及其下标含义: dp[i][j]:长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序…

Tensorflow的日志log记录

if OUTPUT_GRAPH:tf.summary.FileWriter("logs/", sess.graph)自动创建文件夹log

GEE:Sobel算子卷积和Roberts算子卷积对比

作者:CSDN @ _养乐多_ 本文介绍了Sobel算子卷积和Roberts算子卷积操作的代码,并进行了图像对比,可以观察到两个算子的细微差异。 文章目录 一、Sobel算子和Roberts算子对比二、完整代码三、代码链接一、Sobel算子和Roberts算子对比 详细介绍介绍参考《遥感数字图像处理教程…

基于搜索协议实现工业设备升级

目录 1、背景引入 2、技术分析 3、过程概述 4、服务器端流程 5、客户端流程 6、效果展示 7、源码 7.1 master(主控) 7.2 device(设备) 8、注意事项 1、背景引入 在工业生产中,设备的升级和维护是非常重要的…

Gossip 协议

Gossip 协议 背景 在分布式系统中,不同的节点进行数据/信息共享是一个基本的需求。 一种比较简单粗暴的方法就是 集中式发散消息,简单来说就是一个主节点同时共享最新信息给其他所有节点,比较适合中心化系统。这种方法的缺陷也很明显&…

GOLAND搭建GIN框架以及基础框架搭建

创建GO环境文件夹 终端输入安装GIN go get -u github.com/gin-gonic/gin如果遇到超时错误 package golang.org/x/net/html: unrecognized import path "golang.org/x/net/html": https fetch: Get "https://golang.org/x/net/html?go-get1": dial tcp …

理解宏任务和微任务:JavaScript 异步编程的必备知识(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

借助SD地图的BEV静态感知

动机与出发点 纯视觉、视觉Lidar的感知系统在复杂城市道路场景下并不能如预期那般表现稳定,其中遮挡就是一个巨大挑战。现在的BEV静态感知方案多采用多趟重建的方式获取,这就导致无论前方是否有车辆、建筑物、绿化带等,只要能投影到BEV空间的…

1688买家API接口跨境卖家需要的API接口

1688作为深耕产业带多年的数字供应链平台,近两年不仅在年轻消费群体中热度飙升,在跨境侧也有不俗表现。 11月19日,1688总裁余涌在1688跨境寻源通计划发布会上透露,1688平台拥有100万的源头厂商,每年服务6500万的B类买…

【JavaEE】多线程(3) -- 线程等待 wait 和 notify

目录 1. wait()⽅法 2. notify()⽅法 3. notifyAll()⽅法 4. wait 和 sleep 的对⽐(⾯试题) 由于线程之间是抢占式执⾏的, 因此线程之间执⾏的先后顺序难以预知. 但是实际开发中有时候我们希望合理的协调多个线程之间的执⾏先后顺序. 完成这个协调⼯…

树莓派4B机器狗的串口通信驱动库pyserial实践

pyserial是一个串口通信驱动库,常用的Windows、Linux、MacOS等都可以安装,这里我使用的是树莓派4B来测试,这块板子还是很强大的,我们可以通过pyserial这个库来操作基于这块板子上的机器狗之类的设备。 1、四足机器狗 本人的是四…

初识Java 18-6 泛型

目录 潜在类型机制 支持潜在类型机制的语言 Python的潜在类型机制 C的潜在类型机制 Java中的直接潜在类型机制 潜在类型机制的替代方案 反射 将方法应用于序列中的每个元素 Java 8的潜在类型机制(间接实现) 潜在类型机制的使用例(S…

条款2:不要滥用宏

文章目录 优先选择编译器而不是预编译器两种特殊情况使用宏替代函数调用总结 优先选择编译器而不是预编译器 假设我们预定义了一个宏#define ASPECT_RATIO 1.653,当我们的程序在这个地方出现错误的时候。可能会出现以下的问题: 符号名称ASPECT_RATIO可能…

MQTT客户端、代理(broker)和连接建立

在前篇文章(http://t.csdnimg.cn/IamPz)中,介绍了发布/订阅架构和MQTT如何据此交换信息,其中的关键概念是: 发布/订阅架构触耦了负责发布信息的客户端(发布者)和负责接收信息的客户端&#xff…

C语言-联合和枚举

------------------------------------ --------------- ------ 最慢的步伐不是跬步,而是徘徊; 最快的脚步不是冲刺,而是坚持。 今天来到我们的联合和枚举类型的讲解: 目录 联合体类型 联合体类型的声明 联合体类型的特点 …

Wireshark抓包分析RTMP协议时,出现Unknown问题

进行rtmp推流时,使用wireshark抓包,发现部分包显示Unknown 解决方法: 编辑 -> 首选项 -> Protocols -> RTMPT,这里Maximum packet size默认是32768 将该值调大,比如调成1048576,即可解决该问题。…