CAT-Seg: Cost Aggregation for Open-Vocabulary Semantic Segmentation(CAT-Seg:用于开放词汇语义分割的成本聚合)


代码链接
论文链接

Abstract

现有的开放词汇语义分割研究利用了如CLIP这样的大规模视觉语言模型,以借助它们在开放词汇识别方面的出色能力。然而,如何将这些从图像级监督学习到的能力转移到像素级的分割任务,并在推断时处理任意未见过的类别,使得这一任务变得具有挑战性。为了解决这些问题,我们旨在通过利用类别之间的关系信息和视觉语义的聚合,以及将CLIP表示适应到像素级任务,来关注图像中的对象与给定类别之间的关联。然而,我们观察到直接优化CLIP嵌入可能会损害其开放词汇的能力。在这方面,我们提出了一种替代方法来优化图像-文本相似度映射,即成本图,使用一种新颖的基于成本聚合的方法。我们的框架,即CATSeg,在所有基准测试中都实现了最先进的性能。我们提供了广泛的消融研究来验证我们的选择。

1. Introduction

开放词汇语义分割的目标是标记图像中的每个像素,将它们与文本描述的类别相对应,包括那些在训练过程中未出现过的类别。这是一个挑战,因为它需要模型理解并应对任意类别的文本描述。

为了应对这一挑战,先前的方法尝试利用大规模预训练的视觉-语言模型(如CLIP和ALIGN)来借助其在图像与文本配对上训练的强大开放词汇识别能力。然而,将这些模型的知识从图像级别监督转移到像素级预测是非常具有挑战性的,因为这两者在粒度上有很大的差异。

为了解决这一问题,文中提出了一个新的方法,即利用成本体(通常定义为余弦相似度图)来进行优化,而不是直接优化模型嵌入,因为直接优化可能会损害模型的开放词汇能力。基于这一方法,文章介绍了一个名为CAT-Seg的网络,该网络利用图像和文本嵌入来构造成本体积,并通过Transformer模块进行聚合,分解为空间聚合类别聚合两个步骤,并引入嵌入引导来提高聚合效果。最后,使用解码器处理聚合后的成本体积,捕捉图像的细节信息。CAT-Seg还采用了一种高效的训练方法,即仅微调Transformer内的注意力层,从而实现高效且有效的模型训练。

成本体:在开放词汇语义分割的中,成本体积通常定义为余弦相似度图。“成本”指的是图像中每个像素或区域与给定文本描述匹配程度的一个量度。在生成成本体积时,对于图像中的每个像素点,都会计算其特征与每个可能类别描述特征的余弦相似度,并形成一个相似度分数的集合。这个集合对应于一个三维体积,其中的每个"层"代表了与一个特定文本描述的相似度分布。优化成本体积实际上就是在优化图像像素与文本描述之间的相似度匹配。

空间聚合: (1)目的:考虑图像内的空间信息,也就是像素与像素之间的位置关系。通过空间聚合,网络可以理解对象的形状、大小和它们在图像中的位置,这些都是对于正确分割图像至关重要的特征。(2)实现方式:在Transformer模块中,这通常通过自注意力机制来实现。自注意力机制能够让模型学习到像素与其它所有像素之间的关系,从而捕捉到图像的全局上下文信息。

类别聚合: (1)目的:专注于不同类别之间的关系。在开放词汇语义分割中,理解不同类别之间的关系对于正确分类未见类别尤为重要。(2)实现方式:通过注意力机制,网络能够学习如何将一个像素与一个特定类别相关联,即便是对于训练过程中未出现过的类别。

嵌入引导: 这是一种辅助技术,通过使用文本描述的嵌入来指导图像嵌入的聚合过程。这种引导确保了图像中每个区域都能与合适的文本描述相匹配,这对于分辨和识别各种类别尤其是新颖或未知类别至关重要。
在这里插入图片描述
图1展示了开放词汇语义分割任务中的一种方法。该方法提出使用来自CLIP模型的密集图像和文本嵌入来计算匹配成本,并通过成本聚合来改进预测结果,最终在所有基准测试中实现了最先进的性能。

图中的流程可以分为以下几个步骤:

图像和文本的编码:首先,使用CLIP模型的图像编码器(CLIP Image Enc.)和文本编码器(CLIP Text Enc.)分别处理输入的图像和对应的文本描述(如“A photo of a cat”)。图像编码器生成图像的特征表示,而文本编码器生成文本的特征表示。

匹配成本的计算:接下来,将图像的每个像素或区域的特征表示与文本的特征表示进行比较,计算出一个匹配成本。匹配成本指的是图像的某个区域与文本描述匹配的程度,成本越低表示匹配越好。

成本聚合前:在成本聚合之前,图像中的每个像素或区域被赋予了一个颜色编码(即图像上覆盖着的彩色轮廓),这些颜色编码代表了该像素或区域与特定文本描述匹配的成本。换句话说,这种颜色编码的分布图直观地展示了在聚合操作之前,每个像素与文本描述的匹配程度。

成本聚合:通过聚合算法,将匹配成本在空间上进行聚合,以考虑图像中的区域上下文关系和整体结构。这一步的目的是改进匹配成本的空间分布,使模型能够更加准确地理解图像内容与文本描述之间的关系。

预测:最后,利用经过聚合的匹配成本来进行像素级别的分类预测。在这个例子中,预测的结果是识别出图像中的猫,并正确地标注其区域。
在这里插入图片描述图2显示了特征聚合和成本聚合两种方法的比较。

为了验证所提框架的有效性,考虑了两种方法:通过特征聚合直接优化CLIP嵌入和通过成本聚合间接优化

蓝色柱子代表在特征聚合的情况下冻结CLIP图像编码器的结果,紫色柱子代表对CLIP图像编码器进行微调的结果。雪花图标代表冻结编码器,而火焰图标代表微调编码器。左侧的图表(a)展示了已见类别的mIoU得分,右侧的图表(b)展示了未见类别的mIoU得分。图示中可以清晰看出,成本聚合在处理未见类别时的优势。

图中的定性结果(c)通过图像展示了特征聚合(III)和成本聚合(IV)的视觉对比。从图像中可以看出,成本聚合能够更准确地分割图像中的对象,特别是那些在训练数据中未见过的类别。例如,成本聚合能够正确标记出‘birdcage’,而特征聚合则没有成功。这表明成本聚合方法在理解和处理未见类别上具有更好的效果。

2. Related Work

开放词汇语义分割:
传统的开放词汇语义分割方法试图学习视觉嵌入,使其与预定义的文本嵌入对齐。但这些方法受到领域差异和有限词汇的制约。
为了解决这些限制,一些研究利用了CLIP模型的能力来学习与文本嵌入对齐的像素级视觉嵌入,如LSeg;其他方法如OpenSeg,则通过识别图像中的局部区域,并将这些区域与文本嵌入关联起来。
更进一步,有研究通过两阶段框架进行类别不可知区域提议的学习,并将其与CLIP结合用于最终预测,如ZegFormer和ZSseg。另外,有研究如OVSeg通过收集区域-文本对来微调CLIP编码器以更好地识别这些区域。
有一项显著的工作,MaskCLIP,尝试直接从CLIP获取可用于分割的像素级嵌入。但他们发现,传统的微调方法会妨碍CLIP的开放词汇能力,因此他们提出了一种冻结CLIP编码器,使用非学习方法来降低噪声的策略。

成本聚合:
成本聚合是一种减少匹配过程中错误和不一致性影响的技术,它在建立视觉上或语义上相似图像间对应关系的过程中广受欢迎。匹配成本通常是在图像对的密集特征之间构建的,而余弦相似度是常用的度量方法。
在成本聚合的文献中,许多研究提出了成本聚合模块,并强调了其泛化能力。作者利用CLIP中图像和文本嵌入之间构建的成本体积,并通过成本聚合来实现精确的分割。

3. Methodology

3.1. Motivation and Overview

CLIP通过图像和文本的联合嵌入学习视觉和语言的通用表示。CAT-Seg模型通过结合CLIP的图像和文本嵌入,并通过微调图像编码器来进一步增强这些嵌入的聚合。微调是必要的,因为在将大模型的知识转移到具体任务时,常常存在挑战,例如图像级监督和像素级预测之间的不匹配,以及通过直接优化特征嵌入可能导致的灾难性遗忘。

CAT-Seg模型的一个关键创新是使用由CLIP的密集图像嵌入和文本嵌入派生的成本体积,这种方法在作者的实验中被证明是有效的。并且提出了一个聚合模块,它融合了空间和类别聚合,来有效地捕获输入之间的关系信息,并确保文本描述与图像中的对象之间准确匹配。这样,模型就能够减少匹配过程中的错误和不一致。
在这里插入图片描述
图3展示了成本体的可视化效果。

