论文阅读5——CORA:采用CLIP进行开放式词汇检测,结合区域提示和锚点预匹配

论文原文地址:CVPR 2023 Open Access Repository

开源代码:https://github.com/tgxs002/CORA

目录

论文翻译

摘要:

1 介绍

2 相关工作

3 方法

3.1 总述

3.2 区域提升

3.3 锚点预匹配

4 实验

4.1 数据集&训练&评估

4.2 实施细节

4.3 与最先进方法的比较

4.4. 区域激励的有效性

4.5. 锚预匹配的有效性

5 结论


论文翻译

CORA: Adapting CLIP for Open-Vocabulary Detection with
Region Prompting and Anchor Pre-Matching

摘要:

开放词汇检测(OVD)是一种对象检测任务,旨在从检测器训练的基本类别之外的新类别中检测对象。最近的OVD方法依赖于大规模视觉语言预训练模型,如CLIP,来识别新对象。我们确定了将这些模型纳入探测器训练时需要解决的两个核心障碍:(1)将在整个图像上训练的VL模型应用于区域识别任务时发生的分布失配;(2) 对看不见的类的对象进行本地化的困难。为了克服这些障碍,我们提出了CORA,这是一种DETR风格的框架,通过区域提示和锚点预匹配将CLIP应用于开放词汇检测。区域提示通过提示基于CLIP的区域分类器的区域特征来缓解整体到区域的分布差距。锚点预匹配通过类感知匹配机制帮助学习可泛化的对象定位。我们在COCO OVD基准上评估CORA,在新类上达到41.7 AP50,即使不使用额外的训练数据,也比之前的SOTA高出2.4 AP50。当有额外的训练数据可用时,我们在地面真值基础类别注释和CORA计算的额外伪边界框标签上训练CORA+。CORA+在COCO OVD基准测试中达到43.1 AP50,在LVIS OVD基准上达到28.1 box APr。该代码可在以下网址获得https://github.com/tgxs002/CORA。

1 介绍

目标检测是一个基本的视觉问题,涉及从图像中定位和分类目标。经典的对象检测需要从一组封闭的类别中检测对象。如果需要检测不可见类别的对象,则需要额外的注释和训练。它在检测新类别而无需繁琐的注释方面引起了广泛关注,甚至可以从新类别中检测对象,这目前被称为开放词汇检测(OVD)[36]。

大规模视觉语言预训练模型的最新进展,如CLIP[30],为解决OVD提供了新的解决方案。CLIP从大规模图像文本数据集中学习图像和文本的联合嵌入空间,在视觉识别任务中表现出显著的能力。将CLIP应用于OVD的总体思路是将其视为一个开放的词汇分类器。然而,有两个障碍阻碍了CLIP在解决OVD问题上的有效使用。

如何使CLIP适应地区级任务?一个简单的解决方案是裁剪区域并将其视为单独的图像,这已被最近的多部作品采用[7,14,31,35]。但是,区域作物和完整图像之间的分布差距导致分类精度较低。MEDet[7]通过用图像特征增强文本特征来缓解这个问题。然而,它需要额外的图像文本对来防止过度拟合训练过程中看到的所谓“基础”类。RegionCLIP[40]直接通过RoIAlign[17]获取区域特征,这种方法更有效,但如果不进行微调,就无法很好地推广到新的类别。采用更大的CLIP模型时,微调成本很高。

如何学习可概括的对象建议?ViLD[14]、OV-DETR[35]、以对象为中心的OVD[31]、RegionCLIP[40]需要RPN或类无关对象检测器[29]来挖掘潜在的新类对象。然而,这些RPN强烈偏向于它们所训练的基类,而在新类上表现不佳。MEDet[7]和VL-PLM[39]发现了这个问题,并采用了几种手工制定的策略来排除或合并低质量的盒子,但性能仍然受到冻结的RPN的限制。OV-DETR[35]通过对类名嵌入进行条件化框回归来学习可泛化的对象定位,但代价是重复的每类推理带来的效率问题。

