CVPR2021 General Instance Distillation for Object Detection

2024-01-12 17:18

本文主要是介绍CVPR2021 General Instance Distillation for Object Detection,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

动机
  1. 知识蒸馏是一种有效的模型压缩方法。这种方法可以使轻量级的学生模型从较大的教师模型中获取有效知识。

  2. 目标附近的特征区域有相当多的信息,这对于知识蒸馏是有用的。然而,不仅目标附近的特征区域,而且即使是来自背景区域的判别块也有意义的知识。

    为了应对检测任务中前景和背景区域的不均衡,之前的蒸馏检测方法都需要精心设计正例与负例之间的比例,并且仅蒸馏与GT相关的区域可能会忽略背景中潜在的信息区域。然而,正是师生之间的信息鸿沟,引导模型选择有区别的补丁进行模仿。而且,虽然GT相关的领域几乎是信息丰富的,但极其困难和简单的实例可能是无用的,甚至来自背景的一些信息块也可以帮助学生学习教师的泛化。

  3. 之前的蒸馏检测方法忽略了实例间有价值的关系信息,都没有利用基于关系的知识进行蒸馏。然而,人们普遍认为,即使在一幅图像中,物体之间的关系也包含着大量的信息。

  4. 当前的检测蒸馏方法对不同检测框架的泛化能力较弱,不能同时在多个检测框架中很好地工作。

方法

提出了一种新的基于通用实例的蒸馏方法,即通用实例蒸馏(general instance distillation,GID),该方法不考虑区分negative和positive,可用于各种检测框架,尽可能有效地利用尽可能多的知识。本文的方法设计了一种通用实例选择模块(General Instance Selection Module,GISM),该模块利用教师模型和学生模型的预测来选择要蒸馏的关键实例。此外,为了更好地利用教师模型提供的信息,还提取并利用了基于特征,基于关系和基于响应的知识进行蒸馏。整个蒸馏网络框架主要由三个部分构成:GIs Feature Loss、GIs Relation Loss、GIs Response Loss。

GISM:首先量化教师模型预测实例和学生模型预测实例的差异,然后选择可区分的实例进行蒸馏,因此本文提出了两个指标评估两个模型预测实例的差异:GI Score 和GI Box。这两个参数都是在每个训练步骤中动态计算的。本文将分类得分的L1距离计算为GI Score,选择得分更高的框作为GI box。下图说明了生成GI(通用实例)的过程:

​ 1、教师模型和学生模型预测图片中实例的Class Score 和 Regression Box

​ 2、根据两个模型预测结果计算实例的差异:GI Score(L1距离) 和GI Box(得分高的框)

​ 3、GI Score和GI Box经过NMS反复选择具有最高GI分数的实例,然后删除与所选区域具有高度重叠的所有GI分数较低的实例。

在这里插入图片描述

提出的蒸馏方法主要由两部分组成:(1)首先选择的GIs是通过ROI对齐来裁剪学生和教师主干网络中的特征。然后提取基于特征和基于关系的知识进行蒸馏。(2)选择的GIs 首先通过GIs分配生成一个mask。然后利用基于响应的知识,蒸馏mask的分类和回归头部。如下图所示。

基于特征的蒸馏:根据GISM选择的每个GI Box的大小,从匹配的FPN层裁剪特征以进行蒸馏,并且采用ROI Align算法将提取的GI特征调整为相同大小,最后执行蒸馏,对每个目标进行同等处理。

基于相关性的蒸馏:通过GISM选择的信息丰富的通用实例(GI),能够充分利用判别实例之间的相关性,利用GI之间的相关信息来从老师到学生中提取知识。仅执行一对一的特征提炼当然不足以引入更多的知识。因此,为了挖掘GI背后的有价值的关系知识,进一步引入了基于关系的知识以进行提炼。在这里,使用欧式距离来度量实例的相关性,并使用L1距离来传递知识。

基于响应的蒸馏:知识蒸馏的性能提高主要归功于教师模型中基于响应的知识的正则化。但是,对检测头的整个输出进行蒸馏会影响学生模型的性能。这可能是由于检测任务的正负样本不平衡以及过多负样本引入的噪声导致。因此,本文基于选定的GI为分类分支和回归分支设计了 distillation mask,选定的GI首先通过GI分配生成mask。然后,将被屏蔽的分类和回归头进行提取,以利用基于响应的知识。
在这里插入图片描述

实验细节

为了验证该方法的有效性和鲁棒性,在不同的检测框架的主干网络上进行了实验,并用COCO和Pascal的VOC数据集进行了少量类的检测。对于Pascal VOC数据集,选择了从VOC 2007中拆分出来的5K trainval图像和从VOC 2012中拆分出来的16K trainval图像进行训练,并选择了VOC 2007中拆分出来的5K测试图像进行测试。而对于COCO,选择从默认的训练集中拆分出来的120K训练图像进行训练和从默认的测试集中拆分出来的5K验证图像进行测试。用平均精度(AP)评价了所有的蒸馏性能。