(a)和(c)展示的是“猫”和“吉他”这两个类别的原始匹配成本,也就是在进行任何处理之前,CLIP模型计算出的每个像素与特定类别描述相匹配的初步估计值。这些初步估计值通常包含较多噪声,不同区域的颜色差异表示匹配成本的大小,颜色越温暖表示匹配成本越低,即匹配的可能性越高。

(b)和(d)则分别展示了对应类别的聚合匹配成本。经过成本聚合框架处理后,成本体积变得更加清晰和集中,边界更为明确,从而可以更准确地突出图像中与文本描述相匹配的区域。聚合后的成本图表现出更好的区分度,颜色对比更加明显,显示出与目标类别更相关的区域。

总的来说,图3说明了成本聚合方法如何改善原始的匹配成本,使模型能更清晰地识别和分割图像中的目标类别。通过将成本与输入图像叠加,我们可以直观地看到成本聚合前后的差异,验证了成本聚合在提高开放词汇语义分割准确性中的有效性。

3.2. Cost Computation and Embedding

作者描述了如何利用CLIP(一种大型预训练模型,学习了图像和文本之间的关联)来获取密集的特征,并计算成本体(cost volume)。

首先,修改了CLIP图像编码器的最后一层(微调编码器),以提取图像的密集特征。这里使用的是修改后的CLIP图像编码器ΦV(⋅) 和固定不变的文本编码器ΦL(⋅)。对于给定的图像 I 和文本描述 T ,分别提取密集图像特征DV = ΦV(I) 和文本特征DL = ΦL(T),

接着,对于图像特征DV(i) 和文本特征 DL(n),其中i表示特征嵌入的2D空间位置,n表示类别索引,使用余弦相似度来计算成本体C∈R(H×W)×NC。成本体的每个元素C(i,n) 通过以下公式计算得到:在这里插入图片描述这里的 ⋅ 表示点积,而 ∥⋅∥ 表示向量的范数,或者说是向量的长度。

为了更好地处理高维特征空间中的成本,作者将成本体送入一个单卷积层,这个层独立处理每个成本切片C(:, n)∈R(H×W)×1,以获得初始的成本体嵌入F∈R (H×W)×NC×dF,其中dF是成本嵌入的维度。

成本体: 成本体C(i,n)表示图像中某个像素位置i和某个类别 n之间的相似度。
成本切片的选择: 在处理成本体时,关注于特定的类别n。因此,“切下”了与这个类别相关的所有成本值,形成了一个“切片”。
成本切片的维度: 这个切片是一个二维数组,其尺寸为H×W,即图像的高度和宽度。它包含了图像中每个像素位置相对于选择的类别n的成本值。
独立处理: 模型独立处理每个成本切片,而不是一次性处理整个成本体。通过卷积层处理每个切片,可以获得每个类别的更丰富的特征表示。
成本体嵌入: 处理后,我们得到了一个高维的特征表示,这就是所谓的“成本体嵌入”F。这个嵌入体现了图像中每个像素与每个类别之间相似度的细粒度信息。

通过这个方法,模型能够为图像中的每个像素和各个可能的类别之间计算一个成本,这个成本反映了它们之间的相似度。这些成本随后被用于指导模型对图像进行分割,把每个像素分配到合适的类别中。

def correlation(self, img_feats, text_feats):
        img_feats = F.normalize(img_feats, dim=1) # B C H W
        text_feats = F.normalize(text_feats, dim=-1) # B T P C
        corr = torch.einsum('bchw, btpc -> bpthw', img_feats, text_feats)
        return corr

def corr_embed(self, x):
        B = x.shape[0]
        corr_embed = rearrange(x, 'B P T H W -> (B T) P H W')
        corr_embed = self.conv1(corr_embed)
        corr_embed = rearrange(corr_embed, '(B T) C H W -> B C T H W', B=B)
        return corr_embed
        corr = self.correlation(img_feats, text_feats)
        if self.pad_len > 0 and text_feats.size(1) > self.pad_len:
            avg = corr.permute(0, 2, 1, 3, 4).flatten(-3).max(dim=-1)[0] 
            classes = avg.topk(self.pad_len, dim=-1, sorted=False)[1]
            th_text = F.normalize(text_feats, dim=-1)
            th_text = torch.gather(th_text, dim=1, index=classes[..., None, None].expand(-1, -1, th_text.size(-2), th_text.size(-1)))
            orig_clases = text_feats.size(1)
            img_feats = F.normalize(img_feats, dim=1) # B C H W
            text_feats = th_text
            corr = torch.einsum('bchw, btpc -> bpthw', img_feats, th_text)
        #corr = self.feature_map(img_feats, text_feats)
        corr_embed = self.corr_embed(corr)

在这里插入图片描述图4显示的是CAT-Seg网络的整体架构。这个网络包括成本计算、聚合模块(包括空间聚合和类间聚合)以及上采样解码器。

密集图像嵌入(Dense Image Embeddings): 网络首先对输入图像生成密集嵌入表示。
文本嵌入(Text Embeddings): 同时,输入的文本描述(例如图中的“照片中的猫”)也会被转换成嵌入表示。
成本计算(Cost Computation)&成本体嵌入(Cost Volume Embedding):该过程涉及将图像编码器产生的密集图像嵌入和文本编码器产生的文本嵌入结合起来。具体来说,对于图像中的每个像素位置(在图中用H和W维度表示),都会计算其与每个候选类别文本描述T(n)的相似度。这一计算通过余弦相似性完成,生成一个成本体。
空间聚合(Spatial Aggregation): 紧接着成本计算的是空间聚合,它处理成本体的空间维度。这意味着模型将考虑图像中像素的空间分布,并聚合相邻像素的信息,以更好地理解图像区域和文本描述之间的关系。
类别聚合(Class Aggregation): 这个阶段聚合了不同类别之间的信息。它的目的是在成本体中进一步区分不同的类别,并帮助模型理解不同类别文本描述之间的关系。
上采样解码器(Upsampling Decoder): 上采样解码器被用来从聚合的成本体中恢复图像的原始分辨率,并生成最终的分割预测,即预测每个像素属于哪个类别。

整个网络的目标可能是结合图像内容和相关的文本描述来执行图像分割任务,这可能是一种半监督学习或弱监督学习方法。通过这种结构,网络能够更好地理解和分割出图像中与文本描述相符的区域。

3.3. Cost Aggregation

作者使用构造的成本体嵌入作为输入,喂给聚合模块。这里的“聚合模块”是用来进一步处理成本体嵌入的,其目的是提炼和合并特征,以增强模型对图像中不同类别的判别能力。通过这样的处理,模型不仅能够对训练过程中见过的类别进行准确分割,而且还能更好地处理训练时未见过的类别,从而在新领域中具有更好的表现。简而言之,这个聚合过程是为了使模型能够更好地泛化到新的、不熟悉的数据上,从而提高其在开放词汇量语义分割任务中的性能。

在成本聚合模块内部,设计了两种不同的聚合策略:空间聚合类别聚合。这两种策略是为了建模像素与像素之间以及类别与类别之间的相互关系,同时考虑到每种模式的独特特性,例如图像中的空间平滑性或类别之间的排列不变性。具体来说,首先执行空间聚合然后进行类别聚合,这两种聚合交替进行NB次。此外,聚合过程还辅以嵌入指导,提供来自两种模式的上下文信息。

class AggregatorLayer(nn.Module):
    def __init__(self, hidden_dim=64, text_guidance_dim=512, appearance_guidance=512, nheads=4, input_resolution=(20, 20), pooling_size=(5, 5), window_size=(10, 10), attention_type='linear', pad_len=256) -> None:
        super().__init__()
        self.swin_block = SwinTransformerBlockWrapper(hidden_dim, appearance_guidance, input_resolution, nheads, window_size)
        self.attention = ClassTransformerLayer(hidden_dim, text_guidance_dim, nheads=nheads, attention_type=attention_type, pooling_size=pooling_size, pad_len=pad_len)

    def forward(self, x, appearance_guidance, text_guidance):
        """
        Arguments:
            x: B C T H W
        """
        x = self.swin_block(x, appearance_guidance)
        x = self.attention(x, text_guidance)
        return x
        self.layers = nn.ModuleList([
            AggregatorLayer(
                hidden_dim=hidden_dim, text_guidance_dim=text_guidance_proj_dim, appearance_guidance=appearance_guidance_proj_dim, 
                nheads=nheads, input_resolution=feature_resolution, pooling_size=pooling_size, window_size=window_size, attention_type=attention_type, pad_len=pad_len,
            ) for _ in range(num_layers)
        ])
        for layer in self.layers:
            corr_embed = layer(corr_embed, projected_guidance, projected_text_guidance)

Spatial aggregation

在CAT-Seg中,空间聚合用来分析基于像素级相似度的图像和文本嵌入之间的空间关系。为了实现这一点,研究者选择了Transformer模型而不是传统的CNN模型,因为Transformer更适合处理输入令牌,且具有全局或半全局的接收字段,这对于学习所有令牌之间的关系更有利。

