CLIP:Contrastive Language-Image Pre-training
论文名称:Learning Transferable Visual Models From Natural Language Supervision
原论文地址:https://arxiv.org/abs/2103.00020
开源预训练模型:https://github.com/OpenAI/CLIP
GLIP论文名称:Grounded Language-Image Pre-training
原论文地址: https://arxiv.org/abs/2112.03857
是的没错,开篇必须说点啥是我的特色,大连疫情了,整个假期啥事没有,一开学就疫情,另外才知道发核心才能毕业哦呵呵呵,我笑噶了。本文介绍两篇论文,目标抓紧开题!
1. CLIP干啥的
1.1 CLIP如何进行预训练
CLIP就是用对比学习的方式,去训练一个视觉语言的多模态模型。模型的输入是一个图片和文字的配对,比如这里图片画的是一只狗,那么配对的文字是一只小狗,图片通过一个图片编码器(Resnet或者vision transformer),从而得到了一些特征,文字通过文本编码器,从而得到一些文本的特征,假设说,每个training betch里都有N个这样的图片文本对,那个我们就可以得到N个这种图片的特征,N个文本的特征,CLIP就是在这些特征上去做对比学习,对比学习就非常的灵活,他只需要一个正样本和负样本的定义,那么如图,配对的一个图片文本对就是正样本,也就是图中红框框起来的,因为他描述的是一个东西。那么剩下这个矩阵中所有不是对角线上的元素,都是负样本,也就是说,这里有N个正样本,有-N个负样本。然后模型就可以通过对比学习方式训练起来了,完全不需要任何手工的标注,对于这种无监督的预训练方式,需要大量的数据,那么作者搞了4个亿的数据集...好嘛
1.2 CLIP如何来做zero shot的推理
因为CLIP模型经过预训练之后只能得到视觉上和文本上的这些特征,并没有在任何分类的任务上,做继续的训练或者微调,所以说他没有这么一个分类头,那么没分类头如何推理:
prompt template:用 Image Net举例,CLIP就是先把Image Net 里这1000各类,飞机,车,狗啥的,变成一个句子,A photo of a plane,然后这1000个句子通过之前预训练好的这个文本编码器得到1000个文本的特征,推理的时候,任何一张图片通过图片的编码器,得到图片特征之后,与所有的文本特征做cosine similarity,相似性最高的这个文本特征所对应的句子就是我们想要的,从而完成分类。
CLIP这个模型,彻底摆脱了categorical labal(绝对标签)这个限制,就是不论在训练的时候还是在推理的时候都不需要一个提前定好的一个标签的列表了,任意一张照片,都可以通过给模型输入不同的文本句子,从而知道这张图片是啥。
2. GLIP
这篇论文做的任务是phrase grounding(利用指定描述的语句进行标定图片中所显示的物体),属于visual grounding(视觉基础训练)的一种。phrase grounding的任务是输入句子和图片,对于给定的sentence,要定位其中提到的全部物体然后框出来。
对比一下的话,目标检测是给你一个图片,把bounding box找出来,visual grounding就是给你一个图片,再给一个文本,根据这个文本把物体找出来。此篇文章就是将两个任务结合,把detection和phrase grounding两个任务合起来,变成一个统一的框架,来做模型的与训练,再把尾标签的一系列方法加进来(self-training),就可以实现在没有标注过的图像文本对上生成bounding box标签。
Zero Shot:给一些标签或者一句话,通过GLIP模型得到检测框
2.1 怎么将两个任务相结合的
对于目标检测和phrase grounding来说,训练目标函数是一个分类的loss加一个定位的loss,其中这个定位的loss两者差不多,区别就在于怎么来计算这个分类的loss。
目标检测的分类loss:给定一个图片,有一个此图像的backbone,就可以得到这个region embedding,上图的这个O就是一个Nxd的region embedding,意思就是假如说有N个bounding box,每个bounding box embedding的维度就是d,然后就是接了一个分类头,看看每一个bounding box里面的物体到底是哪个类,那么这个分类头就是一个矩阵W,它的维度就是cxd,c是有多少个类别,然后把region embedding和W相乘之后就可以得到最后这个分类的logic,再用NMS把这些bounding box筛选一下,跟ground truth(正确标记的)算cross entropy loss(交叉熵损失)就能得到最终的这个分类loss。
vision grounding的分类loss:算了一个匹配的分数S,看图像中的区域和句子里的单词如何匹配,也是给定一个图片,有一个image backbone,得到这个region embedding,然后给了一个句子prompt,通过一个文本编码器得到文本的embedding P,之后跟图像的embedding O 算一下similarity,就可以得到最终的这个分数,
把目标检测和vision grounding联合:判断什么时候是positive match,什么时候是negative match
2.2 预训练数据集
用已有的数据集不够,想把数据集变大,就需要借鉴于unlable的data,引入图像文本对来增加数据集,为了训练这个的目标检测模型,必须得有bounding box的ground truth,还需要知道这个bounding box对应于句子里的哪个单词,所以作者就采取self training,借鉴伪标签的方式,就是说他拿已经训练好的这个glip-tiny c,直接在这些图像文本对上做推理,他推理出来当前的图片上有哪些bounding box,他就把这些bounding box当成ground truth。可能有错误所以叫做伪标签,用了之后模型的稳健性更好。
2.3 模型总体框架
目标函数怎么算的:做了一个有监督的学习的工作,时时刻刻都是有bounding box annotation,当抽出来O1,O2这些region的时候,是知道跟上面的单词是一一对应的,这样在算完这个O和P的这个相似度点乘之后,就可以去跟ground truth来算Alignment Loss,就完成了文本和图像特征之间的融合,就可以进一步的来做zero shot,对于这个定位的loss来说,因为有ground turth,就直接算一个L-1loss就可以。
Deep Fusion:将文本的特征和图像的特征抽出来之后,理论上是可以算后面这个相似度矩阵的,但是如果直接这么算的话,这个图像文本的joint embedding space (联合的特征提取)还没学好,如果多加一些层数,让他们之间融合一下,可能学的更好,相似的概念拉的更近,能让最后的文本特征和图像特征更好,更有关联性,这样再算后面的相似度的时候,就更有针对性。具体操作:用cross attention把这个文本和图像的特征进行交互,
3. 升级版:GLIPV2
论文名称:GLIPV2:Unifying Localization and VL Understanding
原论文地址:https://arxiv.org/pdf/2206.05836.pdf
卷起来了,他融合了更多的数据集,更多的任务,加入了一个VQA(Visual Question Answering)能回答问题了和Image Caption(图片说明),如图
4. 小小总结
数据集大力出奇迹,老鼻子数据,训练训练就贼准,发论文的密码掌握了
版权归原作者 思艺妄为 所有, 如有侵权,请联系我们删除。