在这项工作中,我们提出了一种基于DEtection TRansformers(DETR)的新框架[6],该框架将CLIP纳入检测器训练中,以实现开放词汇检测,而无需额外的图像文本数据。具体来说,我们使用DETR风格的对象定位器进行类感知对象定位,并通过汇集CLIP图像编码器的中间特征图对预测框进行编码,这些特征图由CLIP文本编码器用类名进行分类。然而,CLIP原始视觉编码器的整个图像特征与新合并的区域特征之间存在分布差距,导致分类精度较低。因此,我们提出了区域提示来适应CLIP图像编码器,这提高了分类性能,并且比现有方法具有更好的泛化能力。我们采用DAB-DETR[26]作为定位器,其中对象查询与动态锚框相关联。通过在框回归之前将动态锚框与输入类别进行预匹配(锚预匹配),可以实现类感知回归,而不需要重复的每类推理。

我们在COCO[24]和LVIS v1.0[16]OVD基准上验证了我们的方法。在COCO OVD基准上,我们的方法在不进行额外数据训练的情况下,将新类别的AP50比之前的最佳方法[40]提高了2.4 AP50,并在不同尺度的CLIP模型上实现了一致的增益。当在具有额外训练数据的更公平的设置下进行比较时,我们的方法在新类别上显著优于现有方法3.8 AP50,并在基本类别上实现了可比的性能。在LVIS OVD基准测试中,我们的方法在/w.o.额外数据的情况下实现了22.2/28.1 APr,这明显优于也用/w.o.多余数据训练的现有方法。通过在COCO的基类上应用区域提示,新类的分类性能从63.9%提高到74.1%,而其他提示或适应方法很容易偏向基类。

这项工作的贡献总结如下:(1)我们提出的区域提示有效地缩小了整体图像特征和区域特征之间的差距,并在开放词汇环境中得到了很好的推广。(2) 锚点预匹配使DETR能够有效地进行可推广的对象定位。(3) 我们在COCO和LVIS OVD基准测试中实现了最先进的性能。

2 相关工作

开放词汇对象检测OVR-CNN[36]首次提出了这种新的检测公式,并通过将区域特征与与图像配对的字幕中的名词对齐,提出了其基线解决方案。Mingfeng[11]等人利用预训练视觉语言模型的定位能力挖掘伪标签。PromptDet[10]通过在编码类名时添加可学习的提示,即区域提示学习(RPL),解决了图像和区域分类之间的差距,预计将从基本类别推广到新类别。OV-DETR[35]是第一个DETR风格的开放词汇检测器,它提出了条件匹配来解决赋值中缺失的新类问题,但代价是推理效率低下。RegionCLIP[40]提出了第二阶段预训练机制,以调整CLIP模型来编码区域特征,并展示了其在OVD和零样本转移设置上的能力。GLIP[21]共同学习对象定位和VL对齐。Matthias等人[15]提出对VL对齐模型进行微调以进行检测,同时我们修复了预训练的VL模型,以便更好地对新类别进行泛化。

检测变换器DETR[6]是一种基于变换器的对象检测架构,它将对象检测表述为一个集到集的匹配问题,大大简化了流水线。一些工作通过架构改进[1,13,26,38]或特殊的训练策略[8,18]解决了DETR的缓慢收敛问题。Zhu等人[1]提出了多尺度可变形注意力模块,以有效地从多尺度特征图中聚合信息。Gao等人[13]提出通过锚盒坐标来调制变换器解码器中的交叉注意力,以加速检测器的收敛。DABDETR[26]将DETR架构中的查询表述为锚箱,这加速了检测器的训练。Chen等人[38]提出了Group DETR,它在训练过程中添加了辅助对象查询,以利用一对多匹配来实现更快的收敛。