具体来说,研究者在模型中使用了Swin Transformer,因为它在计算效率上表现更优。空间聚合的过程定义为函数在这里插入图片描述其中F(:,n)表示针对第n个类别的所有空间位置成本信息的集合,这个集合在维度(H×W)×dF上,dF被视为通道维度,Tsa(⋅) 表示用于空间聚合的两个连续的Swin Transformer块。空间聚合由两个连续的Swin Transformer块组成,第一个块在局部窗口内进行自注意力计算,而第二个块则在这些局部窗口进行位移后执行自注意力操作。注意力计算在每个类别内部分别进行。直观上,对每个类别进行空间聚合的目的是定位那些将指导模型产生准确分割输出的特征。

局部窗口内的自注意力(第一个Swin Transformer块): 这个操作关注于小范围内的特征。在局部窗口内,模型计算特征之间的注意力得分,这样可以帮助模型理解图像的局部上下文信息。局部窗口的自注意力机制确保了模型可以关注到近邻像素之间的细节和相互作用。
位移窗口内的自注意力(第二个Swin Transformer块): 在第一个块处理后,第二个块采用位移窗口来计算自注意力。这个位移窗口的概念是将注意力窗口稍微移动,这样不仅能够捕捉到局部区域内的信息,还能够连接相邻窗口间的信息,增加了模型捕捉特征的连续性和完整性。
类别内部的注意力计算: 这两个块的操作不是全局进行,而是在每个类别内部独立计算。这意味着对于图像中的每个类别,模型都会独立地进行自注意力计算,从而允许模型学习类别特定的空间分布特征。
定位指导特征: 通过上述两个步骤,模型能够为每个类别定位重要的特征,这些特征对于识别该类别的图像区域是必要的。换句话说,这个过程帮助模型确定了哪些特征是预测每个类别时最关键的,从而提高分割的准确性。
在实践中,这两个Swin Transformer块交替执行,先执行一个原始窗口的块,然后执行一个位移窗口的块,如此交替下去。这种交替可以看作是一种多尺度的处理策略,允许模型在局部层面学习细节,在更高层次上整合这些信息以捕捉更广泛的上下文。

疑问:为什么要在每个类别内部分别进行注意力计算?
解答:在每个类别内部独立计算注意力的原因是为了捕捉类别特定的特征和模式。由于不同的类别可能在视觉外观、形状和空间分布上有很大的差异,单独处理每个类别可以提高模型对每个类别独有特征的敏感度,增强其区分不同类别的能力。这种方法有几个关键优势:(1)类别内一致性: 每个类别内部的像素往往在视觉特征上具有一定的一致性。单独计算可以帮助模型更好地学习这种内部一致性,而不是被其他类别的特征所干扰。(2)特征区分性: 不同类别之间可能存在显著的视觉差异。在类别内部单独进行注意力计算有助于模型区分这些差异,并为每个类别建立更区分性的特征表示。(3)细粒度学习: 独立处理允许模型细致地学习每个类别的细节,有助于改进模型在边界模糊或类别间有相似性时的表现。(4)复杂背景处理: 在背景复杂或类别边界不明显的情况下,类别内部的注意力计算可以帮助模型准确识别和分割对象。(5)鲁棒性: 对于训练过程中未见过的类别,这种方法可以提高模型的泛化能力,因为它鼓励模型在类别特征上做出更具体的响应,而不是依赖于可能不存在的跨类别特征。
通过类别内部分别计算注意力,模型可以生成更加精细化的特征地图,这些地图对于每个类别来说都是独特和具体的,最终可以提高分割的准确性。

