目标检测中的知识蒸馏方法

这篇具有很好参考价值的文章主要介绍了目标检测中的知识蒸馏方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目标检测中的知识蒸馏方法

知识蒸馏 (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能够进一步增强预测框的精确度

四、产业应用前景

知识蒸馏是模型压缩、计算加速的重要方法,尤其是将深度神经网络部署到移动端、IOT等边缘设备上时。此外,知识蒸馏也有模型增强的作用,可利用其它资源(如无标签或跨模态的数据)或知识蒸馏的优化策略(如相互学习和自学习)来提高一个复杂学生模型的性能。
知识蒸馏可应用于计算机视觉、自然语言处理、语音识别、推荐系统、安全隐私问题、多模态数据、金融证券等领域。目前,知识蒸馏的算法已经广泛应用到图像语义识别,目标检测等场景中,并且针对不同的研究场景,蒸馏方法都做了部分的定制化修改,同时,在行人检测,人脸识别,姿态检测,图像域迁移,视频检测等方面,知识蒸馏也是作为一种提升模型性能和精度的重要方法。文章来源地址https://www.toymoban.com/news/detail-457394.html

到了这里,关于目标检测中的知识蒸馏方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 神经网络中的知识蒸馏

    多分类交叉熵损失函数:每个样本的标签已经给出,模型给出在三种动物上的预测概率。将全部样本都被正确预测的概率求得为0.7 0.5 0.1,也称为似然概率。优化的目标就是希望似然概率最大化。如果样本很多,概率不断连乘,就会造成概率越来越小。对其取对数,使其最大

    2024年02月07日
    浏览(52)
  • TextBrewer:融合并改进了NLP和CV中的多种知识蒸馏技术、提供便捷快速的知识蒸馏框架、提升模型的推理速度,减少内存占用

    TextBrewer 是一个基于PyTorch的、为实现NLP中的 知识蒸馏 任务而设计的工具包, 融合并改进了NLP和CV中的多种知识蒸馏技术,提供便捷快速的知识蒸馏框架,用于以较低的性能损失压缩神经网络模型的大小,提升模型的推理速度,减少内存占用。 TextBrewer 为NLP中的知识蒸馏任务

    2024年02月13日
    浏览(43)
  • 任意模型都能蒸馏,异构模型的知识蒸馏方法OFAKD已在昇思MindSpore开源

    自知识蒸馏方法在2014年被首次提出以来,其开始广泛被应用于模型压缩领域。在更强大教师模型辅助监督信息的帮助下,学生模型往往能够实现比直接训练更高的精度。然而,现有的知识蒸馏相关研究只考虑了同架构模型的蒸馏方法,而忽略了教师模型与学生模型异构的情形

    2024年02月22日
    浏览(40)
  • 【计算机视觉 | 目标检测】术语理解9:AIGC的理解,对比学习,解码器,Mask解码器,耦合蒸馏,半耦合,图像编码器和组合解码器的耦合优化

    AIGC指的是使用人工智能技术自动生成的各类数字内容,包括文本、图像、音频、视频等。它利用机器学习模型进行智能化内容生成。 主要的技术手段包括: 自然语言生成(NLG):使用RNN、GPT等语言模型生成文本。 生成对抗网络(GAN):使用GAN生成高质量图片。 自动语音合成(TTS):使用

    2024年02月04日
    浏览(70)
  • 目标检测扩(六)一篇文章彻底搞懂目标检测算法中的评估指标计算方法(IoU(交并比)、Precision(精确度)、Recall(召回率)、AP(平均正确率)、mAP(平均类别AP) )

    ​ 基本在目标检测算法中会碰到一些评估指标、常见的指标参数有:IoU(交并比)、Precision(精确度)、Recall(召回率)、AP(平均正确率)、mAP(平均类别AP)等。这些评估指标是在评估阶段评价训练的网络好坏的重要依据。 计算方法 IoU: 用来评价目标检测算法的对象定

    2024年04月13日
    浏览(49)
  • 第1篇 目标检测概述 —(1)目标检测基础知识

    前言: Hello大家好,我是小哥谈。 目标检测是计算机视觉领域中的一项任务,旨在自动识别和定位图像或视频中的特定目标,目标可以是人、车辆、动物、物体等。目标检测的目标是从输入图像中确定目标的位置,并使用边界框将其标记出来。🎉为了让大家能够牢固地掌握

    2024年02月07日
    浏览(60)
  • 【目标检测】-入门知识

    回归问题 是指给定输入变量(特征)和一个连续的输出变量(标签),建立一个函数来预测输出变量的值。换句话说,回归问题的目标是预测一个连续的输出值,例如预测房价、股票价格、销售额等。回归问题通常使用回归分析技术,例如线性回归、多项式回归、决策树回归

    2024年04月15日
    浏览(36)
  • 目标检测理论知识

    目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。

    2024年02月06日
    浏览(32)
  • 目标检测(1)—— 基础知识和常用数据集

    一张图片,经过网络后得到输出,检测出感兴趣目标的一个位置,比如下图的车在什么地方,狗在什么地方;还要输出相应位置的目标是什么类别的。 目标检测:位置+类别 矩形框:位置 矩形框:类别 eg:人脸检测 把人脸作为目标,就把人脸框起来。 eg:文字检测 把文字

    2024年02月08日
    浏览(40)
  • YOLOv5基础知识入门(3)— 目标检测相关知识点

      前言 : Hello大家好,我是小哥谈。 YOLO算法发展历程和YOLOv5核心基础知识学习完成之后,接下来我们就需要学习目标检测相关知识了。为了让大家后面可以顺利地用YOLOv5进行目标检测实战,本节课就带领大家学习一下目标检测的基础知识点,希望大家学习之后有所收获!

    2024年02月13日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包