PKD: General Distillation Framework for Object Detectors via Pearson Correlation Coefficient阅读笔记

本文主要是介绍PKD: General Distillation Framework for Object Detectors via Pearson Correlation Coefficient阅读笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

(一) Title

在这里插入图片描述
论文地址:https://arxiv.org/abs/2207.02039

(二) Summary

研究背景:

  • 在目标检测任务中KD发挥着压缩模型的作用,但是对于heterogeneous detectors(异构)之间的蒸馏仍然lack of study。

本文的主要工作

  • 来自异构教师的FPN feature能够帮助具有不同detect head和label assignment方式的学生.这里给我的感觉是使用anchor-based框架也能够蒸馏anchor-free的框架
  • 引入了皮尔逊相关系数来进行蒸馏实现relax constraints

本文的主要贡献:

  • 使用Pearson Correlation Coefficient对于同质和异质的教师-学生蒸馏结构同样有帮助,并且收敛更快
  • MaskRCNN-Swin detector作为教师模型,ResNet-50 based RetinaNet
    and FCOS achieve 41.5% and 43.9% mAP on COCO2017。

(三) Problem Statement

作者指出直接对齐学生网络和教师网络的特征存在着两个问题:

  • 学生网络和教师网络feature magnitude(特征幅度之间的差异)会导致over strict constraint。蒸馏任务中有没有什么方法能够衡量特征语义之间的差异呢?
  • 在FPN和具有较大特征幅度的feature layer中,很容易把控住梯度的收敛方向,从而引入更多的噪声进来

从图片展示上来看,如下:
在这里插入图片描述

  • 上图中左图应该是按照特征激活值所在区间绘制了一个柱状图这里纵坐标上角标单位是 1 e 6 1e6 1e6,应该统计的是FPN的所有特征层,从横坐标上来看,是直接对特征图的值按照取值大小划分区间,对在该区间内的特征点数量进行的统计。
  • 中间图的公式略微有点儿难看懂, number  i = ∑ u , v 1 [ arg ⁡ max ⁡ c s u , v ( c ) = i ] \text { number }_{i}=\sum_{u, v} \mathbb{1}\left[\arg \max _{c} s_{u, v}^{(c)}=i\right]  number i=u,v1[argmaxcsu,v(c)=i],首先这里的 number  i \text { number }_{i}  number i表示的是纵坐标的取值,图中横坐标表示特征图P3的通道数,然后里面的 1 [ arg ⁡ max ⁡ c s u , v ( c ) = i ] \mathbb{1}\left[\arg \max _{c} s_{u, v}^{(c)}=i\right] 1[argmaxcsu,v(c)=i]表示的是对于第 i i i个通道,如果 ( u , v ) (u,v) (u,v)位置对应的特征取值为所有通道中最大的那个,则取值为1,否则取值为0.由于第 l l l个FPN层的特征为 s l ∈ R C × H × W \boldsymbol{s}_{\boldsymbol{l}} \in \mathbb{R}^{C \times H \times W} slRC×H×W,取最大值来压缩通道数量得到2D的特征图表示。实际上这里统计的是2D特征图上的特征分别来自哪个特征通道,即哪一个特征通道相对来说更加重要。从这个图中我们也可以看到总有一些特征通道的激活值比其他通道大,然而less activated features在蒸馏任务中同样关键,这部分对应的梯度较小
  • 最右侧图是对2D图进行0-255归一化之后的可视化图片。这里考虑的是不同stage之间特征的差异问题,上面那组图为教师模型,下为学生模型,教师P6的特征激活值要比P3小很多,从而导致具有较大激活值的stage在梯度反向传播中更加关键,占据更大的梯度向量,此外在同背景无关的位置可视化特征图上也出现了具有较大激活值,这些位置对于蒸馏任务来说会额外的引入噪声。

