仅对文章大致的方法做个记录。
先给出论文和代码的链接:https://github.com/yzd-v/MGD
这篇论文讲的是一个通用于各种视觉任务的知识蒸馏方法,因为它属于特征模仿类的知识蒸馏方法。所谓的特征模仿,就是要让学生网络的某一个或几个特征图去模仿对应的教师网络的特征图,从数学表达式上来说,就是计算学生网络特征图和教师网络特征图均方误差,如下所示:
其中F表示特征图,T表示教师,S表示学生,函数falign的作用是将学生网络特征图的shape reshap成和教师网络特征图相同的shape,这样才能逐点计算均方误差。
而本文就是基于上式进行的简单改进,其动机如下:
对于基于cnn的模型,更深层的特征有更大的感受野,对原始输入图片有更好的特征表示。换个角度来说,就是特征图上的像素在一定程度上包含相邻像素的信息。因此我们能使用部分像素来恢复完整的特征图。
此文章中的方法就是去通过学生网络masked feature去生成教师网络的feature,从而帮助学生实现更好的特征表示。
具体实现方法很简单,分为3步:
1、特征对齐,通过1*1卷积将学生网络某一层输出的特征图reshape成和教师网络对应层的特征图的shape一致。
2、生成masked feature. 在特征图上每一个点都生成一个随机数Ri,j(0,1之间),然后有一个超参数,比这个大的为1,否则为0,就获得了一个特征掩膜。
这步我个人理解 就是对特征图进行随机的采样,然后获得一个不那么完整的特征图
3、然后将这个掩膜和reshape后的特征图相乘就获得了masked feature;
4、这个masked feature 经过生成模块:3*3conv,Relu,3*3conv 后生成了新的特征图,这个特征图会和教师网络的特征图进行知识蒸馏,即计算两者的特征模仿的损失。
整体流程如下:
整个过程相当的简单啊,和原本的特征模仿相比就多了一个先采样再生成的过程。
这为啥有效,我的想法是:通过这个掩膜,获得了部分的特征图,然后再生成新的特征图去模仿教师网络的特征图,相比原始的特征模仿,多的这一步,是增大网络学习的难度,从而迫使学生网络去学习一个更优秀的特征表示,而生成的特征图去模仿教师网络是因为教师网络的特征表示更优秀,通过模仿可以让学生网络训练时候的”进步“方向不走偏,往学习更优秀的特征表示的方向走。