Prompt Tuning Prompting起源于NLP,它是指在输入序列之前添加任务指令,为语言模型提供有关任务的提示[5]。后续的研究[22,27]探讨了在镜头数据很少的情况下调整连续提示向量。VPT[19],视觉提示[2,3]探索像素空间中的提示。[20] [25]提示预训练模型用于视频识别任务。[34]提出了类感知视觉提示调优,将学习到的提示推广到看不见的类别。最近的工作表明,快速调优是一种有效且参数高效的方法,可以使大规模预训练模型适应下游任务。

3 方法

开放词汇检测(OVD)是一种对象检测任务,旨在从检测器训练的基本类别之外的新类别中检测对象。形式上,检测器在具有基本类别框注释的检测数据集上进行训练,并在新的输入图像上进行测试,以检测属于新类别集的对象,其中。在本节中,我们将介绍CORA,这是一个通过区域提示和锚点预匹配使CLIP适应OVD任务的框架。为了与现有方法进行更公平的比较,我们还尝试了一个更广泛的环境,其中有额外的数据可用,这被称为CORA+,并将与实验一起引入。

图1:我们方法的整体架构。CLIP图像编码器将图像编码为特征图,用于定位和分类。通过汇集特征图提取区域特征,然后在通过CLIP类名嵌入进行分类之前进行提示。在解码之前,锚框是预先匹配的,并以类为条件。在培训过程中,进行了每班岗位匹配。在推理过程中,框预测由区域分类器进行分类。

3.1 总述

CORA的总体框架如图1所示。给定图像作为输入,我们使用预训练的CLIP图像编码器的ResNet骨干网获取空间特征图,该编码器由区域分类和对象定位分支共享。与传统的检测器不同,定位和分类是解耦的,并在我们的框架中顺序进行,以更好地适应OVD问题的特点。我们训练了一个DETR风格的对象定位器,该定位器对一组对象查询及其相关锚框进行细化,以定位对象,然后由改编自CLIP的区域分类器对对象进行分类。

区域分类。给定一个要分类的区域(锚框或框预测),我们采用RoIAlign来获取区域特征,然后通过CLIP的注意力池模块来生成区域嵌入,这些嵌入可以通过从CLIP文本编码器获得的类嵌入进行分类,就像在CLIP中一样。我们将此模块命名为基于CLIP的区域分类器(图1-(a))。

对象本地化。视觉特征图首先由类DETR编码器细化,然后馈送到类DETR解码器。锚框的查询首先由基于CLIP的区域分类器进行分类,然后根据其预测标签进行条件调整,然后由类似DETR的解码器迭代细化,以获得更好的定位。解码器还估计查询与先前预测的标签的可匹配性。在训练过程中,预测框与具有相同标签的地面真值框一一匹配(图1-(b)),并按照DETR进行训练。在推理阶段,基于CLIP的区域分类器调整方框的类标签。

如第1节所述,有两个障碍需要解决:(1)目标检测对图像区域进行识别,而CLIP模型在整个图像输入上进行训练,导致分布差距阻碍了分类性能。(2) 检测器需要学习新类的对象定位,而我们只对有限数量的基类进行注释。为了解决第一个障碍,我们提出了区域提示来调整区域特征,以实现更好的可推广区域嵌入,这将在第3.2节中介绍。为了解决第二个障碍,我们提出了锚预匹配,以鼓励类感知对象定位,在推理过程中可以推广到新的类,这将在第3.3节中介绍。

3.2 区域提升

OVD要求检测器将图像区域分类到给定的类别列表中。在本节中,我们将详细说明如何预训练的CLIP模型适于制定基于CLIP的区域分类器。给定CLIP模型,可以通过比较CLIP图像编码器的区域嵌入和CLIP文本编码器的类名嵌入之间的相似性来实现区域分类。

区域提示。如图2所示,给定一幅图像和一组感兴趣区域(RoI),我们首先通过CLIP编码器的前3个块将整个图像编码为特征图,然后由RoIAlign[32]根据锚框或预测框将其合并为区域特征,然后由CLIP图像编码器骨干的最后一个块进行编码。CLIP图像编码器的整个图像特征图与合并的区域特征之间存在分布差距。我们提出了区域提示,通过用可学习的提示p∈R S×S×C来增强区域特征来修复错位,其中S是区域特征的空间大小,C是区域特征。具体来说,给定输入的区域特征频率,区域提示按以下方式进行