class SwinTransformerBlockWrapper(nn.Module):
    def __init__(self, dim, appearance_guidance_dim, input_resolution, nheads=4, window_size=5, pad_len=0):
        super().__init__()
        self.block_1 = SwinTransformerBlock(dim, appearance_guidance_dim, input_resolution, num_heads=nheads, head_dim=None, window_size=window_size, shift_size=0)
        self.block_2 = SwinTransformerBlock(dim, appearance_guidance_dim, input_resolution, num_heads=nheads, head_dim=None, window_size=window_size, shift_size=window_size // 2)
        self.guidance_norm = nn.LayerNorm(appearance_guidance_dim) if appearance_guidance_dim > 0 else None

        self.pad_len = pad_len
        self.padding_tokens = nn.Parameter(torch.zeros(1, 1, dim)) if pad_len > 0 else None
        self.padding_guidance = nn.Parameter(torch.zeros(1, 1, appearance_guidance_dim)) if pad_len > 0 and appearance_guidance_dim > 0 else None
    
    def forward(self, x, appearance_guidance):
        """
        Arguments:
            x: B C T H W
            appearance_guidance: B C H W
        """
        B, C, T, H, W = x.shape
        
        x = rearrange(x, 'B C T H W -> (B T) (H W) C')
        if appearance_guidance is not None:
            appearance_guidance = self.guidance_norm(repeat(appearance_guidance, 'B C H W -> (B T) (H W) C', T=T))
        x = self.block_1(x, appearance_guidance)
        x = self.block_2(x, appearance_guidance)
        x = rearrange(x, '(B T) (H W) C -> B C T H W', B=B, T=T, H=H, W=W)
        return x

Class aggregation

类别聚合紧随空间聚合之后,旨在显式地捕捉不同类别之间的关系。但是,这项任务面临两个挑战:类别数量C的可变性和它们无序的输入排列。为了解决这些挑战,采用了没有位置嵌入的Transformer模型来进行聚合。这种方法使得模型能够处理任意长度的序列,并为模型提供了对输入的排列不变性。这一过程定义为在这里插入图片描述其中F′(i,:)是一个维度为NC×dF的矩阵,表示经过空间聚合后得到的第i个位置的所有类别的信息,Tca(⋅) 表示用于类别聚合的Transformer块。虽然在空间聚合中使用了Swin Transformer,但在类别聚合中则选择使用线性Transformer,因为在这个聚合过程中不需要考虑输入令牌的空间结构。此外,线性Transformer提供了与令牌数量成线性关系的计算复杂度,允许高效的计算。

class ClassTransformerLayer(nn.Module):
    def __init__(self, hidden_dim=64, guidance_dim=64, nheads=8, attention_type='linear', pooling_size=(4, 4), pad_len=256) -> None:
        super().__init__()
        self.pool = nn.AvgPool2d(pooling_size) if pooling_size is not None else nn.Identity()
        self.attention = AttentionLayer(hidden_dim, guidance_dim, nheads=nheads, attention_type=attention_type)
        self.MLP = nn.Sequential(
            nn.Linear(hidden_dim, hidden_dim * 4),
            nn.ReLU(),
            nn.Linear(hidden_dim * 4, hidden_dim)
        )

        self.norm1 = nn.LayerNorm(hidden_dim)
        self.norm2 = nn.LayerNorm(hidden_dim)

        self.pad_len = pad_len
        self.padding_tokens = nn.Parameter(torch.zeros(1, 1, hidden_dim)) if pad_len > 0 else None
        self.padding_guidance = nn.Parameter(torch.zeros(1, 1, guidance_dim)) if pad_len > 0 and guidance_dim > 0 else None
    
    def pool_features(self, x):
        """
        Intermediate pooling layer for computational efficiency.
        Arguments:
            x: B, C, T, H, W
        """
        B = x.size(0)
        x = rearrange(x, 'B C T H W -> (B T) C H W')
        x = self.pool(x)
        x = rearrange(x, '(B T) C H W -> B C T H W', B=B)
        return x

    def forward(self, x, guidance):
        """
        Arguments:
            x: B, C, T, H, W
            guidance: B, T, C
        """
        B, C, T, H, W = x.size()
        x_pool = self.pool_features(x)
        *_, H_pool, W_pool = x_pool.size()
        
        if self.padding_tokens is not None:
            orig_len = x.size(2)
            if orig_len < self.pad_len:
                # pad to pad_len
                padding_tokens = repeat(self.padding_tokens, '1 1 C -> B C T H W', B=B, T=self.pad_len - orig_len, H=H_pool, W=W_pool)
                x_pool = torch.cat([x_pool, padding_tokens], dim=2)

        x_pool = rearrange(x_pool, 'B C T H W -> (B H W) T C')
        if guidance is not None:
            if self.padding_guidance is not None:
                if orig_len < self.pad_len:
                    padding_guidance = repeat(self.padding_guidance, '1 1 C -> B T C', B=B, T=self.pad_len - orig_len)
                    guidance = torch.cat([guidance, padding_guidance], dim=1)
            guidance = repeat(guidance, 'B T C -> (B H W) T C', H=H_pool, W=W_pool)

        x_pool = x_pool + self.attention(self.norm1(x_pool), guidance) # Attention
        x_pool = x_pool + self.MLP(self.norm2(x_pool)) # MLP

        x_pool = rearrange(x_pool, '(B H W) T C -> (B T) C H W', H=H_pool, W=W_pool)
        x_pool = F.interpolate(x_pool, size=(H, W), mode='bilinear', align_corners=True)
        x_pool = rearrange(x_pool, '(B T) C H W -> B C T H W', B=B)

        if self.padding_tokens is not None:
            if orig_len < self.pad_len:
                x_pool = x_pool[:, :, :orig_len]

        x = x + x_pool # Residual
        return x

Embedding guidance

嵌入指导是为了增强成本聚合过程而额外利用的特征嵌入,提供输入的空间结构或上下文信息。直觉上,基于视觉或语义上相似的输入令牌(例如颜色或类别)具有相似匹配成本的假设,通过特征嵌入来指导聚合过程,这一做法受到了立体匹配文献中成本体过滤技术的启发。

具体而言,视觉嵌入EV和文本嵌入EL分别从额外的特征主干和CLIP文本编码器中提取,然后通过线性投影层进行映射,并与输入序列拼接。提取EV时,为了避免直接使用可能会阻碍泛化能力的CLIP图像编码器,采用了不同的方法。

因此,方程2和方程3被重新定义为:在这里插入图片描述其中[⋅]表示拼接操作,PV和PL表示线性投影层,EV∈R (H×W)×dE,EL∈RNC×dE,dE表示特征维度。值得注意的是,特征嵌入仅提供给查询(query)和键(key),因为这被发现对于嵌入指导来说已经足够。

        self.guidance_projection = nn.Sequential(
            nn.Conv2d(appearance_guidance_dim, appearance_guidance_proj_dim, kernel_size=3, stride=1, padding=1),
            nn.ReLU(),
        ) if appearance_guidance_dim > 0 else None
        
        self.text_guidance_projection = nn.Sequential(
            nn.Linear(text_guidance_dim, text_guidance_proj_dim),
            nn.ReLU(),
        ) if text_guidance_dim > 0 else None

self.q = nn.Linear(dim + appearance_guidance_dim, attn_dim, bias=qkv_bias)
self.k = nn.Linear(dim + appearance_guidance_dim, attn_dim, bias=qkv_bias)
self.v = nn.Linear(dim, attn_dim, bias=qkv_bias)

3.4. Upsampling Decoder

鉴于已聚合的成本体,旨在通过上采样生成捕捉细节的最终分割掩码。最简单的方法是使用手工设计的上采样器,比如双线性上采样,但提议在解码器中进一步聚合,使用轻量级的卷积层。此外,提供了来自特征主干的特征嵌入,这作为一个有效的指导,有助于过滤掉成本体中的噪声,并利用更高分辨率的空间结构来保持细节信息。

具体来说,利用在成本聚合的嵌入指导中已经提取出的多级特征嵌入。遵循[22]中提出的方法,对成本体进行双线性上采样,并将其与对应级别的特征图进行拼接,随后通过一个卷积层。重复这一过程 NU 次,生成一个高分辨率的输出,然后将其送入预测头进行最终的推断。

双线性上采样: 首先对成本体进行双线性上采样,以增加其分辨率。双线性上采样是一种简单而有效的方法,可以在不引入额外学习参数的情况下放大特征图。这一步骤是为了逐步恢复成本体的空间维度,从而接近原始图像的尺寸。
特征拼接: 将上采样后的成本体与对应级别的特征图进行拼接。这里的“对应级别的特征图”指的是在成本聚合的嵌入指导中提取的多级特征嵌入。通过这种拼接,模型能够结合成本体中的类别信息和特征嵌入中的空间结构信息,增强了模型在恢复图像细节时的能力。
卷积处理: 拼接后的特征经过卷积层的处理。卷积层可以进一步融合成本体和特征嵌入的信息,同时通过学习到的权重过滤噪声和不必要的信息,保留对分割任务有用的细节。
迭代执行: 上述过程被迭代执行 NU 次,每次迭代都进一步提高了特征图的分辨率,并且通过结合来自不同层级的特征嵌入来增强特征表示。这样做既可以逐步细化预测结果,也可以保持和恢复图像中的细节信息。
最终推断: 经过 NU 次迭代后,得到的高分辨率输出送入预测头进行最终的分类或分割推断,生成最终的分割掩码。

通过这种方式,多级特征嵌入不仅提供了额外的上下文和结构信息,还增强了上采样过程中成本体的信息质量,有助于模型在生成高质量分割掩码时更好地恢复和保持细节。这种方法有效地结合了成本体的类别信息和特征嵌入中的空间信息,提高了分割的精度和细节的保留。

    def upsample(self, x):
        B = x.shape[0]
        corr_embed = rearrange(x, 'B C T H W -> (B T) C H W')
        corr_embed = F.interpolate(corr_embed, scale_factor=2, mode='bilinear', align_corners=True)
        corr_embed = rearrange(corr_embed, '(B T) C H W -> B C T H W', B=B)
        return corr_embed
    def conv_decoder(self, x, guidance):
        B = x.shape[0]
        corr_embed = rearrange(x, 'B C T H W -> (B T) C H W')
        corr_embed = self.decoder1(corr_embed, guidance[0])
        corr_embed = self.decoder2(corr_embed, guidance[1])
        corr_embed = self.head(corr_embed)
        corr_embed = rearrange(corr_embed, '(B T) () H W -> B T H W', B=B)
        return corr_embed
        self.decoder_guidance_projection = nn.ModuleList([
            nn.Sequential(
                nn.Conv2d(d, dp, kernel_size=3, stride=1, padding=1),
                nn.ReLU(),
            ) for d, dp in zip(decoder_guidance_dims, decoder_guidance_proj_dims)
        ]) if decoder_guidance_dims[0] > 0 else None

        self.decoder1 = Up(hidden_dim, decoder_dims[0], decoder_guidance_proj_dims[0])
        self.decoder2 = Up(decoder_dims[0], decoder_dims[1], decoder_guidance_proj_dims[1])
        self.head = nn.Conv2d(decoder_dims[1], 1, kernel_size=3, stride=1, padding=1)
class Up(nn.Module):
    """Upscaling then double conv"""

    def __init__(self, in_channels, out_channels, guidance_channels):
        super().__init__()

        self.up = nn.ConvTranspose2d(in_channels, in_channels - guidance_channels, kernel_size=2, stride=2)
        self.conv = DoubleConv(in_channels, out_channels)

    def forward(self, x, guidance=None):
        x = self.up(x)
        if guidance is not None:
            T = x.size(0) // guidance.size(0)
            guidance = repeat(guidance, "B C H W -> (B T) C H W", T=T)
            x = torch.cat([x, guidance], dim=1)
        return self.conv(x)

3.5. Efficient Fine-Tuning of CLIP

在训练过程中,以端到端的方式训练我们的模型,包括CLIP的图像编码器。然而,微调这个可能包含高达数亿参数的编码器在计算上可能非常昂贵且需要大量内存。此外,由于目标是有效地转移CLIP的开放词汇能力,性能也不应该受到损害。为此,冻结了编码器中的MLP层(也称为前馈网络FFNs),仅优化负责空间交互的层,如注意力层和位置嵌入,基于这样的洞见:调整这些层足以将图像级别的表示转移到像素级别。采用这种方法,在效率和性能上都实现了比完全微调更好的改进。

冻结MLP层:MLP层(多层感知器),在Transformer架构中通常被称为前馈网络(FFNs),主要负责在注意力机制处理后对特征进行非线性变换。在微调过程中冻结这些层意味着它们的权重在训练过程中保持不变。这一决策基于的理由是,这些层主要涉及模型内部的特征转换,而在任务转换——特别是从图像级表示到像素级表示的转换中——它们不是最关键的部分。
优化空间交互层:相比之下,注意力层和位置嵌入直接影响模型如何处理和理解图像中的空间关系。注意力层允许模型在全图范围内动态聚焦于重要的特征,而位置嵌入则提供了空间位置信息,这对于理解图像的空间布局至关重要。对这些层进行优化,可以使模型更有效地将CLIP的图像级表示调整为适用于像素级任务的表示。这种方法既保留了CLIP预训练模型的强大能力,又使得模型能够适应具体的视觉任务需求。
转移学习的效率和效果:通过这种策略,微调过程集中于最有可能提升像素级别分割性能的模型部分,从而实现了更高的计算效率和更好的任务特定性能。
这种方法的成功基于洞见:在视觉任务中,尤其是在需要精细分割的情况下,模型对空间信息的处理能力比对内部特征的非线性变换更为关键。

问题:为什么要冻结编码器中的MLP层,仅优化负责空间交互的层如注意力层和位置嵌入?
解答:MLP层的功能:(1)非线性变换:MLP层通过一系列的线性(全连接)层和非线性激活函数(如ReLU)对输入进行变换,增加了模型处理复杂特征的能力。(2)增强表示能力:虽然自注意力机制能够捕捉全局依赖关系,但MLP层的非线性变换为模型提供了捕捉更复杂模式的能力,这对于提升模型的整体性能非常重要。(3)层内独立处理:在Transformer中,每个位置的特征通过FFNs都是独立处理的,这增加了模型的并行处理能力。
冻结MLP层的影响:(1)保持预训练知识:在微调预训练模型时,冻结MLP层意味着这部分的权重不会更新,保留了模型在大规模数据上预训练获得的通用知识。这对于保持模型的泛化能力非常有帮助,尤其是当新任务的数据量相对较小时。(2)专注于微调关键部件:通过冻结MLP层,微调过程可以更专注于调整模型中对于新任务更为关键的部分,如自注意力层和位置嵌入。这些组件直接关联到模型对空间关系的理解,对于许多视觉任务来说是调整重点。(3)计算资源优化:不更新MLP层的权重可以减少微调过程中的计算量和内存需求,使得微调变得更加高效。这对于资源受限的情况尤其重要。(4)防止过拟合:微调时冻结一部分模型权重可以减少模型的自由参数数量,有助于防止在数据量不足时过拟合

注意力层的作用:(1)捕捉全局依赖:注意力层使模型能够计算图像内各个位置之间的关系,无论这些位置在空间上距离有多远。这种能力让模型能够理解图像中远距离元素之间的关系,从而捕捉全局上下文。(2)动态关注:通过自注意力机制,模型可以动态地聚焦于对当前任务最重要的特征,无论这些特征位于图像的哪个部分。这种动态关注机制有助于模型在处理复杂图像时,提取出最关键的信息。
位置嵌入的作用:(1)提供空间信息:位置嵌入通过为模型输入的每个位置添加唯一的编码,使得模型能够理解元素在图像中的具体位置。这对于处理图像非常重要,因为许多视觉任务的理解和决策依赖于对象的空间布局和相对位置。(2)增强位置敏感性:在图像处理任务中,尤其是需要精确像素级输出的任务(如语义分割),模型必须对图像中物体的位置高度敏感。位置嵌入确保模型能够考虑到元素的空间关系,从而在像素级别上做出准确预测。
优化的重要性:(1)从图像级到像素级的转换:在像素级任务中,需要模型不仅理解整个图像的场景,还要精确到每个像素的分类。注意力层和位置嵌入的优化直接针对提高模型在这一层面上的表现——即通过全局依赖空间信息的处理,使模型能够对每个像素的上下文和位置进行精细分析。(2)适应性强化:通过专门优化这些层,可以使预训练的CLIP模型更好地适应新的像素级任务。这种优化策略确保了模型不仅保留了从大规模数据集学习到的丰富视觉知识,而且能够有效地调整其空间处理能力,以应对细节更为精细的像素级分析。

        self.clip_finetune = clip_finetune
        for name, params in self.sem_seg_head.predictor.clip_model.named_parameters():
            if "transformer" in name:
                if clip_finetune == "prompt":
                    params.requires_grad = True if "prompt" in name else False
                elif clip_finetune == "attention":
                    if "attn" in name:
                        # QV fine-tuning for attention blocks
                        params.requires_grad = True if "q_proj" in name or "v_proj" in name else False
                    elif "position" in name:
                        params.requires_grad = True
                    else:
                        params.requires_grad = False
                elif clip_finetune == "full":
                    params.requires_grad = True
                else:
                    params.requires_grad = False
            else:
                params.requires_grad = False

4. Experiments

4.1. Experimental Setup

详细介绍了实验的设置,包括使用的数据集、评估指标和实施细节:

数据集和评估指标:
训练数据集为COCO-Stuff,含有118k密集标注图像,覆盖171个类别。
评估在ADE20K、PASCAL VOC和PASCAL-Context数据集上进行,涵盖从常见到大量类别的不同场景。
使用平均交并比(mean Intersection over Union, mIoU)作为所有实验的评估指标。

实施细节:
训练过程中,CLIP图像编码器和成本聚合模块采用每像素二元交叉熵损失,CLIP文本编码器在所有设置中被冻结。
特征嵌入从预训练的ResNet-101或Swin-B获得,依据模型使用的CLIP变体不同而不同。
设定了模型参数,如dF=128,聚合次数NB=2和上采样次数NU=2。
使用PyTorch和Detectron2框架实现,采用AdamW优化器进行训练,设定了具体的学习率和权重衰减参数。
实验在NVIDIA RTX 3090 GPU或NVIDIA A100 GPU上运行,根据使用的CLIP编码器变体不同而使用不同的硬件配置。
所有模型均训练80k次迭代,以ViT-L为例,大约需要8小时。

4.2. Main Results

主要结果被详细呈现,展示了所提出方法与其他竞争方法的定量比较。为了公平比较,报告中注明了所使用的视觉-语言模型(VLM)、特征主干和训练数据集的类型,以及是否使用了额外的数据集。结果显示,无论是使用ResNet-101作为特征主干和ViT-B作为视觉-语言模型,还是使用Swin-B作为特征主干和ViT-L作为视觉-语言模型的方法,本研究的方法在多个数据集上均显著超过了所有其他竞争者。特别地,即使在使用额外数据集进行性能提升的情况下,本研究方法也展现出了优越的性能。此外,当选择将视觉-语言模型(VLM)扩展到更大的变体时,性能得到了进一步的提升。对于在LAION-2B上训练的CLIP变体,如ViT-H和ViT-G,本方法同样实现了性能的显著增益。这些结果验证了采用成本聚合方法来从大规模视觉-语言模型转移知识的有效性。此外,还展示了PASCAL-Context 459类别的定性结果,与当前最先进方法相比,展现了所提方法的有效性。
在这里插入图片描述表1:定量评估。表现最佳的结果以粗体呈现,第二好的结果则用下划线标出。相对于第二好方法的改进在表中以绿色突出显示。平均交并比(mIoU)被采用为评估指标。†:重新实现以全COCO-Stuff数据集[3]进行训练。*: 在LAION-2B数据集[47]上训练的模型,该数据集在文献[9]中介绍。

在这个表格中,对不同方法进行了比较,包括视觉-语言模型(VLM)、特征主干、训练数据集,以及是否使用了额外数据集。对于几个不同的数据集(如ADE20K的A-847和PC-459,以及PASCAL-Context的A-150和PC-59)和任务(如PASCAL VOC的PAS-20和PAS-20b),呈现了各方法的mIoU评分。

本研究中提出的CAT-Seg方法在多个基准测试中都取得了最佳性能,其在ADE20K的A-847和PC-459以及PASCAL VOC的PAS-20和PAS-20b上的提升分别为+1.3%,+6.5%,+2.4%和+12.8%,这些提升用绿色高亮显示。这表明CAT-Seg方法在这些任务上相比于其他方法有显著的改进。此外,还有两种基于LAION-2B数据集训练的CLIP模型变体,ViT-H和ViT-G,分别取得了+7.7%和+9.0%的提升,证明了在更大的数据集上训练可以带来性能的进一步增益。在这里插入图片描述图6展示了在PASCAL-Context具有459个类别的定性结果。与两阶段方法[33]相比,其中图像的每个区域使用CLIP独立分类,CAT-Seg模型在捕获图像上下文方面表现出色,因为CLIP图像编码器可以整体处理图像,从而允许CLIP更好地捕获对象之间的关系和上下文信息。

(a) 输入:原始图像。
(b) ZegFormer [14]:一个基于CLIP的语义分割方法。
© ZSSeg [56]:另一种基于CLIP进行零样本学习的语义分割方法。
(d) OVSeg [33]:使用CLIP进行两阶段处理的语义分割方法。
(e) CAT-Seg(我们的):本研究提出的方法,展示了在捕获场景的语义上下文和关系方面的优势。
(f) Ground-truth:真实的标注数据,作为参考标准。

从视觉结果可以看出,CAT-Seg在捕捉复杂场景的细节和上下文关系方面有显著优势,其结果更接近真实的标注数据。

4.3. Analysis and Ablation Study

进行了一系列分析和消融研究,以验证所提出方法的设计选择。这些研究涉及不同组件的效果、不同微调方法的比较、特征主干的选择、模型缩放能力以及在不同数据集上的训练表现。

关键发现包括:(1)组件分析:通过定量结果展示了架构中主要组件的有效性。基线模型分别仅使用特征嵌入和成本体进行上采样解码。随后,逐步添加所提出的组件,包括空间和类别聚合,以及嵌入指导,证明了分解聚合过程的方法的有效性。(2)不同微调方法的比较:对比了不微调、采用VPT、完整网络微调以及所提方法的效果。所提方法不仅性能最佳,而且在内存和训练时间上也优于完整微调,凸显了所提方法的效率和效果。(3)特征主干的选择:对比了使用CLIP图像编码器与Swin-B作为特征主干的性能。结果表明,使用单独的网络(如Swin-B)可以获得最佳性能,这与直接优化CLIP图像嵌入可能损害其开放词汇能力的观察一致。(4)缩放比较:检验了方法的缩放属性,与其他最新方法进行比较。结果显示,所提框架随着模型容量的增加显示出明显的性能提升,而竞争者性能增益边际或甚至下降。(5)在不同数据集上的训练:检查了方法在更小规模数据集上的泛化能力。尽管性能有所下降,但所提方法显著优于其他竞争者,突出了其强大的泛化能力。(6)推理速度比较:展示了不同CLIP ViT变体的运行时间比较,并与最近的两阶段框架进行了对比。所提方法通常运行得更快,尤其是在模型尺寸增大时,进一步受益于快速推理时间。
在这里插入图片描述
表2:CAT-Seg的消融研究。这个表展示了CAT-Seg模型中不同组件对模型性能的影响。各列代表了在不同数据集上,使用各种组件配置时模型的平均交并比(mIoU)得分。

(I) 特征聚合(Feature Agg.): 只使用基础特征聚合技术的模型性能。
(II) 成本聚合(Cost Agg.): 只使用成本聚合技术的模型性能。
(III) (II) + Transformer: 在成本聚合的基础上加入Transformer模型的性能。
(IV) (II) + 空间聚合(Spatial agg.): 在成本聚合的基础上加入空间聚合技术的性能。
(V) (IV) + 类别间聚合(Inter-class agg.): 在空间聚合基础上进一步加入类别间聚合技术的性能。
(VI) (V) + 嵌入指导(Embedding guidance): 在类别间聚合的基础上,进一步加入嵌入指导技术的性能。

从表格中可以看到,随着额外组件的逐步引入,模型的性能在不同数据集上都有所提高。尤其是当加入了嵌入指导技术后,模型在大多数数据集上都表现出了显著的性能提升。这些结果突出了每个组件在提高模型准确性中的作用,以及它们相结合能够显著增强模型的语义分割能力。
在这里插入图片描述
表3:针对CLIP图像编码器微调方法的消融研究。另外注明了CLIP的可学习参数数量以及训练过程中的内存消耗。CAT-Seg方法不仅性能优于完全微调,而且还需要更小的计算资源。F.T.: Fine-Tune(微调)。

(I) 冻结(Freeze):不对CLIP图像编码器进行任何微调,使用预训练的参数,不增加额外参数。
(II) VPT [27]:使用视觉预训练(Visual Prompt Tuning)方法,这是一种针对视觉模型的调整策略。
(III) 全微调(Full F.T.):对CLIP图像编码器的所有层进行微调。
(IV) 我们的方法(Ours):只对CLIP图像编码器中的特定层进行微调。

从表中可以看出,CAT-Seg方法在多个基准数据集上达到了最好的性能,并且相较于完全微调,需要的参数数量少,内存消耗也低。这表明我们的微调策略在提升模型性能的同时,也提高了计算效率。这些结果强调了选择性微调关键组件在提高CLIP图像编码器性能和减少资源需求中的有效性。
在这里插入图片描述
表4:关于特征主干的消融研究。所有方法均使用了CLIP搭配ViT-L模型。†:在成本计算中应用了停止梯度(stop-gradient)操作。

第一行“CLIP image enc. [44]”表示使用了CLIP图像编码器的模型在不同数据集上的性能。
第二行“Swin-B [35]”表示使用了Swin-B模型作为特征主干在相同数据集上的性能。
第三行“CLIP image enc. [44] †”表示在CLIP图像编码器基础上应用了停止梯度操作的模型性能。

从表中的mIoU分数可以看出,使用CLIP图像编码器时模型在各数据集上的表现一般,但在应用了停止梯度操作后,性能有所下降。这说明,直接优化CLIP图像编码器可能会影响模型捕捉开放词汇的能力,而通过成本计算应用停止梯度操作可以有效避免这种情况。相比之下,使用Swin-B作为特征主干可以提供更好的性能,表明了选择合适的特征主干对于模型表现的重要性。这种趋势与图2中的观察结果一致,即优化CLIP图像编码器需要小心处理,以防止性能下降。
在这里插入图片描述
图5:运行时间比较。(a) 不同微调选择的训练时间比较。(b) 与文献[14]中的推理时间比较。F.T.:Fine-Tuning(微调)。

(a)图显示了不同微调方法的训练时间对比:
Freeze:不进行微调。
VPT:采用视觉提示调整(Visual Prompt Tuning)方法。
Full F.T.:完全微调整个网络。
Ours:我们的微调方法。
从图中可以看出,不进行微调的训练时间最短。完全微调(Full F.T.)的方法训练时间较长,而采用VPT方法时训练时间有所增加,但不如完全微调显著。我们的方法在训练时间上介于不微调和完全微调之间,显示了较好的效率。

(b)图显示了不同CLIP模型变体的推理时间对比,包括ViT-B、ViT-L、ViT-H和ViT-G。对比了CAT-Seg方法和另一种方法ZegFormer:
ViT-B、ViT-L、ViT-H、ViT-G:随着模型大小的增加,推理时间逐步上升。
从图中可以看到,CAT-Seg在所有模型变体上的推理时间都较短,尤其是在较大的模型(如ViT-H和ViT-G)上,与ZegFormer相比有明显的时间优势。这表明CAT-Seg方法在保持性能的同时,推理效率也较高。这一点对于实际应用中的模型部署非常重要。
在这里插入图片描述
表5:可扩展性比较。*: 模型在LAION-2B[47]数据集上训练,该数据集在文献[9]中介绍。这个表格展示了使用不同CLIP变体的模型在可扩展性方面的比较,包括不同大小的CLIP变体(如ViT-B/16、ViT-L/14、ViT-H/14和ViT-G/14)的性能表现。

ZegFormer[14] 和 ZSSeg[56] 是其他研究者提出的方法,它们也使用了CLIP模型的不同变体。
CAT-Seg (我们的) 是本研究提出的方法,它在各种CLIP变体上均表现出良好的性能。

从表中可以看出,CAT-Seg在各种不同的评估指标(如A-847、PC-459、A-150、PC-59、PAS-20和PAS-20b)上均优于其他方法。当模型在LAION-2B数据集上训练时(如带有星号的行所示),CAT-Seg方法的性能得到进一步提升,表明该方法在使用大规模数据集进行训练时可以实现更好的性能提升。这些结果展示了CAT-Seg在不同尺寸的模型和数据集上的优越可扩展性和性能。
在这里插入图片描述
表6:在不同数据集上训练。所有方法均使用了CLIP搭配ViT-B模型。CAT-Seg模型即使在相对较小的数据集上也展示出了显著的泛化能力。为了清晰起见,用于训练的同一数据集上评估的分数以灰色标注。

这张表展示了不同方法在不同大小的数据集上训练后,在多个评估数据集上的性能表现:
ZegFormer[14] 和 ZSSeg[56] 是其他研究者提出的方法。
CAT-Seg(我们的)是本研究提出的方法。
训练数据集列显示了每个模型使用的训练数据集。

每一行对应不同的训练集,表中的mIoU分数表示在各个评估数据集上的性能:
COCO-Stuff列的性能评估基于在COCO-Stuff数据集上训练的模型。
A-150列的性能评估基于在ADE20K数据集的150个常见类别上训练的模型。
PC-59列的性能评估基于在PASCAL-Context数据集的59个常见类别上训练的模型。

灰色背景的分数表示模型是在该列指定的数据集上训练并评估的,这有助于理解模型在训练和测试数据集一致时的性能。表中的数据显示,CAT-Seg在不同的评估任务上普遍优于其他两种方法,证明了其出色的泛化能力和在多样化的数据环境下的稳定性。

4.4. Generalization to Part Segmentation

展示了CAT-Seg框架能够泛化到部件分割任务,即使在训练期间未曾观察到的细粒度类别作为输入。与最新的两阶段方法[33]进行了比较。有趣的是,[33]未能考虑到细粒度的、未见过的类别,因为其掩模提议表现出对其训练数据集的偏见。例如,由于在训练中见过“人”,它只能将人整体识别出来,未能分割出如“手臂”和“腿”这样的细粒度类别。相比之下,CAT-Seg框架不受此类偏见影响,能够稳健地识别不同粒度的未见过的对象。
在这里插入图片描述
图7:部件分割的可视化。我们的方法能够识别人的不同部分,而OVSeg [33]只能将人作为一个整体进行识别,可视化了两阶段方法中区域提议的偏见。

(a) OVSeg [33]:这是一个两阶段的语义分割方法,从图中可以看出它只能识别出“人”的整体轮廓,而没有细分出人体的具体部位。
(b) CAT-Seg(我们的):能够识别和分割出“人”的不同部分,例如“头部”、“手臂”、“躯干”和“腿”,显示了更细致的分割效果,没有表现出两阶段方法中常见的对训练数据集的偏见。

这个可视化例子展示了CAT-Seg在部件分割任务上的优势,尤其是在处理细粒度分类时的能力,即使这些类别在训练过程中没有被观察到。这种能力对于理解和处理复杂的视觉场景是非常重要的,特别是在需要精细识别图像中各个组成部分的应用场景中。

5. Conclusion

在这篇论文中,引入了成本聚合到开放词汇的语义分割中,该方法在匹配成本中共同聚合图像和文本模态。CAT-Seg模型不仅有效地将CLIP的知识迁移到未见过的类别上,而且还通过精心设计的空间和类别聚合模块以及所谓的嵌入指导技术,利用了图像语义和类别标签之间的关系。采用这种方法,在所有基准测试上都设定了新的最先进水平,这凸显了CAT-Seg模型卓越的泛化能力。

Appendix

在接下来的内容中,首先在A部分提供更多的实施细节。然后在B部分提供额外的实验结果和消融研究。最后,在C部分展示了所有基准测试和人体部件分割的定性结果,并在D部分讨论了局限性。

A. More Details

A.1. Architectural Details

在下文提供了更多架构的详细信息。整体架构首先在图8的(a)部分展示。

嵌入指导。 在这一段中,我们提供了嵌入指导的更多细节,这一设计旨在通过利用其丰富的语义为指导来促进成本聚合过程。首先分别从特征主干和固定的CLIP文本编码器[44]中提取视觉和文本嵌入。这些嵌入然后经过线性投影,并在聚合层的查询和键投影之前与成本体进行拼接。该设计在图8的(b)部分展示。在使用Swin Transformer [35]作为特征主干的每种情况下,使用第3阶段的输出;而在使用ResNet-101 [21]时,使用conv4 x的最后一个卷积层的输出作为我们的指导。

上采样解码器。 详细的架构在图8的(c)部分展示。对于多级特征EVDec,当使用ResNet-101 [21]时,我们利用conv2 x和conv3 x的最后几层的特征;而当使用Swin Transformer [35]时,则利用第1和第2阶段的输出特征。

在这里插入图片描述图8:CAT-Seg更详细的架构说明:(a) 整体架构。 (b) 嵌入指导。注意,这里展示了一个通用的嵌入指导,以包含不同的注意力设计,即移动窗口注意力[35]或线性注意力[29]。© 上采样解码器层。GN: 组归一化[53]。LN: 层归一化[1]。

(a) 整体架构
整体架构描绘了CAT-Seg处理图像和文本信息以进行语义分割的流程:
特征主干(Feature Backbone):这是一个神经网络,它处理输入图像并提取出有用的视觉特征。
CLIP图像/文本编码器(CLIP Image Encoder, CLIP Text Encoder):这些编码器分别处理输入图像和对应的文本描述(如"猫的照片"),提取出高度抽象的特征向量(嵌入),这些特征向量接下来会用于模型的成本计算部分。
成本计算(Cost Computation):在这一步,模型计算图像嵌入和文本嵌入之间的相似度,形成一个成本体(成本体可以被理解为不同图像区域和类别描述之间匹配程度的三维表达)。
空间聚合(Spatial Aggregation):这一部分由Swin Transformer块组成,它专注于图像特征中的空间信息,帮助模型理解图像中不同区域的上下文关系。Swin Transformer是一种Transformer模型的变体,它专门为视觉任务设计,通过使用移动窗口机制来有效地捕获图像中的局部特征。
类聚合(Class Aggregation):此模块则专注于图像特征中的类别信息,它帮助模型将不同类别的特征进行有效聚合,以便在面对大量类别时能够进行准确的分类。这通常是通过一个或多个Transformer层实现的,这些层可以处理和整合整个数据集中的类别信息。
上采样解码器层(Upsampling Decoder Layer):这个部分的目的是将成本聚合后的特征向量映射回高分辨率的图像空间,生成细节更丰富的特征图。
预测头(Prediction Head):最终的输出层,它将上采样后的特征图转化为最终的分割图,这个分割图中的每一个像素都被分配了一个类别标签。
EV和EL:这些表示从图像和文本中提取的特征向量,它们被用于指导模型的聚合策略。
EVDec:这些表示经过从特征主干中提取的、已经过处理的图像特征,它们作为上采样的一个有效指导。
×NB:表示聚合模块被重复的次数,这在模型训练中是一个可调节的参数,用于在保持计算效率的同时增强聚合过程。

(b) 嵌入指导
MLP(多层感知器):这是一种由多层全连接网络组成的结构,它可以捕捉和处理输入数据中的复杂模式和关系。
LN(Layer Normalization,层归一化):这种技术用于标准化网络中每一层的输出,以稳定训练过程,并帮助网络更快地学习。
Self-Attention(自注意力):Transformer的核心部件,可以帮助模型在处理一个序列时,关注到序列中所有元素之间的相关性。在这里,它通过Query(Q)、Key(K)和Value(V)的相互作用来实现这一点。
Proj.(投影):这通常是一个线性变换,用于将嵌入调整到适合后续处理的维度。
EV和EL:代表图像(V)和文本(L)的嵌入特征,它们经过投影后,作为自注意力模块的输入,帮助模型理解图像内容和文本描述之间的关系。

© 上采样解码器层
上采样解码器层展示了如何将处理后的特征图上采样到原始输入图像的分辨率:
Proj.: 这表示投影操作,通常是一个线性层,它将输入的特征EVDec投影到一个新的空间,以适配后续的卷积层。
卷积层(Conv2D): 这是二维卷积操作,它通过在特征图上滑动多个过滤器来提取空间特征。每个过滤器都能够捕捉到输入数据的不同特征。
激活函数(ReLU): 这是非线性激活函数,它的作用是引入非线性,使得网络能够学习和模拟更复杂的函数。
归一化层(GN,Group Normalization): 与层归一化相似,组归一化是另一种归一化方法,它根据特征图的通道分组来进行计算,以减少内部协变量偏移,从而提高网络训练的稳定性。
上采样(Upsampling): 这是一种将特征图的分辨率提高的操作,常用于分割任务中,用于将低分辨率的特征图转换为更高分辨率的输出,使得输出尺寸足以对应于原始输入图像。
在这里插入图片描述
图9:所提出的微调方法的示意图。为了微调CLIP图像编码器,专门优化注意力层和位置嵌入。这种方法不仅提高了效率,还增强了性能。这里的N指的是CLIP图像编码器中的层的数量。

图中用火焰标记的部分代表被微调的模块,而雪花标记的部分代表被冻结的模块。在这个微调方法中,注意力层位置嵌入是被优化的,而其他部分则被保持固定。

嵌入的图像块(Embedded Patches):这是经过CLIP图像编码器预处理的图像块。
位置嵌入(Position Embedding):为了维护图像中每个块的位置信息,对位置嵌入进行了微调
多头注意力(Multi-Head Attention):负责捕捉不同部分之间的相互关系和依赖性,这一部分进行了微调
层归一化(Layer Normalization, LN):用于归一化层的输入,有助于模型的训练稳定性。
多层感知器(MLP):一个密集的全连接网络,增加模型的非线性和深度,通常在自注意力后使用。

这样的选择性微调策略有助于保留编码器对大量视觉数据的通用理解,同时针对特定任务调整模型以识别关键特征。

A.2. Other Implementation Details

训练细节:
使用24x24的成本体分辨率进行训练。
CLIP图像编码器的位置嵌入使用双三次插值初始化。
训练分辨率设为384x384。
对于ViT-B和ViT-L变体,使用ViT-B/16和ViT-L/14@336px的官方权重初始化CLIP。
ViT-H和ViT-G变体使用在LAION-2B数据集上训练的OpenCLIP权重初始化。
CLIP文本编码器在所有实验中保持冻结。
特征主干网络在ImageNet-1k上预训练。
所有超参数在评估数据集上保持一致。

文本提示模板:
使用类似“一张{class}的照片”的句子来从文本编码器中获取嵌入。
组合了CLIP在ImageNet分类中使用的80个文本提示。

特征和成本聚合基线:
特征聚合方法直接利用CLIP图像编码器提取的特征,将图像和文本嵌入合并后输入上采样解码器。
成本聚合方法则构建成本体,通过嵌入层处理后再输入上采样解码器。

这些补充细节为理解CAT-Seg模型的训练和实施过程提供了更深入的视角,并且阐述了模型优化和设置选择背后的逻辑。

A.3. Patch Inference

介绍了CAT-Seg如何通过图块推理(Patch Inference)来处理高分辨率图像的挑战。Vision Transformer(ViT)虽然强大,但是处理高分辨率图像时计算复杂度会非常高。为了解决这个问题,CAT-Seg采用了一种不需要额外训练的推理策略:

分割图块:将输入图像切割成重叠的小块(例如384×384的块,每个块有128×128的重叠区域)。
图块推理:将这些切割后的图块以及调整大小的原始图像输入到模型中进行处理。
合并预测:将所有图块的预测结果合并起来,并对重叠区域的预测进行平均处理,以生成最终的高分辨率预测图。

通过这种方式,CAT-Seg可以有效地处理大分辨率图像而不会导致显著的性能损失,同时保持了模型的高效性。这是一个聪明的策略,它允许模型在保持较低的计算成本的同时,处理比训练时更大的图像尺寸。

B. Additional Ablation Study

B.1. Comparison of Aggregation Baselines

在这里插入图片描述
表7:特征聚合与成本聚合的量化比较。成本聚合作为CLIP图像编码器直接微调的一个有效替代方法。F.T.:微调。比较了两种聚合基线:特征聚合(Feature aggregation)和成本聚合(Cost aggregation)对CLIP图像编码器性能改进的量化结果。

列出了四种不同的方法,分别在五个不同的数据集或任务(A-847、PC-459、A-150、PC-59、PAS-20)上进行了测试:
(I)特征聚合+冻结(Feature agg. + Freeze)):在这个设置中,CLIP图像编码器的参数是冻结的,不参与训练,只有上采样解码器是被优化的。在这种配置下,模型在不同的数据集上的性能变化不大。
(II)特征聚合+微调(Feature agg. + F.T.):相比于(I),这里微调(Fine-Tuning)了CLIP图像编码器。可以看出,微调提供了一些性能提升,但提升幅度有限。
(III)成本聚合+冻结(Cost agg. + Freeze):与(I)类似,CLIP图像编码器是冻结的,不参与训练,只有上采样解码器是被优化的。但这次使用的是成本聚合策略,成本聚合在冻结编码器的情况下的性能提升明显。
(IV)成本聚合+微调(Cost agg. + F.T.):这是将成本聚合和微调相结合的方法。可以看出,成本聚合从微调中受益明显,这强调了成本聚合在转移CLIP编码器中的知识方面的有效性。

