一种简单的文本监督语义分割框架

A Simple Framework for Text-Supervised Semantic Segmentation

摘要

文本监督语义分割是一个新颖的研究课题,它允许在图像文本对比的情况下出现语义片段。然而,开创性的方法可能受制于专门设计的网络架构。
本文证明了一般对比语言图像预训练(CLIP)模型本身就是一种有效的文本监督语义分割器。
首先,我们揭示了普通CLIP不如定位和分割,因为它的优化是由密集对齐的视觉和语言表示驱动的。
其次,我们提出了局部驱动对齐(LoDA)来解决这个问题,其中CLIP优化是通过稀疏对齐局部表示来驱动的。
第三,我们提出了一个简单分割(SimSeg)框架。LoDA和SimSeg联合改进了一个普通的CLIP,产生了令人印象深刻的语义分割结果

代码地址
在这里插入图片描述

本文方法

在这里插入图片描述
左:整体对齐,其中图像-文本对比是由整体向量驱动的,例如[CLS]
中间:密集对齐,通过将所有图像patch与所有单词对齐来优化图像文本对比
右:一个基于CLIP的分割器,生成分类分割掩码,使用密集对齐目标进行训练
在这里插入图片描述
上下文是一种统计特性,有助于人们和网络解决感知推理任务[30]。它在图像和文本理解任务中发挥着重要作用[30,32]。
为了更好地描述视觉概念,我们定义了“上下文词”和“非上下文词”。在字幕中,上下文单词(如森林或海洋)指场景、环境等。非上下文单词(例如人、自行车或猫)指主要对象(或前景)。上下文像素和非上下文像素分别表示与上下文单词和非上下文单词相对应的图像区域。
问题1:视觉编码器关注上下文像素。
直观地,用于分割的编码器应该将非上下文像素视为图像的主要内容。
然而,我们的观察表明,CLIP的视觉编码器专注于上下文像素。如图3所示,为“w/o LoDA”行。

sI2I是关于全局图像特征的相似度图。它可以被解释为每个补丁特征对全局特征的贡献。上下文补丁具有较高的相似性(较亮的颜色),而非上下文补丁具有较低的相似性,表示上下文对全局特征的贡献更大。因此,视觉编码器关注上下文像素。
问题2:图文对比依赖于语境词。
一般来说,CLIP的训练是由对比正面和负面的图像-文本对驱动的。一批中的每个图像-文本对都会产生相似性得分,而InfoNCE损失会使正/负对的相似性最大化/最小化。在下面,我们手动替换图片说明中的关键词,观察图像文本相似性的变化,分析CLIP的图像文本对比行为

非语境词对对比的影响。当替换主要对象的单词(例如,“男孩!车”和“鸭子!兔子”)时,相似性图sT 2I几乎没有变化,如图3所示(没有LoDA)。同时,图文相似度得分也几乎没有变化(如“0.457!0.431”)。特别是“树!花”导致相似度得分的非理性上升(0.399到0.403)。因此,CLIP对非上下文单词的修订不敏感,即使是原始单词和修订单词也非常无关。

语境词对对比的影响。当替换上下文单词(例如,“yard!park”和“leaves!buddles”)时,相似性图sT 2I会发生剧烈变化。如图3(w/o LoDA)所示,相似性图变得比原始图暗得多。更重要的是,替换上下文单词会大大降低相似性得分(例如,“0.457!0.310”)。

动机

在这里插入图片描述
用于分割的通用CLIP模型应该自适应地感知主要对象和上下文。如图4(左)所示,并在第3.3节中证明,密集排列像素和单词将导致严重依赖上下文信息的琐碎解决方案。如图4(右)所示,理想的CLIP模型有望将关键实体词(如狗和水)与相应的局部像素(红色和绿色)对齐。如果模型得到充分优化,给定类名,则与该类相对应的像素区域将被强烈激活。防止CLIP的优化使像素和实体密集对齐是一种实用的策略。根据这一想法,我们提出了一种名为位置驱动对齐(LoDA)的策略
在这里插入图片描述
左图:该模型是通过位置驱动对齐(LoDA)与网络图像-文本对进行预训练的。
中间:模型被零样本转换为类别语义分割。
右:分类分割图被堆叠以基于置信度得分生成最终输出。

Locality-Driven Alignment(LoDA)

最大响应选择
为了实现局部驱动对齐(LoDA)训练范式,我们提出了一种称为最大响应选择的特征选择技术。它自适应地选择具有最大响应的局部特征
最大响应选择会自动选择每个通道上具有最大值的特征。这些特征被期望包含关于重要视觉概念和用于图像-文本对比的关键实体的局部信息,而不管上下文和非上下文。