其中,⊕表示元素相加,P是CLIP视觉编码器的注意力池模块

图2:基于CLIP的区域分类器和vanilla管道之间的比较。我们从特征图中汇集区域特征,而不是裁剪区域补丁并将其分类为单独的图像。

优化区域提示。我们在带有基类注释的检测数据集上训练区域提示。类名嵌入由CLIP文本编码器预先计算,稍后用作分类器权重。我们通过标准的交叉熵损失训练提示,用它们的混合区域特征频率对地面真值框进行分类。在优化区域提示时,我们保持其他模型权重不变,只让区域提示被学习。

与现有方法进行比较。以前使用CLIP进行区域分类的常见做法是裁剪RoI,并将其编码为单独的图像,然后再与文本嵌入进行比较。当对有重叠的区域进行编码时,这种流水线效率不高,因为重叠区域在不同的区域作物中被编码了多次。它的准确性也受到缺少上下文信息的影响。相比之下,我们的区域激励更有效,并保留了更丰富的背景。

区域提示包含的参数少于1M,这与提示调优和适配器文献的最新进展相一致。区域提示可以很好地推广到看不见的小说类。我们将泛化能力归因于这样一个事实,即区域提示在分布失配发生后(区域池化后)直接修复分布失配,而现有方法调整无关参数以补偿分布失配。

3.3 锚点预匹配

区域提示有助于解决区域分类问题。目标定位是目标检测的另一个关键子任务。考虑到预训练RPN在新类上的性能较差,我们引入了一个基于类感知查询的对象定位器,它在看不见的类上表现出更好的泛化能力。如图1所示,给定来自冻结的CLIP图像编码器的视觉特征图,CLIP文本编码器将对象查询与类名嵌入进行预匹配。

锚预匹配。对象定位器由DETR风格的变换器编码器-解码器结构实现,其中编码器细化特征图,解码器将一组对象查询解码为框预测。我们采用DAB-DETR[26],其中每个对象查询都与一个锚框相关联。每个地面真值框都预先匹配到一组具有相同标签的查询。对象查询的标签是通过对相关锚框进行分类来分配的。

其中vi是锚框bi的区域特征,lc是c类的类名嵌入,余弦表示余弦相似度。预匹配后,每个对象查询条件对预测类进行嵌入,以允许类感知框回归。条件对象查询由下式给出

类似DETR的解码器迭代地将每个对象查询及其关联的锚框细化为,其中是细化的框坐标,是与查询的预匹配类的匹配概率。

给定模型预测,通过分别对每个类执行二分匹配来进行地面真值框和模型预测之间的分配。我们只允许将每个地面真值框分配给具有相同预匹配标签的预测,以强制解码器意识到条件文本嵌入。

具体来说,对于类c,给定与类c预匹配的盒预测,以及类c中的基真值盒的集合,我们优化了Nc元素的置换,以最小化以下成本

其中匹配成本定义为

是一种二元分类损失,表征了的定位误差。在我们的情况下,我们通过焦损实现Lmatch[23]。Lbox是通过先前工作后L1损失和GIoU[37]损失的加权和来实现的。

该模型通过以下损失进行了优化

在推理过程中,我们采用第3.2节中介绍的区域分类器对预测的框进行分类,以提高分类精度。班级分数乘以预匹配分数,以考虑盒子质量

与条件匹配的比较[35]。OV-DETR[35]中的条件匹配也提出将查询条件设置在类感知回归的文本嵌入上。但它受到每类重复推理的困扰。具体来说,如图3所示,C N中的每个类都需要使用同一组查询进行单独本地化,这意味着计算和内存消耗都与词汇量呈线性关系。在训练过程中,由于内存约束,每次迭代中采样的负类数量受到限制,这阻碍了收敛。在推理过程中,需要重复的每类解码,导致推理效率低,特别是在词汇量大的情况下。

