开放词汇目标检测系列论文(1)--ViLD
2026/6/2 10:16:42 网站建设 项目流程
1、论文简介

该论文题目是“Open-vocabulary object detection via vision and language knowledge distillation”,发表于ICLR 2022,发表单位是谷歌和英伟达。论文主要是基于知识蒸馏的方式,将CLIP大模型的视觉和文本特征,蒸馏至Mask R-CNN方法中。

这篇博客,我们将用大白话的方式,去讲明白作者的核心思想,对于一些实验细节和方法细节,还请大家去看原文。

2、论文动机
2.1 之前的深度学习目标检测

目标检测是视觉里面的一个非常重要的task,出现了RCNN,Fast RCNN,DETR等为代表的一系列方法。这些方法有个共同点,就是只能检测训练数据集中出现的类别。如果想检测的类别,没有出现在训练数据集中,则会失败。

随着视觉-文本大模型的出现,学者们就在想,能不能用这些大模型的通用知识,使得目标检测也能够具备很强的通用性,可以检测一些没有被训练的类别。这个就是我们这边论文想做的开放词汇目标检测。

2.2 常规Open-vocabulary object detection方法

最为简单的方法,则是我先用一个检测器获得很多的proposal。然后,对于每个proposal,采用CLIP视觉网络去编码特征。然后,在对于输入的text,也采用CLIP去编码特征。将视觉特征和文本特征进行匹配,如果匹配上了,则认为这个proposal是这个分类。

这种思路非常的简单,也很好理解。但是存在几大问题:

第一:计算量大,对于每个proposal,我都要用一个很大的CLIP去提取视觉特征,速度必然很慢;

第二:整个过程不是端到端的,CLIP和前面的proposal提取网络在梯度上是断开的;

第三:proposal由于是在闭集数据集上训练的,在检测的时候,容易漏掉没有见过的目标。

作者为了解决速度问题,提出将CLIP的通用特征编码能力蒸馏到目标检测网络中。这也是这篇论文的核心motivation。

3、论文做法

为了做蒸馏,论文提出了蒸馏方式,分别是ViLD-text和ViLD-image。

论文首先修改了Mask R-CNN,让该网络不在去预测类别,而是专注于提取proposal(不管类别)。作者的目的是为了提高proposal的覆盖率,能够检测出所有的目标。但个人觉得,仅仅这样做,很难完全实现目标。也就是说,解决不了论文动机中介绍的第三个问题,只能从一定程度上缓解。

3.1 ViLD-text

在得到所有的proposal之后,并得到proposal的embeddings。ViLD-text的蒸馏目的,让proposal embeddings 尽可能地接近该proposal类别的CLIP text 特征。大家可以想象,如果每个proposal的embedding 都和CLIP提取的对应类别的文本特征接近,相当于网络已经具备了一定的通用性,网络学习的是proposal embedding和text embedding之间的相似性,而不是一个具体的分类。

具体做法:

1)对于每个proposal,提取 proposal embedding;

2)对于闭集内所有的类别,提取CLIP 的text文本特征;计算proposal embedding和所有文本特征间的相似性。这里,值得注意的是,作者加了一个background的文本特征,其实就是指向不存在于闭集中的文本特征。

3)对于上述特征,求一个softmax,对应的最大的文本特征的概率,然后和真值做交叉熵损失。

上述步骤直接对应论文中的公式(2)

大家想想,为什么这样做之后,CLIP 的text编码能力就蒸馏到了proposal网络中呢?

原因是:为了让loss最小,那么proposal embedding必然要和真值的CLIP 的text embedding一致;一旦一致了,这个CLIP的能力不就蒸馏过去了嘛。

3.2 ViLD-image

在ViLD-text中,是希望proposal embedding 和 CLIP text embedding保持一致。在ViLD-image中,就更加直接,是希望 proposal embedding和CLIP image embedding保持一致。具体步骤如下:

1)提取proposal embeddings;

2)同样的区域,用CLIP 提取 CLIP image embeddings;

3)直接用L1 loss约束两个embeddings一致。

3.3 两者结合

从3.1 和3.2中,可以得知,ViLD-text和ViLD-image都是为了约束proposal embeddings,如果直接一起训练,可能会互相干扰。因此,作者直接分了两个head,分别提取两个proposal embeddings,然后对每个embedding分别采用ViLD text和ViLD imag进行训练蒸馏。

在推理的时候,分别用两个head的proposal embeddings去做分类,得到分数。然后用一个类似于加权的方式去得到最终的分数。

4、实验部分

请读者自行看论文,这里不做过多讲解。

5、总结(个人理解)

这篇论文的思想非常好,解决了传统思路速度慢的问题,但依旧解决不了proposal网络漏检测而引起的错误。个人觉得是可以改进提升的地方。

此外,该论文的方法只对最后的proposal embedding做约束,没有将大模型充分利用到proposal的生成过程中,也是一个可以改进提升的地方。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询