Multi-Faceted Distillation of Base-Novel Commonality for Few-shot Object Detection

小目标检测中基于新型共性的多方面蒸馏

Abstract. Most of existing methods for few-shot object detection follow the fine-tuning paradigm, which potentially assumes that the classagnostic generalizable knowledge can be learned and transferred implicitly from base classes with abundant samples to novel classes with limited samples via such a two-stage training strategy. However, it is not necessarily true since the object detector can hardly distinguish between class-agnostic knowledge and class-specific knowledge automatically without explicit modeling. In this work we propose to learn three types of class-agnostic commonalities between base and novel classes explicitly: recognition-related semantic commonalities, localization-related semantic commonalities and distribution commonalities. We design a unified distillation framework based on a memory bank, which is able to perform distillation of all three types of commonalities jointly and efficiently. Extensive experiments demonstrate that our method can be readily integrated into most of existing fine-tuning based methods and consistently improve the performance by a large margin.

现有的小样本目标检测方法大多遵循微调范式,即通过这样的两阶段训练策略,潜在地假设类别无关的可泛化知识可以从具有丰富样本的基类隐式地学习和迁移到具有有限样本的新类。然而,这并不一定是正确的,因为没有显式建模,对象检测器很难自动区分类无关知识和类特定知识。在这项工作中,我们提出要明确地学习基类和新奇类之间的三类类别无关的共性:识别相关的语义共性、定位相关的语义共性和分布共性。我们设计了一个基于记忆库的统一蒸馏框架,该框架能够联合高效地蒸馏所有三种类型的共性。大量的实验表明,我们的方法可以很容易地集成到大多数现有的基于微调的方法中,并持续地提高性能。

1 introduction

传统优化方案认为,目标检测中类无关的prior能隐式的从基类到新类。但是没有显式建模的情况下,目标检测器很难自动的区分类无关知识和类特定知识(class-agnostic 和 class-specific)

本文认为,优化框架中应该学习基类和新类的多方面共性,这是类无关的,可以在不同类之间进行转移。然后对共性进行 蒸馏, 以避免新类的 稀缺性。即:

学习三种基本的共性,

1.识别相关的语义共性:如语义相近的类之间共享的相似外观特征;

2.与定位相关的语义共性:如不同类之间相似的物体形状或边界特征;

3.相似类之间共享的特征空间的分布共性:如假设高斯分布中特征的接近均值和方差。

例如图一,

 例如,一个基类为 猫的 样本, 在 定位 和 识别 两个优化特征空间中度量它和新类的语义相关性,这些学习到的共性在微调阶段被提炼,以提高目标检测器在新类上的性能。Grad-CAM + + [ 2 ]的可视化显示,学习到的识别特征侧重于局部显著区域,而定位更关注全局边界或形状特征。


3.

3.1

首先从小样本目标检测的初步研究开始,然后介绍了我们的方法,该方法提取了多方面的基本新颖的共性,以避免小样本目标检测中训练样本的稀缺性。


3.2 提取与识别相关的语义共性

直接在预学习的特征空间中计算这些相似度,而非通过教师模型预测类概率。

给定一个由区域建议网络RPN生成的来自基类的前景区域建议r,定义r到新类c 的相似度为:r的RoI特征 Vr 和 C类在预训练特征空间中的原型之前的余弦距离。

Cn是新类的集合,a>0是缩放因子,原型Uc是通过对新类C中候选集(作为内存库实现,将在第3.5节中详细说明)的对象特征取平均得到的。

 

其中是候选集中第i个对象的向量特征,nc是该集合的大小。由于我们专注于提取base-novel共性以避免novel类中训练样本的稀缺性,因此忽略了base-base共性来分配所有模型容量给base-novel共性。因此,区域提议r从一个基类到其他基类的相似度被定义为一个很小的常数值: 

其中Cb表示基类的集合,α是与方程1中相同的缩放因子。注意,我们还根据公式1计算r和它的GT类之间的余弦相似度,以保证预测的准确性。最后我们通过一个softmax函数将样本r与所有类的相似度进行归一化:

假设一个前景候选区域r与背景有0个公共点,我们得到r的完全相似度分布:

类似于经典的知识蒸馏,我们利用区域提案的相似性作为软标签来监督我们的目标检测器的学习。特别地,我们在探测器的微调阶段进行这样的蒸馏。从形式上讲,对于来自基类的区域建议r,我们最小化对象检测器的软标签和预测类概率之间的库尔贝克-莱布勒( KL )散度:

 

 理论基础:我们通过在预定义的特征空间中度量基类样本到每个新类样本的相似度来学习与物体识别相关的语义共性。然后将学习到的共性(归一化后)视为软标签,以监督对象检测器的微调。因此,可以利用与新类共享识别相关语义的基类中的所有样本来训练这个新类上的对象检测器。从这个意义上说,提出的公共蒸馏显著地增加了新类的训练数据,从而提高了对象检测器在新类上的性能。