简而言之,这个消融研究展示了成本聚合方法相比于直接的特征聚合方法,在细化CLIP图像编码器方面的优势,尤其是在进行微调时。

B.2. Ablation Study of the Number of Layers NB

在这里插入图片描述
表8:总结了不同NB的影响。NB表示聚合模块被重复的次数。从结果来看,选择更高的NB并不总是导致性能提升。请注意,我们选择了 NB=2 来在性能和模型容量之间取得平衡。

B.3. Ablation Study of Inference Strategy

在这里插入图片描述
表9:推理策略的消融研究。用于消融的CLIP采用了ViT-L模型。†: 通过上采样CLIP ViT的位置嵌入来处理640×640的图像。OOM:内存溢出。

表9展示了模型采用不同推理策略的效果。第一行展示了在推理时使用训练分辨率的结果。第二行代表了一种变体,该变体在CLIP图像编码器中上采样位置嵌入,允许编码器处理更高分辨率的图像。最后一行采用了所提出的图块推理策略。结果表明,增加位置嵌入会带来大量的内存开销。此外,对于某些数据集,使用训练分辨率会产生更好的性能。另一方面,作者提出的方法可以带来大幅的性能提升,同时也确保了高效率。

B.4. Effects of Upsampling Decoder

在这里插入图片描述
表10:上采样解码器的消融研究。用于消融的CLIP采用了ViT-L模型。