与条件匹配相反,我们的锚预匹配机制根据图像内容自适应地为不同的类分配锚框,这确保了与类别大小解耦的查询数量恒定。通过锚点预匹配,所有类都可以在一次迭代中一起解码,从而消除了重复的每类解码的需要。

为了提高配备锚预匹配的开放词汇检测器的泛化能力和训练收敛性,我们还引入了两种有效的训练技术,即“Drop Class”和“CLIPAligned Labeling”。

Class Dropout。通过在训练过程中随机丢弃类别,可以进一步提高模型的泛化能力。由于我们的目标是训练一个可以从用户指定的类别列表中检测对象的检测器,因此在固定的类别列表上进行训练会导致偏差。我们通过在训练期间随机退出基本类别来减轻这种偏见。出于效率的原因,我们通过将基类分成两个互补的组并在这两个组上进行训练来实现这一想法,而不是在一个组上训练而放弃另一个组。具体来说,在每次训练迭代中,我们以p的概率分割C B和地面真值框,并在具有两组互补类别的同一图像上训练检测器。它强制模型以查询类别为条件进行预测。由于一组中的地面真实框不会出现在另一组中,因此模型需要知道对两组注释进行不同处理的类别。

CLIP对齐标签。在原始COCO数据集上直接训练定位器存在收敛问题。通过锚预匹配机制,地面真值框仅在存在至少一个具有相同预匹配标签的查询时才包含训练。否则,它会被忽略,从而阻碍收敛。此问题可部分归因于锚箱不准确。然而,即使地面真值框具有精确的锚框,由于区域分类器的识别精度限制,它仍然可能被忽略,或者换句话说,地面真值盒标签与用于预匹配的CLIP区域分类器不对齐。因此,我们用区域分类器重新标记训练数据集中的框,我们称之为CLIP对齐标记。通过这种技术,可以匹配更多的地面真相框。

4 实验

在本节中,我们将全面评估开放词汇检测任务的CORA。第4.1节介绍了数据集和评估协议,第4.2节提供了我们方法的实现细节。我们在第4.3节中与最先进的方法进行了比较,展示了我们的CORA的优势,然后分别在第4.4节和第4.5节中验证了所提出的区域提示和锚预匹配的有效性。

4.1 数据集&训练&评估

根据[4]中提出的COCO OVD基准的约定,COCO数据集[24]中的80个类被分为48个基类和17个新类。该模型在48个基类上训练,其中包含107761个图像和665387个实例。然后,在新类的验证集上对模型进行评估,该验证集包含来自48个基类和17个新类的4836幅图像和33152个实例。我们还对LVIS v1.0[16]数据集进行了实验。在LVIS数据集上,该模型在461个常见类和405个频繁类上进行训练,其中包含100170幅图像和1264883个实例。训练后,在LVIS验证集上对模型进行评估,该验证集包含19809张图像和244707个实例。

为了与其他方法进行更公平的比较,我们提出了CORA+,它利用了额外的数据集或目标新类名。CORA+是一种经过训练的检测器,既有地面实况基类别注释,也有额外的伪边界框标签。当提供目标类名时,我们使用CORA在基础训练数据集上生成新类的伪框,当额外的图像文本数据集(文本可以是标题或类名)可用时,生成相应文本提到的所有对象的伪框。我们使用标准的检测器架构和训练目标来训练CORA+。SAMDETR[38]用于COCO实验,CenterNet2[43]用于LVIS实验。

在OVD任务中,我们在“广义”设置下评估我们的模型,其中模型需要从基础类和新类中预测对象,然后对新对象进行评估。在COCO基准测试中,我们采用AP50作为我们的评估指标,该指标计算每个类在联合交集(IoU)处50%的平均精度,然后在所有类之间求平均值。对于LVIS OVD基准测试,我们在完整的验证数据集上进行评估,并报告新类盒子的平均AP,以与先前的工作进行比较[40]。对于区域分类任务,我们让模型对COCO数据集中的地面真值框进行分类,并根据mAP对性能进行评估。