从上面的描述中,总结下来,希望能够解决的三个问题是:

  • FPN不同stage之间特征magnitude差异
  • 在文献[34,46]中给出的less activated features are still practical for distillation假设成立的条件下,这里博主对于这个假设持怀疑态度,从之前的论文和实验经历来看,较大激活值的特征在蒸馏过程中能够起到更大的帮助,再加上这个假设也就相当于所有的activation均有用,这个结论并不是很赞同,如何处理具有less activated feature的特征通道?
  • 对于非object位置的large magnitude如何避免其引入的额外噪声?

(四) Method

本文提出使用Pearson Correlation Coefficient(PCC)来进行蒸馏,为了解决上述3个问题negative influences of magnitude difference, dominant FPN stages and channels,首先将特征图归一化到0均值,单位方差。这里使用的是哪一个norm方式呢?这里实际上等价于最大化皮尔逊相关系数,此外PCC还能够减少特征幅度对于梯度反传的影响。使得训练过程更加稳定。这里需要注意的是:仅仅对于FPN特征进行了蒸馏。
在这里插入图片描述
详细的蒸馏过程如下:

  • 首先,对特征图进行0均值,unit 方差的归一化,具体的方式为:
    一个mini-batch的特征图的batch大小为 b b b,特征图size为 h w hw hw,令 m = ∥ B ∥ = b ⋅ h w m=\|\mathbb{B}\|=b \cdot h w m=B=bhw, s ( c ) ∈ R m \boldsymbol{s}^{(c)} \in \mathbb{R}^{m} s(c)Rm为mini-batch第 c c c个通道的FPN输出,最终得到归一化的学生和教师网络的特征值: s ^ 1 … m \hat{s}_{1 \ldots m} s^1m t ^ 1 … m \hat{t}_{1 \ldots m} t^1m这里的均值和方差的计算方式感觉就是做了一个BN啊!!!
  • 对应的蒸馏损失函数为:
    L F P N = 1 2 m ∑ i = 1 m ( s ^ i − t ^ i ) 2 \mathcal{L}_{F P N}=\frac{1}{2 m} \sum_{i=1}^{m}\left(\hat{s}_{i}-\hat{t}_{i}\right)^{2} LFPN=2m1i=1m(s^it^i)2
    最大化皮尔逊相关系数的表示方式为:
    在这里插入图片描述
    对应到文中的表达形式为:
    r ( s , t ) = ∑ i = 1 m ( s i − μ s ) ( t i − μ t ) ∑ i = 1 m ( s i − μ s ) 2 ∑ i = 1 m ( t i − μ t ) 2 r(\boldsymbol{s}, \boldsymbol{t})=\frac{\sum_{i=1}^{m}\left(s_{i}-\mu_{s}\right)\left(t_{i}-\mu_{t}\right)}{\sqrt{\sum_{i=1}^{m}\left(s_{i}-\mu_{s}\right)^{2}} \sqrt{\sum_{i=1}^{m}\left(t_{i}-\mu_{t}\right)^{2}}} r(s,t)=i=1m(siμs)2 i=1m(tiμt)2 i=1m(siμs)(tiμt)
    这里 s ^ , t ^ ∼ N ( 0 , 1 ) \hat{\boldsymbol{s}}, \hat{\boldsymbol{t}} \sim \mathcal{N}(0,1) s^,t^N(0,1)服从标准正态分布,并且有 1 m − 1 ∑ i s ^ i 2 = 1 , 1 m − 1 ∑ i t ^ i 2 = 1 \frac{1}{m-1} \sum_{i} \hat{s}_{i}^{2}=1, \frac{1}{m-1} \sum_{i} \hat{t}_{i}^{2}=1 m11is^i2=1,m11it^i2=1成立,此时上述的损失函数就变成了:
    L F P N = 1 2 m ( ( 2 m − 2 ) − 2 ∑ i = 1 m s ^ i t ^ i ) = 2 m − 2 2 m ( 1 − r ( s , t ) ) ≈ 1 − r ( s , t ) \begin{aligned} \mathcal{L}_{F P N} &=\frac{1}{2 m}\left((2 m-2)-2 \sum_{i=1}^{m} \hat{s}_{i} \hat{t}_{i}\right) \\ &=\frac{2 m-2}{2 m}(1-r(\boldsymbol{s}, \boldsymbol{t})) \approx 1-r(\boldsymbol{s}, \boldsymbol{t}) \end{aligned} LFPN=2m1((2m2)2i=1ms^it^i)=2m2m2(1r(s,t))1r(s,t)
    即最小化损失等价于最大化皮尔逊相关系数。此时对于损失对于FPN特征输出 s i s_i si的梯度为:
    ∂ L F P N ∂ s i = 1 m σ s ( s i ^ ⋅ r ( s , t ) − t i ^ ) \frac{\partial \mathcal{L}_{F P N}}{\partial s_{i}}=\frac{1}{m \sigma_{s}}\left(\hat{s_{i}} \cdot r(\boldsymbol{s}, \boldsymbol{t})-\hat{t_{i}}\right) siLFPN=mσs1(si^r(s,t)ti^)
    这里梯度计算为什么为多了一个 r ( s , t ) r(\boldsymbol{s}, \boldsymbol{t}) r(s,t)呢?首先 L F P N = 1 2 m ∑ i = 1 m ( s ^ i − t ^ i ) 2 \mathcal{L}_{F P N}=\frac{1}{2 m} \sum_{i=1}^{m}\left(\hat{s}_{i}-\hat{t}_{i}\right)^{2} LFPN=2m1i=1m(s^it^i)2, s ^ i = s i − μ s σ s \hat{s}_{i}=\frac{s_{i}-\mu_s}{\sigma_s} s^i=σssiμs, L F P N \mathcal{L}_{F P N} LFPN直接对 s i s_{i} si求导,从这里看应该是 ∂ L F P N ∂ s i = 1 m σ s ( s i ^ − t i ^ ) \frac{\partial \mathcal{L}_{F P N}}{\partial s_{i}}=\frac{1}{m \sigma_{s}}\left(\hat{s_{i}}-\hat{t_{i}}\right) siLFPN=mσs1(si^ti^)吧?没看出来是怎么引入皮尔逊相关系数的
    从上述的梯度表达式中可以看出,皮尔逊系数对于学生网络激活输出进行了加权,从加权结果中来看,实际上这里假设不相关,然后 r ( s , t ) = 0 r(\boldsymbol{s}, \boldsymbol{t})=0 r(s,t)=0,此时梯度完全收教师网络值把控?梯度并不为0,整体给我的感觉很奇怪!,除了这个地方之外,关于皮尔逊相关系数对于上述三个问题的解决描述不清楚
    最终的总损失表示为:
    L = L G T + α L F P N \mathcal{L}=\mathcal{L}_{G T}+\alpha \mathcal{L}_{F P N} L=LGT+αLFPN

