目标检测中的知识蒸馏方法
知识蒸馏 (Knowledge Distillation KD) 是模型压缩(轻量化)的一种有效的解决方案,这种方法可以使轻量级的学生模型获得繁琐的教师模型中的知识。知识蒸馏使用一种教师—学生(Teacher-Student)训练结构,通常是已训练好的教师模型提供知识,学生模型通过蒸馏训练来获取教师的知识,能够以轻微的性能损失为代价将复杂教师模型的知识迁移到简单的学生模型中。在蒸馏的过程中,小模型学习到了大模型的泛化能力,保留了接近于大模型的性能。
一、什么是知识蒸馏
1、知识蒸馏的思想
知识蒸馏的方法,一般是先训练一个性能较好的教师模型(大模型),然后使用这个大模型的输出作为软标签,用数据的真实标签作为硬标签,两者联合起来去训练学生模型(小模型)。通过这种方法,可以把模型压缩到一个非常小的规模,而训练得到的小模型能够具有与复杂模型近似的性能效果,但是复杂度和计算量却要小很多。
最早知识蒸馏算法主要针对分类问题,分类问题的共同点是模型最后会有一个softmax层,其输出值对应了相应类别的概率值。一个很直白且高效的迁移泛化能力的方法就是:使用“软标签”。软标签是指输入数据通过教师模型所得到的softmax层的输出。软标签相比硬标签(Ground Truth),有着更高的熵,更小的梯度变化,因此学生模型相比教师模型可以使用更少的数据和更大的学习率(意味着收敛很快,这部分多出来的训练时间不是问题)。
2、KD的训练过程为什么更有效?
softmax层的输出,除了正例之外,负标签也带有大量的信息,比如某些负标签对应的概率远远大于其他负标签。而在传统的训练过程(hard target)中,所有负标签都被统一对待。也就是说,KD的训练方式使得每个样本给Net-S带来的信息量大于传统的训练方式。
硬标签hard targets:输入数据所对应的label 例:[0,0,1,0]
软标签soft targets:输入数据通过大模型所得到的softmax层的输出 例:[0.01,0.02,0.98,0.17]
soft target有着更高的熵,更小的梯度变化,因此student相比teacher可以使用更少的数据和更大的学习率(意味着收敛很快,这部分多出来的训练时间不是问题)
3、知识蒸馏的过程
1)训练大模型:先用hard target,也就是正常的label训练大模型;
2)计算“软目标”:利用训练好的大模型来计算“软目标”。也就是大模型“软化后”再经过softmax的output;
3)训练小模型,在小模型的基础上再加一个额外的软目标的损失函数,通过参数调节两个损失函数的比重,蒸馏损失如下图所示:
4)将训练好的小模型进行预测。
二、知识蒸馏的相关文献
1、Distilling the Knowledge in a Neural Network
2、Improved Knowledge Distillation via Teacher Assistant: Bridging the Gap Between Student and Teacher,2019
通过助教提升知识提取能力:减小学生网络与老师网络之间的鸿沟
当学生和教师之间的差距较大时,学生网络性能会下降。引入了多步骤知识提炼,它使用一个中等规模的网络(教师助理)来弥合学生和教师之间的差距。
3、Relational Knowledge Distillation(CVPR 2019)
代码:https://github.com/lenscloth/RKD
https://github.com/HobbitLong/RepDistiller (多种蒸馏方法)
过去的知识蒸馏方法只考虑单个样本在大模型和小模型间的迁移,但是忽略了蒸馏特征或者样本之间的关系信息。
如何将知识从大模型迁移到小模型,实现知识蒸馏?过去的方法只考虑单个样本在大模型和小模型间的迁移。迁移样本间的关系(结构信息)会优于迁移单个样本特征。基于这一思想,我们还需要思考衍生问题:样本间的关系(结构信息)该如何表示。对于具体实现,提出了两种RKD损失:二阶的距离损失(distance-wise)和三阶的角度损失(angle-wise)
蒸馏的是两个样本间的距离,三个样本间的角度
三、目标检测中的知识蒸馏的相关文献
1、Learning Efficient Object Detection Models with Knowledge Distillation (2017 NIPS)
第一篇是2017年的NIPS提出的,它是用知识蒸馏做目标检测的第一篇论文。核心思想比较简单的,主要由三个loss函数组成,分别对主干网络、分类head和回归head进行了蒸馏。
1)对主干网络,加了一个adaptation layers,让feature map的维度匹配
2)对于分类任务的输出,使用加权cross entropy loss来解决类别失衡严重问题
3)对于回归任务,将教师的回归预测作为上界。学生网络需要尽可能和真实标签接近,一旦学生网络的质量超越教师网络时,教师网络不再指导学生网络。
2、Distilling Object Detectors with Fine-grained Feature Imitation CVPR 2019
代码:https://github.com/twangnh/Distilling-Object-Detectors
第二篇是2019年的CVPR提出的,通过细粒度特征模仿蒸馏目标检测。这篇文章FGFI 通过实验发现,全特征模仿(就是均衡地学习特征图上的所有特征)会导致学生模型效果下降,推测是由于检测模型中特征数量多而且复杂,背景信息包含过多的噪声。因此,FGFI 考虑只对GT附近的anchor进行蒸馏,提出了方法 fine-grained feature limitation。首先定位这些知识密集的位置,并让学生模型在这些位置上模仿老师。
那么如何定位这些知识密集的位置呢?FGFI 通过设置掩码定位知识密集的位置,让模型只对GT附近的anchor进行蒸馏。
3、Distilling Object Detectors with Task Adaptive Regularization
文章提出了一种针对任务级自适应正则化的目标检测蒸馏方式,从三个模块对模型进行蒸馏:提取特征的backbone,用于分类的header以及用于回归的header。
1)backbone层面的蒸馏
作者使用gaussian mask提取出feature map中前景也就是目标所在的区域特征进行蒸馏。使用gaussian mask的目的是为了突出强调目标的中心区域,降低使用目标所在区域的背景引入的噪声。
具体而言,在给定目标框B后,gaussian mask的定义方式如下式所示:
2)classification层面的蒸馏
由于在二阶段检测网络中教师和学生的RPN预测出的框不同,以及分类预测中存在大量负样本,在蒸馏时会引入噪声,因此作者在classification层面提出共享学生和教师的RPN网络从而能够实现蒸馏。另一方面,作者仅利用正样本的分类知识来指导学生学习。作者认为使用RPN共享一方面可以利于蒸馏,另一方面也提高了知识的泛化性,因为教师网络对于学生提供的预测框并没有先验知识,其分类结果具有一定的泛化能力。其loss如下式所示:
3)regression层面的蒸馏
由于回归预测的无界性可能会导致教师的预测知识是错误的甚至是与groundtruth相反的,因此,作者提出基于任务的自适应蒸馏。当教师网络的预测是正确的时,将其作为知识指导学生学习,否则不蒸馏。通过计算IOU的是否叫RPN的预测有所改进来判断教师的预测正确性。
总结
目前的知识蒸馏算法大多数都应用于分类任务,很难直接应用于检测模型。原因主要有两个方面:1. 检测任务中大量的背景样本使得正负样本不均衡,导致模型的分类任务更困难;2. 目标检测的网络更加复杂,尤其对于双阶段网络而言,有许多模块组合而成。
4、Improve Object Detection with Feature-based Knowledge Distillation: Towards Accurate and Efficient Detectors(ICLR 2021)
文章提出知识蒸馏在目标检测中效果不好,主要是由两个原因造成的:
(1)前景和背景像素之间的不平衡; (2)不同像素之间的关系缺乏提取。
论文用注意引导蒸馏和非局部蒸馏来分别解决这两个问题:
1、注意力引导提取是通过注意力机制来发现前景物体的关键像素,从而使学生更加努力地学习其特征。
2、非局部提取的目的是使学生不仅能够学习单个像素的特征,而且能够学习由非局部模块捕获的不同像素之间的关系。
5、Distilling Object Detectors via Decoupled Features(CVPR 2021)
代码:https://github.com/ggjy/DeFeat.pytorch 基于mmdetection
FGFI假设背景信息包含太多的噪声,所以就剔除了背景信息。但基于解耦特征的目标检测知识蒸馏 DeFeat通过实验证明:背景区域同样包含有用的信息,能够提升student模型指标。
知识蒸馏中只使用正样本虽然可以提升模型指标,但是不使用正样本,只使用背景区域也可以达到相同指标。
与图像分类不同,目标检测器具有复杂的多损失函数,其中语义信息所依赖的特征非常复杂。 DeFeat指出一种在现有方法中经常被忽略的路径:从不包括目标的区域中提取的特征信息对于提取学生检测器也是必不可少的。同时阐明了在蒸馏过程中,不同区域的特征应具有不同的重要性。并为此提出了一种新的基于解耦特征(DeFeat)的提取算法来学习更好的学生检测器。具体来说,将处理两个层次的解耦特征来将有用信息嵌入到学生中,即来自颈部的解耦特征和来自分类头部的解耦proposal。在不同主干的探测器上进行的大量实验表明,该方法能够超越现有的目标检测蒸馏方法。
Defeat在计算loss时,把pos和neg分开独立计算loss,利用超参缓解pos/neg之间的不均衡问题。
两个阶段计算KD Loss:
1、Decoupled feature 在Teacher/Student相同尺度特征图之间计算KD Loss
2、Decoupled RoI取Teachear输出的ROI,分别送入Student/Tearcher的ROIAligned模块,获得对应的ROI Feature,Studenet/Teacher各自预测类别和位置,计算K
7、Deep Structured Instance Graph for Distilling Object Detectors (ICCV 2021) 基于detectron2
代码:https://github.com/dvlab-research/Dsig
以往的工作中针对目标检测的蒸馏存在两个问题:
(1)特征的不平衡问题(前景特征和背景特征的不平衡)
(2)缺失目标之间的一种关系
之前的一些方法,像分类上,其实都是点对点的蒸馏,因为在分类上没有instance这个概念。但在目标检测这个任务上,我们更关注的是instance这个概念,就是一些物体,这些物体之间的关系其实在我们做检测的时候是很关键的。
首先对于前景和背景应该怎么选?其实我们很巧妙的就选用了RPN网络,他们所提出的一些proposal,作为我们要检测的区域,每一个proposal其实就对应了一个点。接下来,既然它缺少了一个instance level的关系,我们就在我们图结构里面把这个关系给它形式化的model出来。我们设计了一种前景之间的关系,同时我们也设计了一些前景和背景之间的关系,因为前景和背景的目标其实是不一样的,所以我们会区别的对待前景点和背景点。这些关系就形成了我们这个图里面的一些边,而这个点的设计和边的设计共同结合在一起,就是我们最开始前面所说的知识图结构。
我们比较详细的说一下点和边的设计,首先是这个点的设计,在之前已经提到了,即使用proposal区域作为我们的点,这些区域它其实在训练过程中,它是不断的被网络所学习的,也是不断的在变化的,它代表了网络所关注的一个重点。它比起我们之前所说的那些一些人工的设计基于前景区域的一些mask,其实是要更加合适的,因为它天然的就代表了网络的一个关注点。接下来是一个边的设计,这个图里面它边的含义就是两个点之间的一个相似度,就是similarity的一个函数,怎么衡量相似度呢?其实我们非常简单的选择了一种简单又高效的余弦相似度的一个形式。最终的蒸馏就是在教师模型和学生模型的知识图之间进行的。
图蒸馏损失
图蒸馏损失LG定义为教师和学生之间结构图的差异,包含图节点损失Lv和图边损失L。我们只使用欧氏距离函数来评价这两个损失
基于网格搜索验证集,设λ1、λ3为0.5。定义λ2为背景node的自适应损失权重,以缓和不平衡问题。
图节点损失Lv是节点集之间的模拟损失(imitation loss),它基本上以像素对像素的方式将学生实例特征与教师实例特征对齐。
总结:论文中将教师模型目标检测的特征图知识转化为知识图,然后使用知识蒸馏,将知识图的特征蒸馏到学生网络中。
8、论文阅读General Instance Distillation for Object Detection CVPR 2021
以往的蒸馏检测方法对于不同的检测框架具有较弱的泛化性,并且严重依赖于GT,忽略了实例之间有价值的关系信息。提出了一种新的基于鉴别实例的检测方法,而不考虑GT的正负区别,称为通用实例蒸馏(GID),以充分利用基于特征、基于关系和基于相应的知识进行蒸馏。知识蒸馏中的知识可分为三种:反应型知识、特征型知识和关系型知识。大多数的蒸馏是针对分类问题进行的,直接将分类特定蒸馏方法迁移到检测模型中的效果较差。因为检测任务中正负实例的比例极不平衡,(抽样一定比例的正负实例、提取近GT区)。但是,仅蒸馏于GT相关的区域可能会忽略背景中潜在的信息区域。
提出的蒸馏方法主要由两部分组成:
(1)首先选择的GIs是通过ROIAlign来裁剪学生和教师主干网络中的特征。然后提取基于特征和基于关系的知识进行蒸馏。
(2)选择的GIs 首先通过GIs分配生成一个mask。然后利用基于响应的知识,蒸馏mask的分类和回归头部。
9、Localization Distillation for Object Detection (目标检测中的定位蒸馏)2021
创新点:
1、提出了用于目标检测的定位蒸馏方法,适用于任何结构的检测器。基于bbox的通用分布,我们的定位蒸馏方法可以被公式化为标准的知识蒸馏,通过标准的知识蒸馏,教师模型捕获的定位模糊可以被很好地提取到学生模型中。
2、教师模型不一定是最优的,为了保持学习的有效性,我们提出了一种教师助理策略来填补教师模型和学生模型之间可能存在的差距。
3、对教师网络使用self-LD能够进一步增强预测框的精确度文章来源:https://www.toymoban.com/news/detail-457394.html
四、产业应用前景
知识蒸馏是模型压缩、计算加速的重要方法,尤其是将深度神经网络部署到移动端、IOT等边缘设备上时。此外,知识蒸馏也有模型增强的作用,可利用其它资源(如无标签或跨模态的数据)或知识蒸馏的优化策略(如相互学习和自学习)来提高一个复杂学生模型的性能。
知识蒸馏可应用于计算机视觉、自然语言处理、语音识别、推荐系统、安全隐私问题、多模态数据、金融证券等领域。目前,知识蒸馏的算法已经广泛应用到图像语义识别,目标检测等场景中,并且针对不同的研究场景,蒸馏方法都做了部分的定制化修改,同时,在行人检测,人脸识别,姿态检测,图像域迁移,视频检测等方面,知识蒸馏也是作为一种提升模型性能和精度的重要方法。文章来源地址https://www.toymoban.com/news/detail-457394.html
到了这里,关于目标检测中的知识蒸馏方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!