表10中提供了采用所提出的上采样解码器的定量结果。结果在所有的基准测试中显示出一致的改进。

B.5. Comparison of Inference Time

在这里插入图片描述
表11:以秒为单位的推理时间比较。更快的得分以绿色突出显示,较慢的得分则显示为红色。对于ZegFormer [14],只报告平均推理时间,因为该方法在不同数据集上的变化很小。

在表11中,展示了与最近的两阶段方法[14]在推理阶段的运行时间比较。报告了使用不同视觉-语言模型(VLM),例如ViT-B、L、H和G的结果。请注意,所提出方法的推理速度取决于类别数量,导致在评估数据集上有不同的运行时间。与[14]相比,报告了平均运行时间,因为其性能与类别数量的关系变化很小。

当使用ViT-B作为视觉-语言模型时,CAT-Seg方法在某些情况下,包括A-847和PC-459,表现出相对较慢的推理时间。然而,当将VLM扩展到更大的变体,如ViT-L、H和G时,CAT-Seg方法享受到了显著更快的推理速度,几乎快了20倍以上,突出了所提方法的效率。

C. More Qualitative Results

在图12中提供了A-847 [62]的更多定性结果,在图13中提供了PC-459 [41]的结果,在图14中提供了A-150 [62]的结果,以及在图15中提供了PC-59 [41]的结果。还在图16中将A-847 [62]的结果与其他方法[14, 56, 33]进行了进一步比较。
在这里插入图片描述
图12:在ADE20K [62] 数据集上具有847个类别的定性结果。

