论文提出的GID框架能够自动选择可辨别目标用于知识蒸馏,而且综合了featurebased、relationbased和responsebased知识,全方位蒸馏,适用于不同的检测框架中。从实验结果来看,效果十分不错,值得一看 来源:晓飞的算法工程笔记公众号 论文:GeneralInstanceDistillationforObjectDetection 论文地址:https:arxiv。orgabs2103。02340v2Introduction 在目标检测应用场景中,模型的轻量化和准确率是同样重要的,往往需要在速度和准确率之间权衡。知识蒸馏(KnowledgeDistillation)是解决上述问题的一个有效方法,将大模型学习到的特征提取规则(知识)转移到小模型中,提升小模型的准确率,再将小模型用于实际场景中,达到模型压缩的目的。 目前的知识蒸馏方法大都针对分类任务,目标检测由于正负样本极度不平衡,直接将现有的方法应用到检测中一般都收益甚微。而目前提出的针对目标检测任务的知识蒸馏方法大都对知识进行了特定的约束,比如控制蒸馏的正负样本比例或只蒸馏GT相关的区域。此外,这些方法大都不能同时应用于多种目标检测框架中。为此,论文希望找到通用的知识蒸馏方法,不仅能应用于各种检测框架,还能转移尽可能多的知识,同时不用关心正负样本。 为了达到上述目的,论文结合responsebased知识、featurebased知识和relationbased知识,提出了基于可辨别目标的蒸馏方法GID(generalinstancesDistillation),主要优点有以下:可以对单图中的多个实例间的关系进行建模并用于蒸馏中。尽管已经有研究表明实例间的关系信息在检测中的重要性,但还没有研究将其应用的知识蒸馏中。避免手动设置正负样本比例或只选择GT相关区域进行蒸馏。虽然GT相关区域包含最多信息,但背景也可能包含对student的泛化能力学习有帮助的信息。论文通过实验发现自动选择的可辨别实例(discriminativeinstance)对迁移学习有明显的提升作用,这些显著实例也称为通用实例(GeneralInstance,GIs),因为不需要关心其正负。对不同检测框架通用,GIs是根据student和teacher的输出进行选择的,与网络的内部结构无关。 总结起来,论文的主要贡献如下:定义通用实例(GIs)作为蒸馏目标,能够高效地提升检测模型的蒸馏效果。基于GI,首次将relationbased知识引入到知识蒸馏中,并与responsebased知识和featurebased知识合作,使得student能超越teacher。在MSCOCO和PASCALVOC数据集上验证不同检测框架下的有效性,均达到SOTA。GeneralInstanceDistillation 有研究提出GT附近的特征区域包含有助于知识蒸馏训练的丰富信息,而论文发现不仅GT附近的区域,即使属于背景的区域,只要是可辨别区域(discriminativepatch)都对知识蒸馏有帮助。基于上面的发现,论文设计了通用实例选择模块(generalinstanceselectionmodule,GISM),用于从teacher和student的输出中选择关键实例进行蒸馏。其次,为了更好地利用teacher的信息,论文综合使用了featurebased、relationbased和responsebased知识用于蒸馏。GeneralInstanceSelectionModule 在检测模型中,预测结果能够指出信息最丰富的区域,而teacher和student的丰富区域的差异恰恰就是性能的差异。为了量化每个结果的差异,选择可辨别实例用于蒸馏,论文提出了两个指标:GIscore和GIbox,在每次迭代中动态计算。为了减少计算消耗,通过计算分类分数的L1score作为GIscore,而GIbox则直接选择分类分数更高的box。 整个GI的选择过程如图2所示,对于实例,其score和box的选择定义为: 和分别为GIscore和GIbox。对于onestage检测器,和为teacher和student的分类分数,而对于twostage检测器则为RPN的objectness分数,和同理。为预测框数目,为类别数。由于论文将teacher和student的detectionhead设置成完全一样的,所以预测框也是可以根据位置一一对应的。 需要注意的是,高GIscore的实例可能重合度比较高,导致蒸馏损失翻倍。为解决这一问题,使用NMS来去重,递归选择重复实例中GIscore最高的实例。在实际使用中,NMS的IoU为0。3,最终每张图片只选择topK个实例。 FeaturebasedDistillation FPN结合了主干网络的不同层特征,能够显著提升检测模型对多尺度目标的鲁棒性。于是,论文打算将FPN加入到蒸馏中,根据GIbox的尺寸选择对应的FPN层特征。 由于每个FPN层的目标特征大小不同,直接进行pixelwise蒸馏会导致模型更倾向于大目标。于是论文转而采用ROIAlign将不同大小的特征输出为相同大小再进行蒸馏,如图a所示。featurebased蒸馏损失计算如下: 为GISM选择的GI数目,和为ROIAlign处理后的FPN特征,用于将缩放到的相同大小。RelationbasedDistillation 物体间的关系信息是分类任务进行蒸馏的关键,但还没在检测任务蒸馏中进行尝试。同一场景中的物体,不管是前景还是背景,都是高度相关的,这对student网络的收敛有很大帮助。 为了挖掘GIs中的关系知识,使用欧式距离来度量实例间的距离,然后用L1距离来传递知识。如图a所示。relation蒸馏损失计算如下: ,为归一化因子,为smoothL1损失。ResponsebasedDistillation 知识蒸馏的关键主要是来自teacher的responsebased知识的约束,这里的responsebased知识指的是模型的最终输出。但因为检测输出往往存在正负样本不平衡或过多负样本的情况,如果直接将detectionhead的所有输出进行蒸馏,这种情况带来的噪声反而会损害student的性能。 有研究提出只蒸馏detectionhead的正样本,但这种方法忽略了可辨别的负样本的作用。为此,论文设计了distillationmask,将分类分支和回归分支的输出与GIs挂钩,比只选择正样本要高效。 不同检测模型的输出是不同的,论文定义了一个通用的方法来进行detectionhead的蒸馏,如图b所示。首先,基于GIs的distillationmask计算为: 函数是标签指定算法,输入为GIbox,当匹配时,输出1,否则输出0。函数对不同的模型的定义是不同的,对于RetinaNet,使用anchor和GIs间的IoU决定是否匹配,而对于FCOS则所有中心点在GIs外的输出都是0。 然后,responsebased损失计算如下: 为所有与选择的GIs匹配的输出,teacher和student对应的输出其中一个匹配即可。和为分类分支输出,和为回归分支输出,和为分类损失函数和回归损失函数。需要注意的是,为了简便,对于twostage检测器只蒸馏RPN输出。Overalllossfunction 模型的训练是端到端的,student的整体损失函数为: 为模型原本的损失函数,为调节超参数。Experiment 在VOC上对比蒸馏效果。 在COCO上对比蒸馏效果。 选择的GIbox可视化,前面为5000迭的选择,后面为90000迭的选择。绿色代表GT,红色为正样本,黄色为中间(非正非负)样本,青色为负样本。Conclusion 论文提出的GID框架能够自动选择可辨别目标用于知识蒸馏,而且综合了featurebased、relationbased和responsebased知识,全方位蒸馏,适用于不同的检测框架中。从实验结果来看,效果十分不错,值得一看。 如果本文对你有帮助,麻烦点个赞或在看呗 更多内容请关注微信公众号【晓飞的算法工程笔记】 worklifebalance。