作者将 CLIP 的预训练参数用来初始化 ViL 模型,然后再各种视觉-文本多模态任务上进行微调,测试结果。推理时,可以指定任意个数、该方法可推广到各种类别,并应对具有挑战性的抽象水平,同时保持语义上的视觉线索,以实现实例级和类别级的识别。但是GLIP自己做出来对文本的理解,给出了疫苗和针管的检测结果。
对一个batch 当中所有的pair ,抽取其未交互的图片特征和文本特征O ∘ = E n c V ( I m g ) , P ∘ = E n c L ( T e x t ) \overset{{circ}}{O}=Enc_{V}(Img),\overset{{circ}}{P}=Enc_{L}(Text) O∘=EncV(Img),P∘=EncL(Text)
计算一个batch内,所有图片特征和文本特征的相似度S g r o u n d b a t c h [ i , j ] = O ∘ i ( P ∘ j ) T S_{ground}^{batch}[i,j]=\overset{{circ}}{O}{_{}}^{i}(\overset{{circ}}{P}{_{}}^{j})^{T} Sgroundbatch[i,j]=O∘i(P∘j)T,这样就可以通过跨图像匹配的方式,使得每一个object/token 都能够看到更多的负样本。
在可视化期刊distill上发表的博客《Multimodal Neurons in Artificial Neural Networks》中,作者对CLIP模型的对抗性攻击、由此可见整个GLIP都是用有监督的方法进行训练的。这说明对于一些难的数据集来说,有一些训练样本还是非常有必要的。
Vision grounding分类损失计算:(其实和ViLD text分支一模一样) O = E n c I ( I m g ) , P = E n c L ( P r o m p t ) , S g r o u n d = O P T O=Enc_{I}(Img),P=Enc_{L}(Prompt),S_{ground}=OP^{T} O=EncI(Img),P=EncL(Prompt),Sground=OPT
表示图片编码器E n c I Enc_{I} EncI处理img之后得到N region embeddings,即O ∈ R N × d O\in \mathbb{R}^{Ntimes d} O∈RN×d;
文本编码器E n c L Enc_{L} EncL(比如BERT)处理Prompt得到text embedding,即P ∈ R M × d P\in \mathbb{R}^{Mtimes d} P∈RM×d;
图像特征O和文本特征P相乘得到相似度结果S g r o u n d ∈ R N × M S_{ground}\in \mathbb{R}^{Ntimes M} Sground∈RN×M,即论文中说的region-word aligment scores。
重复上述过程:添加新的 Group tokens g i 2 \mathbf{g}_i^2 gi2(8×384),经过 3 层 Transformer Layers 的学习之后,再次经过grouping block 分配,得到 s i 3 \mathbf{s}_i^3 si3(8×384) 。在大多数数据集上,prompt ensembling都能够提升模型性能。可以看到采点分布图已经和最终的简笔画图像非常接近了。再配合伪标签的技术来扩增数据,使得训练的数据量达到了前所未有的规模(3M人工标注数据和24M图文对数据)。基本结构和所画对象的基本视觉成分。
初始定义一些贝塞尔曲线s 1 s_1 s1到s n s_n sn,然后扔给光栅化器Rasterizer,就可以在二维画布上绘制出我们看得到的图像。
对比模型有有监督的EfficientNet、
下面的例子中,如果用传统的目标检测算法的话,模型只会判断这些物体都是玩具,也就是图中蓝色的基础类。
GLIP-L:backbone为Swin-L模型,然后同时使用FourODs(目标检测有监督训练中能用的所有的数据集)、这样对不同的图片上不同复杂程度的物体,都能很好的自动抽象。更具有高层语义信息的 group,即Segment Token(维度64×384,相当于一次聚类的分配)。作者在这里选择Linear probe CLIP的方式。rare,标注数依次递减,也就是下图中的A P f , A P c , A P r AP_f,AP_c,AP_r APf,APc,APr。
# image_encoder - ResNet or Vision Transformer# text_encoder - CBOW or Text Transformer# I[n, h, w, c] - 输入图片维度# T[n, l] - 输入文本维度,l表示序列长度# W_i[d_i, d_e] - learned proj of image to embed# W_t[d_t, d_e] - learned proj of text to embed# t - learned temperature parameter# 分别提取图像特征和文本特征I_f =image_encoder(I)#[n, d_i]T_f =text_encoder(T)#[n, d_t]# 对两个特征进行线性投射,得到相同维度的特征d_e,并进行l2归一化,保持数据尺度的一致性# 多模态embedding [n, d_e]I_e =l2_normalize(np.dot(I_f,W_i),axis=1)T_e =l2_normalize(np.dot(T_f,W_t),axis=1)# 计算缩放的余弦相似度:[n, n]logits =np.dot(I_e,T_e.T)*np.exp(t)# symmetric loss functionlabels =np.arange(n)# 对角线元素的labelsloss_i =cross_entropy_loss(logits,labels,axis=0)# image lossloss_t =cross_entropy_loss(logits,labels,axis=1)# text lossloss =(loss_i +loss_t)/2# 对称式的目标函数
在MOCO中,真实标签都是0,因为其正样本都是放在第一位,所以正样本对应的索引永远是0;但是在CLIP中,正样本都是在对角线上,即(I 1 , T 1 I_1,T_1 I1,T1,I 2 , T 2 I_2,T_2 I2,T2,…),所以真实标签为np.arange(n)。该模型还展示了在开放词汇目标检测任务上的强大的zero-shot和few-shot性能以及在 VL 理解任务上的出色的grounding能力。对于没有见过的图像类别,需要额外的信息才能识别。
数据的利用不够高效 在本文的训练过程中,4亿个样本跑了32个epoch,这相当于过了128亿张图片。由于是在嵌入空间(embedding space)而不是概率空间(probability space)上集成的,因此节约了计算成本。 例如当数据集是Oxford-IIIT Pets数据集时(类别都是动物),就可以将模板写成: A photo of a {label}, a type of pet.;或者在做OCR任务时,在想找的那个文本或者数字上打上双引号,模型就可能知道你是想找双引号里面的内容。ViLD借鉴了CLIP的思想,也借鉴了CLIP的预训练参数,最后的结果也不错。其中分类头cls-Head由矩阵W ∈ c N × d W\in \mathbb{c}^{Ntimes d} W∈cN×d表示,和N region embeddings相乘后得到S c l s ∈ R N × c S_{cls}\in \mathbb{R}^{Ntimes c} Scls∈RN×c;
L c l s = l o s s ( S c l s ; T ) . L_{cls}=loss(S_{cls};T). Lcls=loss(Scls;T).:使用nms筛选这些bounding box,然后和GroundTruth计算交叉熵,得到分类损失。本文中,每条曲线是通过四个点来确定,每个点都有其x,y坐标,即s i = { p i j } j = 1 4 = { ( x i , y i ) j } j = 1 4 s_{i}=\left \{ p_{i}^{j} \right \}_{j=1}^{4}=\left \{(x_{i},y_{i})^{j}\right \}_{j=1}^{4} si={pij}j=14={(xi,yi)j}j=14。因为在模型的前几层,学习到的还是相对低级的几何纹理信息,而非高层语义信息,所以其包含了一些长宽啊这些信息,对几何位置比较敏感。
L g L_g Lg:geometric distance loss,计算原图和简笔画的浅层编码特征的loss。DINO等)
一、φ(I)和r一起进行R计算得到 e r e_r er(region embeddings,图片特征)
e b g e_{bg} ebg表示背景embedding,t_1到t ∣ C B ∣ t_{left | CB right |} t∣CB∣表示基础类CB的文本特征Text Embeddings。官网代码
语义分割可以看做是像素级的分类,因此分类的新技术、
3.3.2损失函数
在GLIPv2 当中对损失函数做了改进,在原有ground损失的基础上加入两种损失: L G L I P v 2 = L l o c + L i n t r a ⏟ L g r o u n d + L i n t e r + L m l m {L_{GLIPv2}=\underset{L_{ground}}{\underbrace {L_{loc}+L_{intra}}}+L_{inter}+L_{mlm}} LGLIPv2=LgroundLloc+Lintra+Linter+Lmlm
Text Encoder可以采用NLP中常用的text transformer模型;而Image Encoder可以采用常用CNN模型或者vision transformer等模型。所以需要把二者的分类loss统一到一个框架下面,也就是: L = L c l s + L l o c . L = L _{cls}+ L_{loc} . L=Lcls+Lloc.
detection分类损失计算: O = E n c I ( I m g ) , S c l s = O W T , L c l s = l o s s ( S c l s ; T ) . O=Enc_{I}(Img),S_{cls}=OW^{T},L_{cls}=loss(S_{cls};T). O=EncI(Img),Scls=OWT,Lcls=loss(Scls;T).
E n c I Enc_{I} EncI表示图片编码器(例如swin transformer),处理img之后得到N region embeddings,即O ∈ R N × d O\in \mathbb{R}^{Ntimes d} O∈RN×d(n个bounding box,每一个的维度是d);
N region embeddings→ c l s − H e a d S c l s \overset{cls-Head}{rightarrow}S_{cls} →cls−HeadScls。
结果越靠近左上角,模型的性能越好。CLIPasso对每张图生成三张简笔画,最后计算每张简笔画和原图的loss(L s + L g L_s+L_g Ls+Lg),调出loss最低的一张作为最终结果(蓝色框)。因此约束浅层特征可以保证原图和简笔画的几何轮廓更接近。
所以 CLIP预训练时,用来描述图片内容的文本是一个句子,比如A photo of {label}。
3. zero-shot推理效果展示 直接像ViLD一样给出物体类别生成一句话(Prompt : person. bicycle.car. motorcycle…)或者是像phrase grounding任务一样生成短语“马路上有很多坑”(Prompt : there are some holes on the road),都可以将物体检测出来。最后一张图的self表示自拍照
1.1.3.4 zero-shot检测
论文《Open-vocabulary Object Detection via Vision and Language Knowledge Distillation》(ICLR 2022)
Rasterizer:光栅化器,图形学方向根据参数绘制贝塞尔曲线的一种方法,可导。但这是可以预见的,因为对于有监督训练,只有一两个样本可能越训练越差,还不如直接zero-shot。如果阈值设的高,很多物体都会被检测为背景类;如果设的低,容易误分类,即相似度最高的那一类,并不是真实类别。 Group ViT的贡献就是在现有的ViT模型中加入计算单元Grouping Block,同时加入了可学习的Group Tokens。
左图是在12个数据集上的平均结果,这12个数据集和ImageNet是类似的。其思想还是最简单的分别抽取文本和图片特征,然后通过点积计算相似度。最后与文本特征z T \mathbf{z}^T zT计算对比损失。训练完的模型碰到这些类别之外的物体可能是无法生成准确的素描的,还需要收集相应的数据进行微调。但是随着transformer的兴起,像BERT和GPT这种具有上下文表示的自监督训练模型做的越来越好,nlp模型也终于有了取之不尽的文本监督信号,而且使用简单,泛化性好,为多模态训练铺平了道路。CLIP4clip、
基础类通过prompt得到文本,经过文本编码器得到文本编码B 1 B_1 B1到B n B_n Bn。
在显著性区域采点,相当于你已经知道这里有个物体(语义更明确),或者已经相当于沿着物体的边界去绘制贝塞尔曲线了。 假如模型输入的是n对图片-文本对,那么这n对互相配对的图像–文本对是正样本(下图输出特征矩阵对角线上标识蓝色的部位),其它n 2 − n n^2-n n2−n对样本都是负样本。而语义分割中一张图有多个目标,所以需要多个特征,也就是多个 group tokens。
有监督训练的ResNet50。MAE、再经过一个MLP层变成z I \mathbf{z}^I zI维的图片特征。这样就完成了文本和图像的特征融合,就可以进行zero-shot检测了。 一阶段得到的候选框proposals经过检测头得到 region embeddings,然后经过分类头得到预测的bounding box以及对应的类别。因为 detection的标签是one-hot的类别单词,而Vision grounding的标签是一个句子。按照原先的 loss 设计,图片中的人只能够做到和 ‘person’ 相似, 和 ‘cat” 不相似,但是没有办法和所有其它图片中各种各样的实体进行区分。
同一个词语在不同数据集中所表示的意思可能有所不同。
难以理解抽象/复杂概念 CLIP在一些更抽象或更复杂的任务上zero-shot表现并不好。
Text Embeddings加上分别和可学习的背景 embedding以及 region embeddings进行点积来计算图文相似度得到logics,然后计算logics和GT的交叉熵损失来进行训练。在标注了的1203 类中,有很多类只标注了几次,即罕见类,所以将各个类别分为 fequent、因为只有这样,自注意力图才更准,初始化效果才会好,而有了背景,自注意力就会复杂很多。其中2个数据集在重叠数据上表现更差。
CLIP:简化版的ConVIRT,基于对比学习。训练超大模型,可以参考来自OpenAI的博文:《How to Train Really Large Models on Many GPUs?》及对应的CSDN翻译。
i m a g e → b a c k b o n e + R P N p r o p o s a l s → R o I A l i g n + C o n v r e g i o n − e m b e d d i n g s image\overset{backbone+RPN}{rightarrow}proposals\overset{RoIAlign+Conv}{rightarrow}region-embeddings image→backbone+RPNproposals→RoIAlign+Convregion−embeddings
C N + C B → p r o m p t T e x t → T e x t − E n c o d e r t e x t − e m b e d d i n g ( B 1 . . B n + N 1 . . . N k ) CN+CB\overset{prompt}{rightarrow}Text\overset{Text-Encoder}{rightarrow}text-embedding(B_1..B_n+N_{1}...N_{k}) CN+CB→promptText→Text−Encodertext−embedding(B1..Bn+N1...Nk)
c l a s s = a r g m a x ( r e g i o n − e m b e d d i n g s ⋅ t e x t − e m b e d d i n g ) class=argmax(region-embeddings\cdot text-embedding) class=argmax(region−embeddings⋅text−embedding)
3.1.4 实验
LVis 数据集 zero-shot 效果对比
LVis 数据集图片采样自COCO数据集,但却是一个十分长尾的数据集。
2.2.4 实验
Comparison with Zero-Shot Baselines 下表是和其它的一些 Zero-Shot 推理模型效果对比:
论文《StyleCLIP: Text-Driven Manipulation of StyleGAN Imagery》(ICCV2021)
还有另一篇相关的:《StyleCLIPDraw: Coupling Content and Style in Text-to-Drawing Synthesis》
顾名思义,这是一篇CLIP+styleGAN的工作,可以通过文字的改变引导图像的生成。预测大概还需要当前1000倍的规模才可以弥补上十几个点的这个差距,现有的硬件条件也无法完成。ViLD即Vision and Knowledge Language Distillation,即用CLIP当做teacher蒸馏网络,从而能达到Zero-Shot检测。
另外,还可以根据不同的数据集来调整这个模板,进而提升zero-shot的性能。对应group token g i 1 \mathbf{g}_i^1 gi1的尺寸是64×384。红包一般是中国特有的,新年的时候都会在里面塞钱。pointCLIP、
图片间的对比学习损失L i n t e r L_{inter} Linter。其它方向
传送门:
李沐论文精读系列一: ResNet、
Linear Probe on ResNet-50:
Linear Probe就是冻住预训练好的模型,只训练最后一层的分类器,相当于将预训练模型做特征提取器。从本质上来讲,CLIP其实并没有太大的创新,它只是将ConVIRT方法进行简化,并采用更大规模的文本-图像对数据集来训练。所以论文还对比few-shot性能,即只用少量的样本来微调模型,这里对比了3个模型:
文本编码器提取N × C N\times C N×C的文本特征,图像编码器提取 H ~ × W ~ × C \tilde{H}\times\tilde{W}\times C H~×W~×C的密集图像特征,二者相乘得到 H ~ × W ~ × N \tilde{H}\times\tilde{W}\times N H~×W~×N的特征,再经过 Spatial Regularization Blocks上采样回原图尺寸。