- 论文:https://arxiv.org/abs/2112.10003
- 代码:https://github.com/timojl/clipseg
- 语雀文档:https://www.yuque.com/lart/papers/ma3gkwbb5ud1ewbw
目标任务:refering/zero-shot/one-shot segmentation
目标数据集: PhraseCut
主要目的
本文基于CLIP强大的零样本的文本编码和图像编码能力, 设计了一个新的系统, 基于测试时任意的Prompt信息(任意的文本或者图像提示), 来生成图像分割, 整体的形式非常类似于Few-shot的Segmentation形式.
这种策略解决现有基于固定类别的分割学习范式的局限性, 即现有图像分割任务的使用固定的目标类别来训练模型, 对于之后扩展额外的类或者更加复杂的查询信息时, 不够灵活和方便, 需要重新训练模型来包含这些表达.
这样的设计可以方便地构建一个统一模型, 通过一次训练可以应对三类常见的分割任务, 即:
- referring expression segmentation:由文本提示指定目标分割。训练时会见到所有类别,也就是说并不需要考虑到泛化到未知类别的问题。
- zero-shot segmentation:测试中存在训练时未知类别,这些未知类别需要通过建立与已知类别之间的关系来实现分割。现有方法会借助于类别文本嵌入等手段实现信息的关联。
- one-shot segmentation:测试中,目标类别的分割需要提供与之关联的单个样本作为提示(support data)来指导分割,这通常可以使一个有着对应mask的图像。
注意, 这里提到的类别未知指的是模型不知道可能存在的类别, 但可以通过人为提供目标类别的信息来指导模型的分割.
主要内容
整个方法构建在CLIP之上, 使用CLIP(ViT-B/16)作为backbone, 扩展了一个小的基于Transformer的条件分割解码器来实现密集预测任务. 如图所示, 这里将CLIP的两个编码器参数冻结了, 只有绿色部分是可学习的.
模型使用CLIP的联合文本视觉嵌入空间来指导模型的学习, 确保了可以处理文本和图像形式的Prompt. 这里的想法是教解码器将CLIP内部的激活与输出的分割联系起来, 同时尽可能减少数据集偏置, 并保持CLIP的杰出和广泛的预测能力.
在通过PhraseCut数据集的扩展版本上的训练后, 整个模型可以获得一个二值分割图, 这会对应于输入端提供的query, 即任意文本或者提示图像的信息.
这里作者提到:这种混合输入的形式, 使得对于三类分割任务具有了动态适应的能力, 同时也使得模型可以适应那些可以通过特定的文本或者图像来表述的二值分割任务.
这里其实反映了很重要的一点, 文字描述本身具有一定的主观性和模糊性, 而用特定图像作为指导又必然会受限于图像的形式和目标的状态. 它们对于被用来指导模型进行确定性分割的需求而言, 并不能完全胜任.
Decoder
整体流程可见图2中的解释. 所有CLIP的参数都是冻结的. 模型整体仅需训练一个紧凑的界面奥奇, 所以CLIPSeg在特征嵌入维度为64的时候, 整体可学习的参数只有1M多.
- query图像通过CLIP视觉编码器. 这里的图像通过合并分割mask和图像获得了engineered visual prompt来输入CLIP, 这一query的预处理过程在文中称为visual prompt engineering.
- 中间的激活结果被读取并映射到解码器中的嵌入维度上. 提取的激活(包括CLS token)被加到解码器每个transformer block之前. 解码器transformer blocks的数量和CLIP中提取的激活数量一致. 实际模型中, 从CLIP的第3、7、9层中获得激活输出, 也因此解码器只有三层.
- 解码器使用一个线性投影生成二值分割.
- 为了解码特定的分割目标, 这里使用FiLM, 通过条件向量来调制解码器的输入.
- FiLM来自于https://arxiv.org/pdf/1709.07871.pdf.
- 条件向量可以从两种方式获得, 即使用CLIP文本编码器对文本Query的嵌入和使用CLIP视觉编码器对图像Query的嵌入.
- 实际上, 由于CLIP构建了图像和文本之间的共享的嵌入空间, 作者们在这里使用了二者之间的随机线性插值作为条件向量, 并将这种方式作为了一种训练时的数据增强策略(image-text interpolation). 即使用图像嵌入 S i S_i Si和文本嵌入 t i t_i ti线性组合获得条件向量: x i = α S i + ( 1 − α ) t i , α ∈ [ 0 , 1 ] x_i = \alpha S_i + (1-\alpha)t_i, \alpha \in [0, 1] xi=αSi+(1−α)ti,α∈[0,1].
PhraseCut+
PhraseCut原本只有340000个有着对应图像分割的短语, 并不包含任何的visual support. 作者们扩展了这个数据集:
- 为了为prompt p添加visual support image, 随机从样本集合Sp中抽取了部分数据, 他们共享prompt p. 对于只有单一样本对应的prompt, 则模型仅依赖于text prompt.
- 另外为数据集引入了负样本, 即样本中并没有prompt中匹配的目标. 具体就是将样本的对应的短语按照固定的概率qneg, 随机替换为不同的短语.
短语使用一组固定前缀随机增强(正如CLIP作者所建议的那样). 在图像上, 我们在考虑对象位置的情况下应用随机裁剪, 确保对象至少保持部分可见. 本文将此扩展数据集称为PhraseCut+(缩写为PC+).
与原始的 PhraseCut 数据集只使用文本来指定目标相反, PC+支持使用image-text interpolation的方式训练. 通过这种方式可以训练一个联合模型来处理文本和视觉输入.
这里倒是没有提到, 测试时同时输入文本和图像时, 如何插值处理?
Visual Prompt Engineering
基于Prompt的学习, 实际上本质目的在于将特定目标信息引入作为指导. 所以如何获取特定目标信息也是一个关键. 这里从特征层面和输入层面两个角度进行了讨论.
为了评估不同的masking策略, 这里在LVIS数据集上, 基于CLIP的对齐关系进行了一些评估.
使用CLIP来计算与图像中目标名称对应的文本嵌入ti. 然后将它们与原始图像视觉嵌入so, 以及使用修改后图像或注意力mask来突出目标物体后的视觉嵌入sh, 分别进行比较. 通过softmax归一化对齐向量(可以理解为成对相似度), 得到的分布如图3所示.
这里将不同masking策略的评估指标定义为 Δ P ( o b j e c t ) = s h t 0 − s o t 0 \Delta P(object) = s_h t_0 - s_o t_0 ΔP(object)=sht0−sot0, 这里将目标类别的文本嵌入定义为 t 0 t_0 t0. 所以这里表示了不同的图像嵌入与目标文本嵌入的相似性, 相对于原始图像对应的相似性的差异.
特征级别的特定目标信息提取: Masked Pooling
作者们首先讨论了传统基于卷积的方案中, 为了计算prototype vector常使用的Masked Pooling的技术, 这一技术作用于support图像特征上. 而本文中为了提取特定目标信息的prompt信息的过程与此概念颇为类似.
但由于整体结构基于Transformer, 语义信息不仅在特征图中分散存在, 在其内部参与了层次聚合过程的CLS token也有. 而绕过CLS token并直接从特征映射的mask pooling中派生条件向量也是不可能的, 因为它会破坏CLIP的文本嵌入和视觉嵌入之间的兼容性.
在Transformer中, 与masked pooling等效的直接方法是直接在tokens应用mask. 通常, visual transformer由一组固定的token组成, 这些令牌可以通过多头注意在每层进行交互. 其中有用于读出的CLS token和最初从图像patch中获得的与图像区域相关的token.
mask可以通过将一个(例如最后一层)或多个transformer层的限制为mask内的patch token仅和CLS令牌之间的交互. 表2左表中展示了实验结果. 可以看到这种masking策略效果一般, 相较于完全masking有小幅度提升.
输入级别的特定目标信息提取: Visual Prompt Engineering
替代在模型内部使用使用masking, 可以直接组合mask和image来获得一个新的图像, 从而可以被visual transformer处理. 相似于(analogous to)NLP中的prompt engineering, 这里将其称之为visual prompt engineering. 由于这种prompt设计, 在NLP中新颖且在上下文未知的情况下表现最佳, 这里通过设计了多种形式来评估不同的变体, 如表2中所示. 可以发现mask和image结合的形式非常重要. 这里确定了三种图像操作来改善文本prompt与图像之间的对齐: 降低背景亮度, 使用高斯滤波器模糊背景, 和对目标裁剪. 表二中可以看到, 三种操作的组合获得了最好的效果. 本文使用这种形式.
实验细节
实验中, 由于涉及到单通道预测图像的二值化的问题, 所以作者对于阈值的设定进行了一些特殊化的设定: 在二值分割中, IoU需要指定一个阈值. 虽然大多数情况下会使用自然的选择0.5, 但如果对象匹配查询的概率在训练和推理之间不同, 则最优值可能会严重偏离0.5(查询匹配场景中一个或多个对象的先验概率高度依赖于内容和数据集). 因此, 本文报告了使用阈值对每个任务和模型进行优化的one-shot分割的性能.
这里的实验中设计了两种baseline变体:
- CLIP-Deconv使用CLIP和一个非常简单的解码器, 仅仅包含FiLM条件化结构、一个线性映射和一个转置卷积. 这有助于估计CLIP独自对于结果起到的作用.
- ViTSeg使用与提出的CLIPSeg相同的结构, 但是这里的视觉编码器使用ImageNet预训练的参数来替换CLIP的初始化. 而文本编码器仍然使用CLIP初始化. 这有助于了解到特定的CLIP权重对性能的影响.
Refering Segmentation
对比中可以看到:
- 不同模型在不同数据集上的最优阈值不同.
- ViTSeg的性能反映了同时使用CLIP两个编码器更重要.
- 在Refering分割上, 使用扩充数据集效果并不好. 仅基于文本训练的形式反而效果要更好.
Zero-shot Segmentation
这里是直接评估, 训练是在排除了Pascal中的unseen类别的PhraseCat+上开展的. 这是通过将 Pascal 类分配给 WordNet 同义词集并通过遍历下位词(例如, 不同的狗品种表示狗)来生成一组无效词来实现的. 包含这样一个词的提示将从数据集中删除.
作者在这里提到, 试验所关注的数据集Pascal-VOC的设定是多标签的. 提出的模型由于本身是二值预测的形式, 所以对于这种多标签的需求, 直接为20个Pascal类别分别预测一个独立的二值图. 从所有的20个预测中, 为每个像素预测概率最大的类别.
或许可以理解为, 每个图像中包含的类别不止一个, 所以实际上这是一个多类别的任务. 对于本文的设定, 每个输入可能无法事先知道存在哪些类别, 所以直接一次性生成20个类别的预测.
实验结果中非常有趣的一点是提出的CLIPSeg在unseen类上的性能要比在seen上的好. 作者任务这可能是因为实际的seen类要比unseen更难一些. 例如, 对于unseen-4的设定, 四个类分别是airplane/cow/motorbike/sofa, 他们多为大且相对独特的目标.
One-shot Segmentation
这类任务中, 目标的识别需要借助于提示图像和对应的mask, 所以也就无法依赖于文本标签了.
这里使用前面提到的三种操作处理提示图像来突出目标.
这里使用相同的策略移除了和Pascal重叠的类别.
Open Vocabulary
这里探究了对于三种不同文本prompt下的预测效果.
- Generalized Prompts: 亦为affordance-like prompt.
- Descriptive Prompts from PhraseCut test set: 上图中黄色区域额外测试了使用错误颜色描述的情况.
提示中的细节信息(蓝色框中)和颜色信息(橙色框中)对预测对象的判定影响很大.
为了定量评估generalized prompt的性能, 作者构建了 LVIS 测试数据集的子集, 其中仅包含与affordance或者attribute相对应的类的图像. 然后要求模型以这些作为prompt进行分割. 例如, 当使用"sit on"作为提示时, 计算与扶手椅、沙发和双人沙发目标之间的前景IoU. 类别映射的完整列表可见论文的附表.
实验发现 PC+ 上训练的 CLIPSeg 版本比 CLIP-Deconv 基线, 和在 LVIS 上训练的CLIPSeg表现更好(它只包含对象标签而不是复杂的短语).
这一结果表明, 数据集的多变性和模型的复杂性对于泛化都是必要的.
ViTSeg 表现更差, 这是意料之中的, 因为它没有使用以泛化能力而闻名的强大的 CLIP backbone.
Ablation Study
从图中可以看到, CLIP的预训练权重对于提出的CLIPSeg非常重要. 混合prompt形式的训练使得模型对于不同输入的独立性能更加平衡.
CLIP对于输入尺寸的依赖性分析
由于多头注意力不需要固定数量的标记, CLIP 中的transformer可以处理任意大小输入. 然而, 公开可用的 CLIP 模型(ViT-B/16 和 ViT-B/32)是在 224×224 图像上训练的. 这里在分类任务中测量了 CLIP 性能与输入图像大小的相关性.
从两个 CLIP 编码器中, 提取最后一层的 CLS 向量. 使用此向量作为输入, 在 ImageNet 子集上训练逻辑回归分类器以区分 67 类车辆.
结果表明 CLIP 通常可以很好地处理大图像尺寸, ViT-B/16版本在大约 350×350 的尺寸下表现出更好的性能.
文本prompt形式、目标大小和类别
为了更好理解模型的表现, 这里比较了不同形式的文本prompt、目标大小和类别.文章来源:https://www.toymoban.com/news/detail-487654.html
实验是通过PC+上预训练的CLIPSeg. 在所有情况下训练期间随机抽取不同的提示形式. 这里评估了 PhraseCut 测试集 5000 个样本的性能.文章来源地址https://www.toymoban.com/news/detail-487654.html
- 几种prompt形式对性能的影响很小.
- 在较大对象上有更好性能的趋势明显.
- 不同类别的表现相当平衡.
到了这里,关于CVPR 2022 | Segment Everything Everywhere All at Once的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!