4.2 实施细节

型号规格。我们使用DAB-DETR[26]作为对象定位器。具体而言,定位器被配置为具有1000个对象查询、3个编码器层和6个解码器层。我们使用具有128个隐藏神经元的多层感知器(MLP)将类名嵌入转换为对象查询。根据CLIP[30],每个类嵌入都被计算为80个上下文提示中类名的平均文本嵌入。在辍学的情况下,每个班级都以相等的概率随机分配到两组中的一组。

在LVIS上采用区域提示时,常见组和频繁组中的类以相等的权重进行采样,这意味着不太频繁的类中的对象被过度采样。在LVIS上训练我们的方法时,我们在每次迭代中采样100个类别(包括地面真实类别)。由于LVIS数据集中的类数量远大于COCO,我们放宽了锚预匹配中的匹配约束,使得地面真值框可以与具有相似标签的锚框进行后匹配。具体来说,余弦相似度大于0.7的类被认为是相似的。

训练与超参数训练。我们以10-4的基础学习率训练5个迭代周期的区域提示,该学习率在第4个迭代周期后衰减0.1倍。定位器训练了35个迭代周期,学习率为10-4,没有学习率衰减。区域提示和定位器均由AdamW优化器[28]以批量大小32进行训练,权重衰减为10-4。我们应用最大范数为0.1的梯度剪裁。为了稳定训练,我们在训练后对模型的指数移动平均值(EMA)进行评估。班级辍学概率p设置为0.2。λ焦点、λL1和λGIoU分别设置为2.0、5.0、2.0。对于LVIS的实验,我们使用具有默认超参数的重复因子采样[16]来平衡训练样本。在推理过程中,我们使用IoU阈值为0.5的非最大抑制(NMS)。

4.3 与最先进方法的比较

表1总结了我们的主要结果。由于预训练模型对检测器的开放词汇能力至关重要,我们将我们的方法与用相同CLIP模型训练的基线方法进行了比较。与在CLIP RN50上训练的方法相比,CORA在新类上的性能比VL-PLM高出0.7 AP50。通过更大的预训练模型,我们的方法改进了之前最新的RegionCLIP 2.4AP50。当有额外数据可用时,性能可以进一步提高到43.1 AP50。LVIS[16]OVD基准测试的结果如表2所示。

表1:COCO OVD基准的主要结果。我们报告AP50作为评估指标。基线方法按其预训练模型分组。我们还列出了每种方法的额外数据集要求,以及它们是否需要在训练过程中提供新类。

表2:LVIS[16]OVD基准测试结果

请注意,在基线方法中,VL-PLM[39]、ViLD[14]和OV-DETR[35]在训练过程中使用新的类名,以识别潜在的新对象并为其分配伪标签。因此,每当有一组新的类别需要检测时,都需要训练一个新的检测器。一旦经过训练,CORA可以推广到新类别的任何组合,而无需繁琐的重新训练。其他依赖CLIP的比较方法需要在训练期间从语言描述[7,31,40]或图像标签[42]中提取图像标签注释。我们认为,额外的注释不会提供CLIP的额外信息。相反,它们充当了将知识从CLIP传递到探测器的媒介。我们的方法直接采用CLIP模型来获得区域分类器,因此不需要额外的图像文本数据。

在这项工作中,区域提示和锚预匹配都旨在将从基类中学到的知识推广到新类。因此,小说类和基础类之间的性能差距很大低于比较方法。请注意,在OVD中,性能是通过对新类的泛化能力来评估的,而不是通过训练它们的基类来评估的。

4.4. 区域激励的有效性

区域提示。由于在这项工作中对象分类与定位是解耦的,因此基于CLIP的区域分类器可以直接由区域分类任务进行评估。在COCO数据集的基类注释上训练后,我们在验证集中的基类和新类上评估了基于CLIP的区域分类器。我们使用平均精度(mAP)作为我们的评估指标。