通过对每一个参数的初始损失进行诊断,并确保所有的损失都保持在同一范围内。对所有的参数都采用了超参数{K = 10, λ1 = 5 ×10−4, λ2 = 40, λ3 = 1, α = 0.1, β = 1}。除非指定情况,对于蒸馏过程,使用2X learning schedule,在COCO数据集上训练24个epochs(180000次迭代),在VOC数据集上训练17.4个epochs(18000次迭代)。

在MSCOCO和PASCAL VOC数据集上验证了本文提出的方法的有效性,包括一阶段、两阶段和anchor-free方法,实现了最先进的性能。大量的实验结果表明,学生模型在各种检测框架下都取得了显著的AP改进,甚至优于教师模型。具体来说,在COCO数据集上,ResNet-50的RetinaNet在mAP和GID中达到39.1%,比基线的36.2%高出2.9%,甚至比ResNet-101的教师模型(AP为38.1%)要好。

结论

1、定义通用实例(general instance,GI)作为蒸馏目标,可以有效提高检测模型的蒸馏效果。

2、在GI的基础上,首先引入基于关系的知识对检测任务进行提炼,并将其与基于响应和基于特征的知识相结合,使学生超越教师。

3、新方法对各种检测框架具有强大的泛化能力。基于学生和教师模型的输出计算GIS,而不依赖于特定检测器的某些模块或特定检测框架的某些关键特性,如anchor。

这篇关于CVPR2021 General Instance Distillation for Object Detection的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/598594

相关文章

深入探讨Java 中的 Object 类详解(一切类的根基)

《深入探讨Java中的Object类详解(一切类的根基)》本文详细介绍了Java中的Object类,作为所有类的根类,其重要性不言而喻,文章涵盖了Object类的主要方法,如toString()... 目录1. Object 类的基本概念1.1 Object 类的定义2. Object 类的主要方法3. O

【Python报错已解决】AttributeError: ‘list‘ object has no attribute ‘text‘

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一:检查属性名2.2 步骤二:访问列表元素的属性 三、其他解决方法四、总结 前言 在Python编程中,属性错误(At

OpenStack实例操作选项解释:启动和停止instance实例

关于启动和停止OpenStack实例 如果你想要启动和停止OpenStack实例时,有四种方法可以考虑。 管理员可以暂停、挂起、搁置、停止OpenStack 的计算实例。但是这些方法之间有什么不同之处? 目录 关于启动和停止OpenStack实例1.暂停和取消暂停实例2.挂起和恢复实例3.搁置(废弃)实例和取消废弃实例4.停止(删除)实例 1.暂停和取消暂停实例

时间序列|change point detection

change point detection 被称为变点检测,其基本定义是在一个序列或过程中,当某个统计特性(分布类型、分布参数)在某时间点受系统性因素而非偶然因素影响发生变化,我们就称该时间点为变点。变点识别即利用统计量或统计方法或机器学习方法将该变点位置估计出来。 Change Point Detection的类型 online 指连续观察某一随机过程,监测到变点时停止检验,不运用到

神经网络训练不起来怎么办(零)| General Guidance

摘要:模型性能不理想时,如何判断 Model Bias, Optimization, Overfitting 等问题,并以此着手优化模型。在这个分析过程中,我们可以对Function Set,模型弹性有直观的理解。关键词:模型性能,Model Bias, Optimization, Overfitting。 零,领域背景 如果我们的模型表现较差,那么我们往往需要根据 Training l

error while loading shared libraries: libnuma.so.1: cannot open shared object file:

腾讯云CentOS,安装Mysql时: 1.yum remove libnuma.so.1 2.yum install numactl.x86_64

java基础总结12-面向对象8(Object类)

1 Object类介绍 Object类在JAVA里面是一个比较特殊的类,JAVA只支持单继承,子类只能从一个父类来继承,如果父类又是从另外一个父类继承过来,那他也只能有一个父类,父类再有父类,那也只能有一个,JAVA为了组织这个类组织得比较方便,它提供了一个最根上的类,相当于所有的类都是从这个类继承,这个类就叫Object。所以Object类是所有JAVA类的根基类,是所有JAVA类的老祖宗

MACS bdgdiff: Differential peak detection based on paired four bedGraph files.

参考原文地址:[http://manpages.ubuntu.com/manpages/xenial/man1/macs2_bdgdiff.1.html](http://manpages.ubuntu.com/manpages/xenial/man1/macs2_bdgdiff.1.html) 文章目录 一、MACS bdgdiff 简介DESCRIPTION 二、用法

王立平--Object-c

object-c通常写作objective-c或者obj-c,是根据C语言所衍生出来的语言,继承了C语言的特性,是扩充C的面向对象编程语言。它主要使用于MacOSX和GNUstep这两个使用OpenStep标准的系统,而在NeXTSTEP和OpenStep中它更是基本语言。Objective-C可以在gcc运作的系统写和编译,因为gcc含Objective-C的编译器。在MA

Error: label vector and instance matrix must be double的解决方法

在使用uci下载的数据时,建模时出现这个错误的解决方法 首先现在UCI上面下载数据 然后右键另存为就行了。这样我们就从UCI里面下载到了训练数据 在matlab 点 导入数据,数据类型要记得选第二个, 如果选择最后一个table就会出现这个问题 最后附上代码 %%之前先import wine.date IMPORTED DATA 设为Numeric Matrix (数值矩