参考
目标检测概论
传统方法:基于CNN网络
主流:基于transfomer架构
yolos :VIT做目标检测
DERT:CNN提取特征,再transfomer
共同缺点:都需要事先知道检测的类别,训练的时候训练集要有对应的类别
本文Glip:不需要事先知道类别。训练的时候可以是猫狗,检测的时候可以是马
GLIP做什么
这篇论文做的任务是phrase grounding(利用指定描述的语句进行标定图片中所显示的物体),属于visual grounding(视觉基础训练)的一种。phrase grounding的任务是输入句子和图片,对于给定的sentence,要定位其中提到的全部物体然后框出来。
GLIP思想
过程:
1.图像通过特征提取网络,先提取出图像中的特征
2.文本通过文本特征提取网络,得到相应文本特征
3.通过Fusion对视觉和文本信息交互。
4.然后计算图像与文本的匹配度(把分类问题变成匹配问题,理解类别的语义)
Deep Fusion:将文本的特征和图像的特征抽出来之后,理论上是可以算后面这个相似度矩阵的,但是如果直接这么算的话,这个图像文本的joint embedding space (联合的特征提取)还没学好,如果多加一些层数,让他们之间融合一下,可能学的更好,相似的概念拉的更近,能让最后的文本特征和图像特征更好,更有关联性,这样再算后面的相似度的时候,就更有针对性。具体操作:用cross attention把这个文本和图像的特征进行交互,
CLIP的预训练(参考CLIP)
CLIP中,输入是图像-文本对的形式
图像通过一个图像编码器,提取图像的特征
文字通过文本编码器,提取文本特征
每个training betch有N个图像-文本对,那么就可以得到N个这种图片的特征,N个文本的特征。
clip就是对特征去做对比学习。需要定义好正样本和负样本,如上图配对上就是正样本,不匹配就是负样本。那么上图对角线就是正样本,其余是负样本。那么N个特征,有N个正样本,N^2-N个负样本。
之后就可以改变输入,对比学习来训练,需要大量的数据
clip如何做zero shot(无标定)的推理(参考CLIP)
用相似度来决定图像的文本
用 Image Net举例,CLIP就是先把Image Net 里这1000各类,飞机,车,狗啥的,变成一个句子,A photo of a plane,然后这1000个句子通过之前预训练好的这个文本编码器得到1000个文本的特征,推理的时候,任何一张图片通过图片的编码器,得到图片特征之后,与所有的文本特征做cosine similarity,相似性最高的这个文本特征所对应的句子就是我们想要的,从而完成分类。
GLIP与目标检测的损失
目标检测的分类loss:给定一个图片,有一个此图像的backbone,就可以得到这个region embedding,假如是一个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
GLIP的大数据集预训练方式
我的简单理解:
选择用自训练的方式,用训练好的GLIP网络,去标注一些数据,得到标注好的图片。这些图片的标注可能是对的,可能是错的。不管,直接再放入网络继续训练
用已有的数据集不够,想把数据集变大,就需要借鉴于unlable的data,引入图像文本对来增加数据集,为了训练这个的目标检测模型,必须得有bounding box的ground truth,还需要知道这个bounding box对应于句子里的哪个单词,所以作者就采取self training,借鉴伪标签的方式,就是说他拿已经训练好的这个glip-tiny c,直接在这些图像文本对上做推理,他推理出来当前的图片上有哪些bounding box,他就把这些bounding box当成ground truth。可能有错误所以叫做伪标签,用了之后模型的稳健性更好
目标函数
我的理解:
通过上面预训练的方式,和计算损失的方式,这样就能算出损失。通过损失算目标函数
目标函数怎么算的:做了一个有监督的学习的工作,时时刻刻都是有bounding box annotation,当抽出来O1,O2这些region的时候,是知道跟上面的单词是一一对应的,这样在算完这个O和P的这个相似度点乘之后,就可以去跟ground truth来算Alignment Loss,就完成了文本和图像特征之间的融合,就可以进一步的来做zero shot,对于这个定位的loss来说,因为有ground turth,就直接算一个L-1loss就可以。
升级版GLIPV2
他融合了更多的数据集,更多的任务,加入了一个VQA(Visual Question Answering)能回答问题了和Image Caption(图片说明),如图