PCC和KL散度之间的关联是什么呢?
KL散度在蒸馏过程中的处理方式为:首先通过softmax函数将激活值转换成概率分布,然后最小化教师和学生激活值之间的KL散度损失,从公式上来看是:
L K L = T 2 ∑ i = 1 m ϕ ( t i ) ⋅ log ⁡ [ ϕ ( t i ) ϕ ( s i ) ] \mathcal{L}_{K L}=T^{2} \sum_{i=1}^{m} \phi\left(t_{i}\right) \cdot \log \left[\frac{\phi\left(t_{i}\right)}{\phi\left(s_{i}\right)}\right] LKL=T2i=1mϕ(ti)log[ϕ(si)ϕ(ti)]
归一化方式为:
ϕ ( t ) = exp ⁡ ( t i / T ) ∑ j = 1 m exp ⁡ ( t j / T ) \phi(t)=\frac{\exp \left(t_{i} / T\right)}{\sum_{j=1}^{m} \exp \left(t_{j} / T\right)} ϕ(t)=j=1mexp(tj/T)exp(ti/T)
然后,这里作者说在高温条件下,最小化post-normalized features之间的KL散度,等价于最小化MSE,然后就等价于在pre-normalized features之间的最大化皮尔逊相关系数。
接着KL散度对于normalized activation s ^ i \hat{s}_i s^i求梯度,得到:
∂ L K L ∂ s ^ i = T ( q i − p i ) = T ( e s i / T ^ ∑ j e s j / T ^ − e t i / T ^ ∑ j e t j / T ^ ) \frac{\partial \mathcal{L}_{K L}}{\partial \hat{s}_{i}}=T\left(q_{i}-p_{i}\right)=T\left(\frac{e^{\hat{s_{i} / T}}}{\sum_{j} e^{\hat{s_{j} / T}}}-\frac{e^{\hat{t_{i} / T}}}{\sum_{j} e^{\hat{t_{j} / T}}}\right) s^iLKL=T(qipi)=T(jesj/T^esi/T^jetj/T^eti/T^)
其中 p i = ϕ ( t i ^ ) and  q i = ϕ ( s i ^ ) p_{i}=\phi\left(\hat{t_{i}}\right) \text { and } q_{i}=\phi\left(\hat{s_{i}}\right) pi=ϕ(ti^) and qi=ϕ(si^)这里的梯度求导方式不知道是则得到的?
接着当温度足够高时,有近似计算如下:
∂ L K L ∂ s i ^ ≈ T ( 1 + s i ^ / T N + ∑ j s j ^ / T − 1 + t i ^ / T N + ∑ j t j ^ / T ) \frac{\partial \mathcal{L}_{K L}}{\partial \hat{s_{i}}} \approx T\left(\frac{1+\hat{s_{i}} / T}{N+\sum_{j} \hat{s_{j}} / T}-\frac{1+\hat{t_{i}} / T}{N+\sum_{j} \hat{t_{j}} / T}\right) si^LKLT(N+jsj^/T1+si^/TN+jtj^/T1+ti^/T)
由于 s ^ i , t ^ i \hat{s}_i,\hat{t}_i s^i,t^i都是0均值的,然后上式就可以简化成:
∂ L K L ∂ s i ^ ≈ 1 N ( s i ^ − t i ^ ) \frac{\partial \mathcal{L}_{K L}}{\partial \hat{s_{i}}} \approx \frac{1}{N}\left(\hat{s_{i}}-\hat{t_{i}}\right) si^LKLN1(si^ti^)
然后观察同PCC之间的差异。

