paper:https://arxiv.org/pdf/2103.02340.pdf
code:GitHub - daixinghome/Distill_GID_detectron2
首先给出论文链接和源码链接,默默地发现是基于D2的代码,说不定可以白嫖一波,先写一下论文,后续再仔细研读一下源码,旷视的工作还是很良心的,重点指出的是,这篇paper和我的上一篇kd的博客的paper都是覆盖anchor-based、anchor-free的,因此我觉得算是很不错的工作。
1、abstract
paper首先指出以前的kd方法对不同的检测框架(算法)的泛化能力比较弱,且非常严重的依赖gt,忽略了实例之间的有价值的关系信息,因此paper提出了一种基于detection的心kd方法,在判别实例上不考虑gt区分正负样本,这个称之为general instance distillation,正方法包含一个GISM模块,这个模块充分的利用了GISM基于feature、response、relation的三种方式进行kd,同时也取得了sota的效果(目前sota的kd-detection论文感觉必须要求在anchor-based、anchor-free、one-stage、two-stage都能够有效才能够称之为sota)。
2、Introduction
detection的蒸馏需要精心设计正负样本的instance之间的比例,但是只提取gt相关的area可能会导致模型忽视背景中潜在的信息区域,同时,当前的detection-kd并不能够适应多个检测框架(anchor-based,anchor-free、one/two stage),因此本文设计了一个通用的kd方法,尽可能的多使用knowledge而不是考虑正负样本。
本文提出了一种基于判别实例,利用基于response、feature、relation的kd方法,优点如下:
1、可以对一幅图中的实例之间的关系知识进行建模一蒸馏
2、避免手动设置比例与gt相关的正负样本,本方法不依赖于GT标签
3、对各种detection框架泛化性能很好
然后paper的贡献是将通用实例GI(general instance)定义为kd目标,并且基于GI,首先介绍了基于relation、然后再结合feature、response一起最终超越了sudent。
3、.General Instance Distillation
首先paper给出了整体模型框架结构图,如下图所示:
如上图所示,paper最终计算分类score的L1-loss,GIbox是计算得分最高的极大值抑制后的结果。然后下文再谈论什么是GIBox。
然后更进一步的,为了能够更大程度的利用teacher模型的knowledge,paper提取了feature-based, relation-based and the response-based knowledge for distillation,然后框架图如下图所示:
上面这个框架将两幅图完全连起来了,第一幅图讲的是如何生成GIS,第二幅框架讲的是a、选定的Gi用于ROI Align裁剪学生和teacher backbone中的特征然后求loss(GIS feature loss和GIS relation loss)。b、选定的GI通过GI分配生成mask,然后通过mask 分类 head和regression head来提炼基于response的knowledge,就是分别对teacher、student的cls和regfeature进行mask,然后将mask后的featuremap进行response kd。这个就是这篇paper的核心思想了。个人认为合理。
3.1. General Instance Selection Module
paper提出两个指标:GI scores和GI box,这两个都在每次train时进行动态的计算,然后paper指出为了节省计算资源,直接使用L1-loss来计算,上面的第一幅图给出了GI的如何生成(基于anchor-free的怎么处理呢),然后向下图给出了每一个预测实例r的score和box定义如下:
最后通过nms保留一些高分或者超参数设定的该保留的值进行学习。超参数iou threshold设定为0.3,并且每一张img同时会设定topk参与kd。
3.2. Feature-based Distillation
sota的detection使用fpn,因此我们使用fpn进行kd,因此需要使用到不同尺寸的GIbox。由于detecton任务的目标大小差异很大,如果使用逐像素kd的话会导致模型更加倾向学习大目标,因此如整体结构图图a所示,利用ROIAlign,将不同大小的GI feature调整为相同大小再进行kd,平均对待每一个目标,feature-bsed kd损失函数如下图所示:
其中fadapt是一种线性映射变化,将s与t映射到同一维度。其实就是将GI利用ROIAlign映射到同一尺寸,然后做L2loss。
3.3. Relation-based Distillation
在存在一批GI的基础上,paper使用基于relation的kd,使用欧氏距离来衡量knowledge的相关性,L1距离来转移知识,如结构图a所示,利用GISDErelation来完成kd,loss如下所示:
其实就是计算feature-t和feature-t的之间的关系,feature-s和feature-s的之间的关系,然后对这个关系进行smooth-l1-loss。实际上就是计算同一个模型多个目标之间的相互距离分布的差异作为loss。
3.4. Response-based Distillation
kd的性能提升主要是由于正则化来自于teacher模型的基于response的knowledge,但是对整个输出head执行蒸馏不利于student的性能,paper认为是由于detection的正负样本不平衡以及负样本引入过多的噪声导致的,因此设计了基于GIS的回归和cls分支,这证明了比仅仅使用GTlabel更为有效,设计了一个通用框架,如结构图图b所示,整体损失函数如下式所示:
如上式所示,首先计算mask。mask说白了就是如果该feature是GIbox,则为1,否则为0,Lcls和
Lregs与正常的task任务一致(这个地方需要看一下怎么实现),也就是交叉熵和回归损失函数?
实际上就是把相应的GI对应成一个anchor(anchor-free也有anchor),然后计算这个anchor在s和t模型上cls和reg分支上的差异。
. 3.5. Overall loss funct
如下所示,不多说:
. 4. Experiment
感觉还是很sota,原理讲解也很清晰,代码细节后续再补充。
版权声明:本文为CSDN博主「lovep1」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lovep1/article/details/121501286
暂无评论