Pre-training objective
与密集排列的紧凑特征f(xI)和g(xT)不同,LoDA旨在稀疏计算VI和VT的对比度损失。VI和VT分别表示来自图像区域和关键字的最大局部响应的特征。因此LoDA实现了最受关注的区域和单词的稀疏排列。更重要的是,LoDA进一步防止了模型在严重依赖上下文像素的情况下进行优化,因为建模上下文需要大量(即>MI)的特征

SimSeg Framework

我们提出了一个简单的分割框架(SimSeg),该框架基于具有LoDA的CLIP。对于每个原始图像,SimSeg首先为每个类别生成二进制分割掩码,然后将它们组合成分割图。
类别语义分割
我们的模型经过预训练,可以预测图像-文本对的感兴趣区域和关键实体词之间的相似性。为了执行零镜头语义分割,我们重用了这一功能。
如图5(中)所示,对于语义分割数据集,我们通过提示将类名转换为句子。一个例子可以是“一张{class}的照片”。
首先,我们通过各自的编码器计算图像和文本特征。由于输入的句子每个都包含一个类名,所以我们设置MT=1。将uT表示为排序后的文本特征g0(xT)的第一个元素,用作查询图像补丁的文本特征。接下来,我们取uT来计算每个图像块特征[f(xT)]k的相似性得分,生成粗略分割掩模。
应用诸如上采样和DenseCRF之类的后处理操作来细化粗略掩模。此外,我们基于uT和VI计算类置信度得分,这与预训练中的机制相同。
组合分类掩码
我们的模型结合了置信类的二进制掩码来产生最终结果,如图5(右)所示。我们计算一个自适应阈值来选择有信心的对象类,而不是使用固定值。我们使用平均值(µ)和标准偏差前半类的相似性分数
高分类的掩码将覆盖得分较低类的掩码,并且未分配给任何对象类的区域被确定为背景类。

实验结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

### CLIP模型在半监督语义分割任务中的应用 CLIP (Contrastive Language-Image Pre-training)[^3] 是一种通过对比学习方法训练的多模态模型,它能够联合理解图像和文本数据。该模型的核心在于其预训练阶段利用了大量的互联网图片及其对应的描述性文字,从而学会了捕捉视觉概念与自然语言之间的关联。 在半监督语义分割领域中,CLIP 的主要优势体现在以下几个方面: #### 1. **跨模态特征表示** CLIP 提供了一个强大的通用特征空间,在这个空间里,图像和文本可以被映射到相同的高维向量形式。这种能力使得即使是在标注数据有限的情况下,也可以借助大量未标注的数据以及丰富的文本信息来增强模型的表现力[^4]。例如,对于某些类别缺乏足够的标记样本时,可以通过引入相关类别的描述性词语(如“草地”,“天空”),让网络更好地识别这些区域。 #### 2. **零样本泛化能力** 由于 CLIP 已经经过广泛的图文配对数据集上的训练,因此具备一定的零样本(zero-shot) 泛化性能。这意味着当面对新类别或者少见场景时,无需重新调整权重即可实现一定程度上的正确分类预测[^5]。这一特性非常适合应用于少样本(few-shot) 或者无标签(unlabeled) 数据驱动的任务当中。 #### 3. **结合原型学习(Prototype Learning)** 正如引用提到的内容所示[^2],部分工作已经探索了如何将 prototype-based 方法融入到小样本分割框架之中。而 CLIP 所产生的高质量嵌入(embedding),正好可以用作构建 prototypes 的基础材料之一。具体来说就是先依据各类别名称生成相应的 text embeddings;然后再把这些作为目标去寻找最接近它们像素级分布中心位置处所代表的实际物体轮廓边界线等信息。 #### 4. **弱监督信号补充** 除了直接提供更强硬约束条件外,还可以考虑把来自 CLIP 输出的概率图谱当作软指示器使用——即允许存在一定误差范围内的估计值参与到最终决策过程中来。这样做的好处是可以有效缓解完全依赖人工精心设计规则所带来的局限性和复杂度增加等问题的同时还保留住了较高的准确性水平[^6]。 以下是基于上述理论的一个简单代码示例展示如何加载并调用 clip 库完成基本操作: ```python import torch from PIL import Image import requests from torchvision.transforms import Compose, Resize, CenterCrop, ToTensor, Normalize from clip import load as clip_load device = "cuda" if torch.cuda.is_available() else "cpu" model, preprocess = clip_load("ViT-B/32", device=device) image_url = 'https://upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Deep_learning.svg/800px-Deep_learning.svg.png' image = Image.open(requests.get(image_url, stream=True).raw) text_descriptions = ["a diagram of deep learning architecture"] # Prepare the inputs image_input = preprocess(image).unsqueeze(0).to(device) text_tokens = clip.tokenize([desc for desc in text_descriptions]).to(device) with torch.no_grad(): image_features = model.encode_image(image_input) text_features = model.encode_text(text_tokens) similarity_scores = (100 * image_features @ text_features.T).softmax(dim=-1) print(similarity_scores.cpu().numpy()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小杨小杨1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值