表3显示了我们的主要结果。在不进行进一步训练的情况下,直接在CLIP模型上进行评估,在新类别上已经取得了58.2 mAP的显著性能。我们将我们的结果与适配器和快速调优文献中的两种竞争方法进行了比较。CLIPAdapter[12]采用额外的瓶颈层来学习新特征,并将残差样式特征与原始预训练特征进行混合。CoOp[41]在en7之前的文本嵌入中添加共享的可学习提示由CLIP文本编码器编码。实验表明,比较的方法强烈偏向于基类。请注意,基线方法通过调整文本输入或输出特征来适应CLIP模型,这些特征与区域特征无关或相距甚远,区域特征和整个图像特征之间会发生不匹配。相反,区域提示直接提示不匹配的特征,从而更好地推广到新类,在新类上实现了比CLIP高6.9mAP的性能增益。区域提示也会随着主干的增大而扩展。在RN50x4 CLIP主干上,区域提示使CLIP比相应的CLIP模型进一步提高了10.2%mAP。

表3。在mAP中评估的区域分类任务的结果。我们将我们的方法与原始的CLIP区域分类器和其他基线方法进行了比较。

与整体图像分类进行比较。CLIP进行区域分类的一种常见做法是裁剪区域并将其分类为单独的图像。我们将区域分类器与没有区域提示的原始CLIP权重的常见做法进行了比较。如表4所示,当将一个区域分类为整个图像时,尽管需要额外的计算,但性能明显低于使用区域特征。我们将性能差距归因于裁剪图像的上下文缺失。

表4。整个图像分类管道和区域分类管道的比较。结果以mAP报告

4.5. 锚预匹配的有效性

我们进行消融研究,以验证锚预匹配和拟议的训练技术。

锚预匹配。锚点预匹配由两个单独的操作组成:查询条件和每类后匹配。我们在表5中分析了它们的影响。首先,我们训练一个没有锚预匹配的模型。我们继续使用DAB-DETR[26]作为定位器,并使用相同数量的对象查询和锚框进行公平比较。对象查询没有预先与类匹配,并且像DAB-DETR中那样初始化为0。由于模型预测没有预先匹配,因此每类后匹配被香草一对一匹配所取代DETR中的机制。然后,我们对锚框进行分类,并将对象查询条件设置在类名嵌入上,但不对后匹配设置约束,这使新类的性能提高了3.9 AP50。采用全锚预匹配后,性能显著提高了10.8 AP50。

图4:不同的p值用于class dropout。

训练技巧。类退出和CLIP对齐标签是两种训练技术,有助于模型更好地泛化。在图4中,我们研究了不同辍学概率的影响。我们发现,用辍学率训练的模型始终优于基线,p=0.2表现最佳。在表5中,我们验证了CLIP对齐标签的有效性。

表5:锚预匹配和CLIPaligned标签的消融研究。锚点预匹配包括查询条件和每类后匹配。

5 结论

开放式词汇检测的核心挑战是如何有效地将从基类中学到的知识转移到看不见的新类中进行评估。在这项工作中,我们直接将CLIP转化为区域分类器,并通过区域提示来缩小整个图像特征和区域特征之间的分布差距,从而成功地推广到新的类别。与之前依赖固定RPN进行新类定位的工作不同,我们通过提出的锚预匹配机制实现了高效的类感知定位。实验表明,我们的方法可以更好地将知识从基类转移到看不见的新类,并且与先前的工作相比,差距更小。我们希望我们的工作可以帮助其他研究人员更好地了解OVD问题,并开发更好的开放词汇检测器。

个人学习笔记

