开放词汇目标检测系列论文(1)--ViLD

开放词汇目标检测系列论文(1)--ViLD 1、论文简介该论文题目是“Open-vocabulary object detection via vision and language knowledge distillation”发表于ICLR 2022发表单位是谷歌和英伟达。论文主要是基于知识蒸馏的方式将CLIP大模型的视觉和文本特征蒸馏至Mask R-CNN方法中。这篇博客我们将用大白话的方式去讲明白作者的核心思想对于一些实验细节和方法细节还请大家去看原文。2、论文动机2.1 之前的深度学习目标检测目标检测是视觉里面的一个非常重要的task出现了RCNNFast RCNNDETR等为代表的一系列方法。这些方法有个共同点就是只能检测训练数据集中出现的类别。如果想检测的类别没有出现在训练数据集中则会失败。随着视觉-文本大模型的出现学者们就在想能不能用这些大模型的通用知识使得目标检测也能够具备很强的通用性可以检测一些没有被训练的类别。这个就是我们这边论文想做的开放词汇目标检测。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 embedding2对于闭集内所有的类别提取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 embeddings2同样的区域用CLIP 提取 CLIP image embeddings3直接用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的生成过程中也是一个可以改进提升的地方。