图中展示了一系列原始图像和由CAT-Seg模型生成的语义分割预测图。在每个预测图上,不同颜色的区域对应于模型识别出的各种类别,如“墙壁”、“天花板”、“椅子”等,每个区域都被清晰地标记了类别名称。这显示了模型在处理丰富和复杂场景时的分割能力,能够精细地区分和标注出图像中的各种不同对象和室内元素。通过比较原始图像和预测图,可以看出模型在识别多个不同类别方面的精确性和细致程度。
在这里插入图片描述
图13:在PASCAL Context [41] 数据集上具有459个类别的定性结果。

图中展示了CAT-Seg模型在PASCAL Context数据集上的语义分割效果。原始图像与模型预测的分割标签相对照,可以看出模型能够识别和区分各种不同的场景和对象,包括自然景观、室内环境、人物和动物等。每个预测的分割区域都被精确地标注了类别名称,如“天空”、“树”、“摩托车”、“帐篷”、“草地”等,以及更具挑战性的场景,如人物面部、装饰品和户外活动的设备等。这些结果显示了CAT-Seg在处理多样化类别的复杂图像上的强大能力和高精度。
在这里插入图片描述
图14:在ADE20K [62] 数据集上具有150个类别的定性结果。

这些图像显示了CAT-Seg模型在ADE20K数据集上的分割效果,该数据集包含150个类别。从图中可以看出,模型能够准确识别和分割各种室内和室外环境中的物体,如会议室、城市街道和住宅内部等。每个图像上的预测结果中,不同的颜色代表不同的类别,并且有对应的标签,如“天花板”、“灯”、“椅子”、“桌子”、“地板”等。这些结果展示了模型在细节上的准确性,包括物体的准确边界和各个分割区域的正确标注。通过这样的定性结果,我们可以直观地看到模型在处理多样化的视觉场景时的强大能力。
在这里插入图片描述
图15:在PASCAL Context [41] 数据集上具有59个类别的定性结果。