GCN(Graph Convolutional Network)是一种基于图结构的深度学习模型,可以用于图像分类、社交网络分析等任务。在这篇文章中,我们将对GCN源码进行分析。 首先,我们需要了解GCN的基本原理。GCN是通过对图中的节点进行卷积操作来提取节点特征的。具体地,GCN的卷积操作可以定义为: $H^{(l+1)} = \sigma(\hat{D}^{-\frac{1}{2}}\hat{A}\hat{D}^{-\frac{1}{2}}H^{(l)}W^{(l)})$ 其中,$H^{(l)}$表示第$l$层节点特征矩阵,$W^{(l)}$表示第$l$层的权重矩阵,$\hat{A}$表示邻接矩阵加上自环的矩阵,$\hat{D}$表示度矩阵加上自环的矩阵,$\sigma$表示激活函数。 接下来,我们将对GCN源码进行分析。GCN的源码在GitHub上可以找到(https://github.com/tkipf/gcn)。我们将以GCN的Cora数据集为例进行分析。 首先,我们需要加载Cora数据集。GCN的数据集格式是一个包含特征矩阵、邻接矩阵和标签的对象。在GCN的源码中,我们可以看到以下代码: features = sp.identity(features.shape[0]) # featureless if not sparse: features = np.array(features.todense()) adj = adj + sp.eye(adj.shape[0]) degree = np.array(adj.sum(1)) d_inv_sqrt = np.power(degree, -0.5).flatten() d_inv_sqrt[np.isinf(d_inv_sqrt)] = 0. d_mat_inv_sqrt = sp.diags(d_inv_sqrt) adj = d_mat_inv_sqrt.dot(adj).dot(d_mat_inv_sqrt).tocoo() features = preprocess_features(features) 在这段代码中,我们首先将特征矩阵转化为稀疏矩阵的形式,然后加上自环,计算度矩阵和度矩阵的逆平方根,最后对邻接矩阵进行归一化处理。这些处理都是为了满足GCN的卷积操作。 接下来,我们来看GCN的具体实现。在GCN的源码中,我们可以看到以下代码: class GraphConvolution(nn.Module): def __init__(self, in_features, out_features, bias=True): super(GraphConvolution, self).__init__() self.in_features = in_features self.out_features = out_features self.weight = nn.Parameter(torch.FloatTensor(in_features, out_features)) if bias: self.bias = nn.Parameter(torch.FloatTensor(out_features)) else: self.register_parameter('bias', None) self.reset_parameters() def reset_parameters(self): stdv = 1. / math.sqrt(self.weight.size(1)) self.weight.data.uniform_(-stdv, stdv) if self.bias is not None: self.bias.data.uniform_(-stdv, stdv) def forward(self, input, adj): support = torch.mm(input, self.weight) output = torch.spmm(adj, support) if self.bias is not None: return output + self.bias else: return output 在这段代码中,我们定义了GraphConvolution类,它是GCN的基本单元。在初始化函数中,我们定义了权重矩阵和偏置,然后通过reset_parameters()函数对它们进行初始化。在正向传播函数中,我们首先对输入特征矩阵和权重矩阵进行矩阵乘法,然后对结果进行邻接矩阵的稀疏矩阵乘法,最后加上偏置(如果有)并返回输出。 最后,我们需要定义完整的GCN模型。在GCN的源码中,我们可以看到以下代码: class GCN(nn.Module): def __init__(self, nfeat, nhid, nclass, dropout): super(GCN, self).__init__() self.gc1 = GraphConvolution(nfeat, nhid) self.gc2 = GraphConvolution(nhid, nclass) self.dropout = dropout def forward(self, x, adj): x = F.relu(self.gc1(x, adj)) x = F.dropout(x, self.dropout, training=self.training) x = self.gc2(x, adj) return F.log_softmax(x, dim=1) 在这段代码中,我们定义了GCN类,它包含两个GraphConvolution层和一个dropout层。在正向传播函数中,我们首先对输入特征矩阵和邻接矩阵进行第一层卷积操作,然后对结果进行ReLU激活和dropout操作,最后再进行第二层卷积操作并返回输出。注意,GCN的输出需要进行log_softmax操作以得到测结果。 以上就是对GCN源码的分析。希望这篇文章能够对理解GCN有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值