3.3 蒸馏与 定位相关的语义共性

除了与识别相关的语义共性,相似类别还共享与物体定位相关的语义共性,如相似的形状或边界特征。提取相似基类和新类之间的这种共性,可以使目标检测器从丰富的基类样本中学习可迁移的定位知识,从而提高其在新类上的目标检测性能。

类似3.2, 通过测量基类中的样本与预学习的特征空间Floc中的每个新类的相似性来学习与本地化相关的共性。两种不同类型的共性(识别或定位相关)的蒸馏之间的关键区别之一是它们在不同的预学习特征空间中学习每个特征空间都应该通过优化相应的任务(对象分类或定位)来学习,如图1所示。我们在第3.5节中给出了一个有效的实现。

学习到的与 localization-related 的共性以相同的形式表示为规范化的相似性,如公式4所示。与将与识别相关的共性视为用于监督的软标签不同,localization相关的共性被用作归一化权重,以聚合所有特定于类的边界框回归器以进行object localization。这是基于这样的直觉,即object 不仅可以通过其Groundtruth类的边界框回归器进行本地化,还可以通过相似类的回归器进行localization,更多的相似会导致更多的confidence。在形式上,给定一个来自基类的region proposal r,通过聚合C类的所有回归器的预测,其边界框被预测为偏移t = ( tx , ty , tw , th)到groundtruth 。然后利用平滑的L1损失 最小化 aggregated prediction与GT之间的误差来优化检测器:

其中是表示与localization-related的共性的标准化相似度。是r的bounding-box regression groundtruth,而是c类的box regressor的预测。

理论基础:在预学习的特征空间中,从基类到每个新类的样本之间的相似性被学习为与localization-related的共性,并进一步用作聚合权重来融合所有类的回归器。具体来说,来自基类的样本(对象)通过引用与此样本共享与 localization-related 的共性的新类的所有回归器的预测来 localized。这相当于用样本训练这些 regressors。因此,新类的所有回归器都得到了优化,增加了大量来自基类的训练样本,从而获得了更好的定位性能。


 3.4 蒸馏 分布 共性

语义相似的类别通常遵循相似的数据分布,例如这些类别之间的特征在假定的高斯分布中具有相近的均值和方差。因此,我们旨在提炼的基本类和新类之间的第三类共性是分布共性。受小样本图像分类中分布校准的启发,我们从基类中提取分布统计量来校准那些相似的新类的分布。因此,我们可以为这些 novel 类采样足够的示例,以提高对象检测器在 novel 类上的性能。

 与将基类的均值和方差转移到新类的分布校准不同,我们只提取基类的方差,同时保留新类的均值。这是因为转移基类的均值和方差会导致基类和新类之间的分布重叠,从而在目标检测时更难区分它们。相比之下,在小样本分类设置中不需要基类和新类之间的分类。

假设每个特征维度都服从高斯分布,这与分布校准一致,我们首先在预学习的特征空间中计算基类和新类每个特征维度的均值和方差,并根据与 均值(等价于式( 2 )中的类原型) 的欧氏距离为每个新类选择语义最接近的前k个基类。然后,我们可以使用一个新类在其top - k个最近的基类上的平均方差来近似它的方差。形式上,一个新类别c的校准方差估计为:

式中,为base类 i 的方差,Sc为与novel类c最接近的前k个基类的集合。这样我们就可以在这个预学习的特征空间中,按照得到的高斯分布对新类别c进行更多的样本采样:

 

其中是novel类c的均值. Sc是采样特征的集合,进一步利用CrossEntropy损失训练目标检测器的分类器: 

 

 3.5 Unified Distillation Framework Based on Memory Bank

  统一的蒸馏框架,在fine-tuning 阶段 端到端的形式 联合蒸馏这三种特性。

recognition相关的共性和localization相关的共性都是通过计算base类样本在其对应的(但不同的)预学习特征空间中与每个 novel 类样本的相似度得到的。这种预学习的特征空间通常独立于用于学习检测器的特征空间,通过基于其他数据或其他网络对特征空间进行预学习来实现(?)。这样做可以实现两个不同特征空间之间的知识蒸馏。然而,这种实现有两个局限性:1 )在预学习的特征空间中计算的公共性可能不准确,因为对基类和新类样本提取的特征可能没有优化;2 )整个训练分两个阶段进行,效率不高。