(五) Experiments

在这里插入图片描述
同质结构下的蒸馏
在这里插入图片描述
异质结构下的蒸馏过程。
在这里插入图片描述
针对之前提到的三种问题,设计了三个蒸馏对象来比较MSE和本文提出的PKD的差异。
在这里插入图片描述
超参数对于蒸馏效果的影响

这篇关于PKD: General Distillation Framework for Object Detectors via Pearson Correlation Coefficient阅读笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

忽略某些文件 —— Git 学习笔记 05

忽略某些文件 忽略某些文件 通过.gitignore文件其他规则源如何选择规则源参考资料 对于某些文件,我们不希望把它们纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常它们都是些自动生成的文件,比如日志文件、编译过程中创建的临时文件等。 通过.gitignore文件 假设我们要忽略 lib.a 文件,那我们可以在 lib.a 所在目录下创建一个名为 .gi

取得 Git 仓库 —— Git 学习笔记 04

取得 Git 仓库 —— Git 学习笔记 04 我认为, Git 的学习分为两大块:一是工作区、索引、本地版本库之间的交互;二是本地版本库和远程版本库之间的交互。第一块是基础,第二块是难点。 下面,我们就围绕着第一部分内容来学习,先不考虑远程仓库,只考虑本地仓库。 怎样取得项目的 Git 仓库? 有两种取得 Git 项目仓库的方法。第一种是在本地创建一个新的仓库,第二种是把其他地方的某个