paper:https://openreview.net/pdf?id=uKhGRvM8QNH
code:https://github.com/ArchipLab-LinfengZhang/Object-Detection-Knowledge-Distillation-ICLR2021
1、摘要:
开篇paper提到kd之所以在目标检测上的失败主要是两个原因:1、前景和背景之间的像素不平衡。 2、缺乏对不同像素之间的关系的蒸馏。基于这两个原因,本文提出了注意力引导机制和non-local机制来解决,让学生网络能够更加努力的学习teacher的模型,这样不仅能够单个像素的特征,还能够学习non-local模块捕获不同像素之间的关系,paper在one-stage、two-stage、anchor-free上都实现了ap的提升。
1、Introduction
开始介绍了kd在object detection应用难的问题,如下所示:
1、Imbalance between foreground and background
在待检测图像中,背景像素比前景像素更多,在本文之前的kd,student总是被训练区模仿相同特征的所有像素的特征,因此student将大部分注意力都放在了背景像素里面,这抑制了对前景像素的学习,因此本文提出了注意力引导kd的机制,它只蒸馏关键的前景像素,采用注意力机制作为kd的mask,像素中具有较高的注意力值的可以视为前景对象的像素,然后student更高优先级的去学习
2、Lack of distillation on relation information.
现有的kd方法只考虑了单个像素的信息或者特征,忽略了全局,因此提出了non-local-kd,只在将student和teacher的关系信息与non-local模块,将这个关系给提炼出来。
综上,本文的贡献如下:
1、提出了注意力引导kd,强调student学习前景物体抑制对背景像素的学习
2、提出non-local-kd,不仅可以学习单个像素信息,还可以从teacher那边学习不同像素之间的关系
3、得出一个结论,具有较高ap的老师通常是kd方面更好的老师。这与图片分类的kd结论不同。
2、related-work
本文不写,有兴趣的童鞋自己看吧
3、methodology
整体核心结构如下图所示,非常清晰:
1、注意力引导的蒸馏分别在通道和空间维度上平均池化产生空间和通道注意力。然后,鼓励学生模仿老师的注意力。此外,学生还被训练模仿老师的注意力mask特征。
2、非局部蒸馏用非局部模块捕获图像中像素的关系。教师的关系信息是由L2norm loss的学生学习的。
3、non-local的体系结构。'1x1 layer'是具有1x1内核的卷积层。
4、蒸馏损失应用于backbone具有不同分辨率,因此可以处理不同的分辨率。 我们的方法不涉及检测head和neck(这个地方说的是不同分辨率的featuremap都是可以处理的,不是指的student和teacher的分辨率不一致)
接下来稍微详细的介绍一下原理和公式
1、attention-guided distillation
首先看一下更改后的特征图效果:
从上可知,paper的attention机制会将object做成类似于mask的方式,区别于以前的bbox的·方法,
首先用A表示目标检测模型中的backbone的特征,C\H\W分别表示通道、宽和高,如式所示:,接下来先生成spatial attention map和channel attention map,相当于求出映射函数。如下图所示:
所谓空间注意力,指的是每一个像素点的所有通道的均值:
维度变化:
所谓通道注意力机制,指的是每个通道上所有点的均值:
维度变化:
使用S和T来区分student和teacher,注意力引导的loss有两部分组成,分别是注意力转移loos-LAt和LAM注意力掩码损失,如下图所示:
给出空间注意力掩膜Ms和通道注意力掩膜Mc的表达式
注意一点,paper提及当mask的T取值不一致时,可视化出来的feature mask是有差异的,如下图所示:
LAT 用于鼓励学生模型模仿教师模型的空间和通道注意力,LAM用于鼓励student通过Mx和Mc掩码的L2番薯来模仿teacher模型的feature,loss函数如下所示范数
3.2 NON-LOCAL DISTILLATION
如前文给出的示意图,paper提出了non-local的学习机制,用来学习teacher模型的全局关系,公式如下所示:
non-local的结构如下图所示:
由于计算量很大,因此只推荐在高阶语义层使用,即本文在高阶feature层使用。再稍微普及一下non-local的原理,
深层conv虽然感受野比较大,但是仍旧有限,使用全局感受野就可以称之为non-local,简单来说,通过non-local操作的输出和原图大小一致,相当于考虑了全局:
如上式,f(xi,xj)代表计算两点相似性函数,g(xj)代表将本像素进行一个关系映射(像素点映射成向量),也可以理解为计算一个点的特征,因此计算一个xj的像素的特征向量,需要计算所有的xi,也就是说需要所有全局的像素参与,因此称之为non-local。
上图就是non-local的计算原理,其中mask可以认为是全局的每一个点与本像素的相似性,然后本点利用映射函数变成了g(xj)->transformed image, 然后在进行点成求和取均值,得到最终的结果,利用了全局信息,称之为non-local。
本paper的non-local公式正如上文的paper截图,上面两段讲得很清楚了,此处不再详细说明。
3.3 OVERALL LOSS FUNCTION
最后定义了一个总体的损失函数:
paper指出可以将这个loss函数放到加到原始的目标检测网络损失函数里面。
4 EXPERIMENT
4.1 EXPERIIMENT SETTRINGS
4.2 results
还是挺厉害的,sota结果,就是不知道能不能复现。。。。
基本上重点就差不多了,后续的实验细节可以通过原文区更加仔细的读,本文的分享就到这里了。