我们的方法框架。( a )将RoI特征解耦为两个独立的特征空间,分别用于分类和边界框回归。在微调阶段,在中学习与识别和分布相关的共性,而在中学习与定位相关的共性。所有三种类型的共性都是在基于内存库的统一框架中提炼出来的。( b )将recognition-related共性作为软标签对分类器进行监督,提取localization-related共性作为聚合权重对所有回归器进行融合。( c )参考最接近的前k个基类提取新类的方差,并从校准后的分布中采样样本训练分类器。


我们提出在与学习检测器相同的特征空间中学习共性。如图2所示,基于当前任务的训练数据,通过典型特征学习backbone和RoI特征提取器 只学习一个特征空间。然后通过两个projection heads将特征空间解耦为两个独立的特征空间:一个(记为)连接到分类头,用于学习识别相关的共性;另一个(记为)连接到回归头,用于学习定位相关的共性。每个投影头由全连接层和ReLU层组成。我们首先基于base类样本对检测器进行预训练。然后在微调阶段,我们学习每一类共性,并在相应的特征空间中共同进行共性蒸馏。注意,分布共性也是在特征空间中学习的,因为分布共性直观上与识别相关的语义更相关。

共性蒸馏。在检测器的微调过程中,特征空间一直在演化。因此所有类型的共性也随着特征空间的更新而不断演化。同时,共性蒸馏从两个方面进行。首先,基于特征空间的前一次训练状态学习到的共性在下一次迭代(状态)中进一步用于优化特征空间。在这个意义上,共性在同一特征空间中的不同训练状态之间进行蒸馏,类似于自知识蒸馏。其次,与识别相关的共性和分布共性也从特征空间提取到分类头,而与定位相关的共性从提取到定位头,从而得到更精确的分类器和回归器。

内存库。在检测器的微调过程中,共性随着特征空间的更新而不断演化。然而,使用训练集中的所有可用样本从零开始计算每个类的原型(包括基类和新类),这涉及到学习所有三种类型的共性,由于对所有样本进行特征提取,因此计算开销很大。为了解决这个问题,我们维护一个动态内存库,为每个类存储最多L个RoI特征的(在中),以提高效率。将内存库表示为,其中C为类号,每个类的RoI特征以队列的形式存储。在每次训练迭代过程中,我们通过将当前批次的样本排队到相应的类队列,并为相同的类去排队相同数量的最旧样本来更新内存库。然后我们可以使用存储在M中的RoI特征计算每个类的原型。因此,每次更新特征空间时,我们不需要从头开始提取所有样本的特征,从而显著提高了运行效率。在无监督学习中,使用内存库提高效率已经被探索过。

 参数学习。在使用基类样本的预训练阶段,我们使用标准的Faster R- CNN 损失训练目标检测器:

其中是RPN区分前景和背景的损失,是用于分类的交叉熵损失,是用于边界框回归的平滑L1损失。在微调阶段,模型以端到端的方式同时监督Faster R - CNN损失和三类共性蒸馏损失: 

 

其中是平衡损失的超参数。 


总结:

总结不了,简单翻译过来,看了看都是啥意思,难。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是在 Eclipse 2018.03 上配置 Tomcat 的步骤: 1. 下载 Tomcat 并解压缩到合适的位置。 2. 打开 Eclipse 并在工作区中创建一个新的动态 Web 项目。 3. 在项目中创建一个名为“WebContent”的文件夹。 4. 右键单击项目并选择“Properties”。 5. 在“Properties”对话框中,选择“Targeted Runtimes”选项卡。 6. 单击“New”按钮并选择“Apache Tomcat v7.0”(或其他版本)。 7. 单击“Next”按钮。在“Tomcat Installation Directory”字段中输入 Tomcat 的安装路径。 8. 单击“Finish”按钮。 9. 右键单击项目并选择“Properties”。 10. 在“Properties”对话框中,选择“Project Facets”选项卡。 11. 单击“Convert to faceted form”链接。 12. 选择“Dynamic Web Module”复选框并选择适当的版本。 13. 单击“Further configuration available”链接。 14. 在“Content directory”字段中输入“WebContent”。 15. 单击“OK”按钮并再次单击“OK”按钮以关闭“Properties”对话框。 16. 在“Servers”视图中,单击“New Server”按钮。 17. 选择“Apache”文件夹并选择“Tomcat v7.0 Server”(或其他版本)。 18. 单击“Next”按钮并选择“Browse”按钮。 19. 选择 Tomcat 的安装路径并单击“OK”按钮。 20. 单击“Finish”按钮。 21. 在“Servers”视图中,右键单击新创建的 Tomcat 服务器并选择“Add and Remove”。 22. 选择您的项目并单击“Add”按钮。 23. 单击“Finish”按钮。 24. 启动 Tomcat 服务器并运行您的应用程序。 以上是配置 Tomcat 的基本步骤。如果您遇到任何问题,请参考 Eclipse 和 Tomcat 的文档或在相关的社区中寻求帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tecypus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值