paper:https://arxiv.org/pdf/2011.13256.pdf
code:https://github.com/open-mmlab/mmrazor
这篇paper主要是商汤开源的mmrazor中提及在detection有效果,我之前记录的几篇sota文章虽然在各自的paper中在detection领域都有提及有增益,但实际上在我的测试中,可能由于模型容量或者其他原因,收益都几乎不可见,但是这篇文章是商汤开源的,我认为应该具有比较好的含金量,因此再分析和实验一波。
摘要:
kd被认为是一种简单有效的方法用来训练密集预测模型,许多的kd方法对其student和teacher的空间域的activation maps,通常的方法是normalizing 每一个空间位置激活值,并逐点最小化或者比较之间的差异,与之前的方法不同,我们的建议是归一化激活map,然后获得一张soft probability(软概率),然后最小化KL散度来比较两个网络之间的通道概率图,kd过程中更注重最突出的每个通道的显著性区域,这对密集预测很有价值,然后本方法在semantic和detection上进行了实验,取得了sota的结果,在retinanet上提升了3.4.
Introduction
Spatial distillation: 空间方向的蒸馏,可以理解成对所有通道的相同位置的点做归一化,然后让学生网络学习这个归一化后的分布,可以理解成对类别的蒸馏。
Channel distillation: 通道方向的蒸馏,可以理解成对单个通道内做归一化,然后让学生网络学习这个归一化后的分布,可以理解成对位置的蒸馏。
如上所示,使用kl散度来最小化通道的归一化后的激活maps的分布,如上图所示,每个通道的激活值更倾向于编码的显著性类别,比如car的通道就会更注重于car的类别,对于每个通道,student网络更注重于模仿和学习那些具有显著激活值得区域,从而在密集预测恩物中实现更准确地定位,比如detection,就更加注重于前景的对象的激活值学习。
本小节的结论是:paper展示了每个简单归一化每个通道可以提升spatial distillation的baseline,本文提出channel-wise kd方法能够兼得的应用于各个人物和网络结构,总结贡献如下:
1、提出了一种新的channel-wise蒸馏范式,取得了sota效果在semantic和detection任务上
2、在不同的网络结构中泛化性能很好,都取得了比较好的增益。
鉴于其简单和有效性,认为该方法可以作为密集预测任务的有效方法
Method
1、常规的空间蒸馏方法
2、Channel-wise Distillation
为了更好地利用每个通道的只是,使用软对齐(softly align activations)teacher和studfent相应通道的激活值。首先,将通道的激活值转化为概率分布,然后在使用figure2中的方法来衡量差异,比如kl散度,
yt和ys分别代表相应通道的activation map,里面的c代表对应的通道,ϕ代表将activation map转化为概率的分布,概率转换完成后可以消除大网络和小网络之间的绝对数值的大小差异,转化方式如下图所示:
上图也提到,当student和teacher模型的channel不一致时,可以使用1x1的卷积进行适配,最后对进行soft后的概率分布进行kl散度计算,同时如上式代入温度参数。
这里也提到了一个核心点,为什么kl散度是有效的,即当如果当 ϕ ( yT )越大,则 ϕ ( yS)同样也越大,来最小化kl散度,但是相反的,ϕ ( yT )越小,则 ϕ ( yS)则不会一直无穷小,因此,这样能够更加保证student学习到teacher的更显著的概率map。
experiments:
本博客只给出paper的detection的结构,有兴趣的同学自己去看其他的实验结果和超参数优化。