图中展示了在PASCAL Context数据集上的定性分割结果。原始图片和对应的预测图表明模型在不同场景下的分割能力,能够辨认和区分各种对象和环境元素,如动物、交通工具、自然景观等。每个预测分割区域都清晰地标注了对应的类别,比如“人”、“猫”、“鸟”、“水”、“马”、“墙”、“天空”、“树”等。这些结果体现了模型在细节上的准确性和在不同场景下对物体的精准辨识和标注能力。通过这样的定性结果,我们可以直观地评估模型处理不同视觉场景时的效果。
在这里插入图片描述
图16:在ADE20K [62] 数据集上具有847个类别的定性结果比较。我们在A-847数据集上比较了CAT-Seg与ZegFormer [14]、ZSseg [56]和OVSeg [33]。

图中显示了四种不同模型的语义分割结果。原始图像位于每个子图的顶部,下方是四种不同模型的预测。可以看出CAT-Seg(我们的模型)在不同环境下识别细节和准确性方面表现出色,例如在厨房、餐厅和观测室的场景中。与其他模型相比,CAT-Seg显示了更准确的类别识别和分割,这体现在更清晰的边界划分和更合理的颜色区分上。例如,在最后一行的天文望远镜场景中,CAT-Seg正确地识别了“望远镜”、“椅子”和“人”,并为它们赋予了正确的颜色标签。这种比较展示了CAT-Seg在处理高类别数数据集上的优势,尤其是在与其他先进方法相比较时。

部件分割的定性结果。在图17中将人体部件分割的结果与[33]进行了进一步比较。
在这里插入图片描述
图17展示了人体部分分割的定性结果。在这里,CAT-Seg模型与OVSeg模型[33]进行了比较。

从图中可以看出,相比于OVSeg只能识别出整体的“人”这一个类别,CAT-Seg能够细分出“头部”、“躯干”、“手臂”等部分,显示了它在处理细粒度类别时更为精准的分割能力。这种能力对于需要精细识别不同人体部位的应用场景特别有用,如运动分析、姿态估计等领域。

D. Limitations

简单来说,就是在评估CAT-Seg的准确性时,使用了一些现成的数据集。但这些数据集有时候会给我们模糊不清的信息,比如,有些图里的镜子反射的东西或者是被篱笆遮住的植物,可能会被CAT-Seg模型错认为是空中的天空或者是一辆车。这就像是看一幅画时,不确定画里的某个模糊的形状到底是山还是云。

所以,现在面临的一个问题是,需要一个更好的数据集,这个数据集能够更清晰地表明每一块区域到底是什么,以便能更准确地判断CAT-Seg模型做得怎么样。就像是需要一个表明那个模糊的形状确切是山还是云的更清楚的画。这样的数据集会帮助更好地评估和提升CAT-Seg模型的性能。

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值