目录
- 1 LSeg
- 2 Group ViT
1 LSeg
LANGUAGE-DRIVEN SEMANTIC SEGMENTATION
LSeg是第一篇将CLIP应用于语义分割的论文。它的分割的效果拔群,容错能力也很高:
模型总览图跟CLIP很像:
对于图像链路:输入一张图片,进入分割的模型,得到一个特征图,通过上采样放大,因为我们现在做的是密集任务,输出和原来图像的大小是一致的,所以需要做一些升维的操作,最后模型的输出和ground truth supervision去计算cross entropy loss即可。
图像的编码器是DPT的结构(前面有一个ViT,后面加了个Decoder),即拿ViT去做有监督的语义分割。Decoder的作用是把一个bottleneck feature慢慢地upscale上去。
对于文本链路:总共有N个label,这些标签通过文本编码器就能得到N个文本特征。这里对N是没有限制的,可以只检测狗,也可以检测狗和数,还能检测其他东西,N是随时可以改变的。文本通过编码器之后就会得到一个N×C的矩阵,C是特征的维度。
将图片特征和文本特征在C维度上相乘,就会得到一个H×W×N的tensor,到这一步,就和传统的分割没有区别了,因为传统的分割也是会得到一个H×W×N的特征。
该论文虽然说是用到了CLIP,并且是Zero-Shot,但是它的训练过程是有监督的训练,模型是在7个分割数据集上一起训练出来的,即最后是有ground truth mask的,目标函数就是跟ground truth mask去做的cross entropy loss,而不是像CLIP那样是对比学习的Loss,不是一个无监督训练的工作。
在训练的过程中,文本编码器直接用CLIP的,训练过程中完全冻住,不参与训练。
最后的spatial regularization blocks去掉也不影响我们对模型结构的理解。
2 Group ViT
GroupViT: Semantic Segmentation Emerges from Text Supervision
Group ViT的监督信号来自于文本,不依赖于segmentation mask的手工标注,可以像CLIP那样直接利用图像文本对进行的无监督训练。
为什么叫Group ViT呢?因为在视觉领域,很早之前做无监督分类的,有一种常用的方法叫grouping,简单来说就是从一个聚类的中心点往外发散,把附近周围相似的点逐渐扩充成一个group,这个group相当于一个segmentation mask,是一种自下而上的方式。此处,作者相当于重新审视了这个grouping的方法,把它完美地用到当前这个框架中,他们提出了一个计算单元,如下图右侧框图,叫做grouping block,还有一些可以学习的group tokens,主要的目的是想让模型在初始学习的时候,能慢慢地把邻近的像素点都一点一点地group起来,变成一个又一个segmentation mask。下图中间画出了这些segmentation mask,在模型的浅层,学到的group token分割的效果还不是很好,能看到一些五颜六色的颜色块。经过模型的学习,深层的group token分割效果相当不错。
Group ViT的贡献是:在一个已有的ViT框架中,加入了grouping block,同时加入了这些可学习的group tokens。
Zero Shot推理过程如下图所示:
- 给定一张图片,经过GroupViT的图像编码器,就会得到最后的8个Group Embedding;
- 再把有可能的标签通过文本编码器,得到一系列的文本特征;
- 接下来计算图像的Group Embedding和文本特征之间的相似度,就可以知道每个group Embedding对应那个Class。
这里有个明显的局限性:因为模型最后只有8个Group Embedding,也就意味着,一张图片的分割最多只能检测到8类。