菜单

Regional Semantic Contrast and Aggregation for Weakly Supervised Semantic Segmentation 笔记

8月 28, 2022 - 算法

引言

语义分割在计算机视觉领域是一个收到持续关注的关键问题,在自动驾驶,机器人技术,人机交互和医学图像分析等领域有极多应用。虽然全监督的系统已经取得了巨大的进步,但是这些技术往往受限于像素级标注的可行性。这是由于即使在智能技术的帮助下,标注像素级数据的开销都是很大的。通过弱监督语义分割(WSSS)的方法或许可以得出这个问题是否可以通过微弱且有效的弱监督信号的方式得以解决。这里的弱监督信号,常见的有图像级标注,图像位置标注(point/scribble),边界框等。本文的工作基于最简单的图像级标注完成。

由于在训练数据中没有真正的图像级标注到对象区域对应关系,如何将视觉上的概念映射到像素区域是一个很有挑战性的任务。CAM方法作为一种开创性的工作,它发现了在分类器的最后一层进行全局池化操作即可发现特征图上被激活的区域与原始图像上物体所在的位置有很大的关联,即从图像分类器的内部激活区域来尝试解决特征定位的问题。这种技术也可以理解为寻找分类任务对图像类别进行区分的最显著的区域。正因为分类器往往只被激活一小部分具有强判别能力的特征,这种技术很容易给出稀疏和不完整的对象估计。当然,为了解决这个问题,一系列后续工作都在尝试如何学习到更完整的对象区域,常见的方法包括:在初始图的基础上进行区域增长、以“捉迷藏”的方式对抗性擦除、丰富特征以收集图像内上下文、寻求辅助的显著性监督、使用预先设计的pretext任务进行自监督学习等。

这些工作都是出色的工作,但是这些方法在获取对象定位信息时仅使用了单张图像信息,忽视了图像间的上下文信息。图像级标签不仅可以指明每张单独图像中出现的类别,并且还能揭示出数据集中该类图像的语义结构信息。对于一个相同的概念,数据集中往往包含了很多视觉上看起来差异很大,但是语义相同的数据(比如各种姿势,各种颜色,各种体态的猫);同时,对于两个不同概念,数据集中也会存在视觉上差异不大,但是类别完全不同的数据(比如姿势相同,颜色一致,长得很像的猫和狗)。我们应该利用这种先验知识来获得更准确的语义模式理解。已经有一些工作着手进行了这些方面的努力,但是他们大都关注两两成对的数据或者几个一组的有限数量的上下文建模方式,因此无法保证对整个数据集中的整体语义模式有充分的理解。除此之外,这些方法往往偏爱像素级关系的建模,由于监督信号的缺失,往往会导致很大的困难并导致过高的计算成本。

受启发于上述分析,我们提出了区域语义对比和聚合(Regional Semantic Contrast and Aggregation, RCA)方法来最大限度地利用视觉数据中的上下文知识,从而实现全面的对象模式学习并产出更加有效的CAM结果。代替上述方法中的像素级关系建模,RCA 选择使用区域感知进行表示,这种表示对噪声有更好的效果和鲁棒性。 具体来说,对于每个mini-batch的图像,我们根据从单个图像中学习得到的直接、粗略的CAM将其划分为类别“伪”区域。对于每一个伪区域,RCA建立起其与其他所有图像中的区域之间的联系,从而促进数据集级别的上下文语义学习。在具体计算时,我们将RCA与有关持续更新的记忆库关联起来,在记忆库中收集并保存训练过程中数据集中有意义的区域语义,并且适用于网络的学习和推理阶段。在训练过程中,RCA探索每个mini-batch中区域之间的语义关系,并通过以下两种方式更新记忆库:

这两种上下文建模策略对我们的方法来说是必不可少的。语义对比帮助网络从全局视角学习更多的结构化对象嵌入空间,同时语义聚合侧重于通过收集不同的语义上下文改进特征的表示。换句话说,语义对比尝试更好地区分不同概念,语义聚合尝试理解同一概念的不同表示形式。此外,语义对比对于保持独特且信息丰富的记忆嵌入至关重要,这是产生可靠语义聚合的先决条件。这两个组件使得RCA成为了一个强大的WSSS模型。我们的 RCA 非常灵活,可以轻松地整合到现有的 WSSS 模型中。它在具有挑战性的数据集上显示出持续改进的分割性能,在PASCAL VOC 2012和COCO2014上都取得了SOTA。

主要贡献:

  1. 我们研究了WSSS中至关重要但是却被长期忽视的问题,以探索用于网络训练的弱标记数据的更丰富的上下文信息。这实质上缩小了图像级语义概念和像素级对象区域之间的差距。
  2. 具体来说,我们引入了一个用于语义对比的鲁棒的对比学习算法,该算法可以从不完美的伪区域中学习更为有效的表示。
  3. 同时,还有一个非参数化的用于特征聚合的注意力模型,该模型可以从整个数据集中收集丰富的上下文知识。

方法

问题描述

任务设置

根据标准的设定,数据集\mathbf{L}每张训练图像I\in\mathbf{R}^{w\times h\times 3}仅有图像级标标签\mathbf{y} = [y_1, y_2, …, y_L]\in{0,1}^L,分别对应L个预先声明的类别。此处,y_l=1表示类别l在图像I中存在,否则为0。给定这样的粗略注释,大多数现有的解决方案都依据一个“两阶段”流程来解决“分类到分割”的任务,例如,首先训练一个分类网络来识别物体与其分类相对应的区域,之后将其区域进一步提炼得到伪分割标签,最后将其作为语义分割网络的监督信息。

先前的WSSS解决方案

总的来说,最近的实现方案大都是从全卷积网络FCN中派生得到类感知注意力图,这种方式以及被证明可以得到和CAM质量相当的定位图。特别的,对于一个mini-batch内的图像I,这种类感知注意力图的生成方式为:
\mathbf{F} = F_{FCN}(I) \in \mathbf{R}^{W\times H\times D}, \mathbf{P} = F_{CAM}(\mathbf{F}) \in \mathbf{R}^{W\times H\times L}
此处,F_{FCN}是一个FCN网络,通常对应于标准分类器的卷积部分,例如VGG,ResNet等。\mathbf{F}是图像I的密集嵌入,空间大小为W\times H,通道数为DF_{CAM}是一个用于产生\mathbf{P} = [\mathbf{P}_1,…,\mathbf{P}_2]的类感知卷积层。在\mathbf{P}中,每张特征图\mathbf{P}_l \in \mathbf{R}^{W\times H}代表第l类的网络激活。该过程通过FCN网络产生W\times H\times D的特征图\mathbf{F},再通过一层额外的卷积层将其与图像类别数量l对齐,得到W\times H \times L的特征图\mathbf{P}。之后,在\mathbf{P}进行全局平均池化(global average pooling, GAP)操作,得到得分向量\mathbf{p} = [p_1, p_2, …, p_L] \in \mathbf{R}^{L},其中p_l = GAP(\mathbf{P}_l)为第l类的未标准化的得分。也就是说,对\mathbf{P}中的每一个特征图进行GAP操作,得到的L个值组成分类得分向量\mathbf{p}。最终,\mathbf{p}被用于多分类任务。

我们的主要思路

通过以上对现有 WSSS 解决方案的描述,我们发现它们仅利用单个图像中有限的上下文线索,从而难以更全面地理解各种语义模式。为了弥补这个缺陷,我们引入了RCA方法通过极大数量的伪区域来实现语义对比和语义聚合。这粮种方法都是由额外的伪区域记忆库支撑实现的。接下来,我们将首先描述构建初始伪区域表示的方法和构建记忆库的方法。之后,我们将详细阐述语义对比和语义聚合的实现方法。

区域语义对比和聚合

伪区域表示

对于个mini-batch的输入I,我们基于\mathbf{P}将密集嵌入\mathbf{F}转化为一个类别区域表示集合。具体来说,对于出现在I中的第l个类别,它的区域级语义信息可以通过masked average pooling转换为一个简单的嵌入向量f_l \in \mathbf{R}^D

f_l = \frac{\sum_{x=1,y=1}^{W,H} M_l(x,y)\mathbf{F}(x,y)}{\sum_{x=1,y=1}^{W,H} M_l(x,y)} \in \mathbf{R}^D

其中,{M_l}=\mathbb{1}(\mathbf{P_l} > \mu) \in{0,1}^{W \times H} 是一个二元mask,该mask仅在其激活图中突出显示l类的强激活像素。\mathbb{1(\cdot)}是一个指示函数,\mu被设置为\mathbf{P}_l的均值。此处得到的f_l是简单轻量,并且允许对其与从其他样本中挖掘的大量伪区域的关系进行可行的探索。

具体来说,\mathbf{F}的维度是B\times D\times W\times H,即FCN最后一层的输出, \mathbf{P}的维度是B\times L \times W \times H,是在F的基础上,又经过几层卷积之后,得到的一组特征图。对\mathbf{P}L维度进行softmax操作,得到新的B\times L \times W \times H\mathbf{P},此时\mathbf{P}中的值为每一类在每个位置上的得分。对于每张图像i,获取其one-hot标签中包含的类别列表ind = [i_1, i_2, …, i_x],那么对于其中出现的第j个类别,我们可以根据这个列表提取出\mathbf{P}中对应类别的map,即\mathbf{P}[i][ind[j]],大小为1\times H \times W,之后根据其均值转换为二元map,就得到了公式中的M_l。将M_l\mathbf{F}[i]相乘,得到D\times W \times H的张量,将其reshape为D\times(W\times H)的形状,在(W\times H)的维度求和,得到公式分母上的部分,分子部分就是M_l中所有元素的和。这样就得到了一个f_l向量,其维度为D,对于mini-batch中的每张图像,都会得到|ind|个这样的f_l向量。

伪区域记忆库

我们为RCA建立了一个无参数的动态记忆库来存储数据集级别的区域语义信息。具体来说,记忆库M由与每个类别对应的L个字典组成,即M = {M_1, M_2, …, M_L}M_l的每个条目都表示在整个学习阶段中观察到的图像I中第l类的整体区域感知表示m_l\in \mathbf{R}^D。在每一步训练中,记忆库将会在反向传播的过程中更新以引入新的观察。具体来说,当前图像If_l向量将会以一种平滑的方式整合进m_l中:
m_l \leftarrow \gamma m_l + (1-\gamma)f_l
其中\gamma是记忆进化的动量。当第l类出现在图像I中且它的分类得分超过阈值\nu时,m_l发生更新,否则不更新。

具体来说,在模型初始化阶段根据类别总数L申请出L个记忆库,每个记忆库的大小为len \times D,在本文中len的取值为500。与之对应的还有L个指针,表示当前每个记忆库中更新的位置。在更新记忆库时,传入参数包括\mathbf{F}, \mathbf{P}, label, probs。其中,label是当前图像中存在的类别,probs为长度为L的向量,表示每个类别的概率得分。之后,针对label中存在的类别l,利用\mathbf{F}, \mathbf{P}以上节中提到的方式得到伪区域向量f_l。如果probs超过了阈值,就更新当前类别记忆库中指针对应位置的向量,并且以循环的方式将指针后移一位。值得注意的是,probs并不是直接从\mathbf{P}中得到的,\mathbf{P}是由\mathbf{F}经过几层卷积得到的,但是对于probs来说,首先定义了L套卷积层,每套卷积层都以语义聚合后的结果为输入,输出为B\times 1 \times H \times W,之后将其拼接到一起,得到了B\times L \times H \times W的结果,在此基础上进行GAP和sigmoid操作,得到分类概率得分probs。

记忆机制的讨论

  1. 记忆被划分得足以单独压缩每个训练样本中的每个潜在语义假设,并且能够在弱标记的视觉数据中很好地编码每个类别的不同语义模式。
  2. 上述动量更新方案不仅可以有助于为语义对比获得一致的记忆特征,而且提供了能够更精确描述目标语义的综合表示。具体来说,这种动量更新方案积累了不同训练epoch中由图像分类器产生的每个对象区域的所有中间状态。这些中间状态之间显示出了很好的互补性,并且每个记忆特征m_l都能随着训练进行逐渐提升,从而捕捉一个更完整的对象区域。这最终会在训练后产生信息丰富的记忆表示,可以将其用作语义聚合的可靠上下文

区域语义对比

我们在伪区域语义上进行了语义对比,以学习更有辨别力的密级表示。对于图像I中的每一个类别伪区域嵌入f_l,我们的目的是增加它的与相同类别记忆特征{m_l^{+} \in M_l}的相似性,同时减少它与不同类别特征{m_l^{-} \in M \setminus M_l }的相似性。通过下面的区域感知对比损失函数实现:

\mathcal{L_l^{NCE}} (f_l,y_l)= \frac{1}{|M_l|} \sum_{m_l^+ \in M_l} -log\frac{e^{sim(f_l, m_l^+)/\tau}}{e^{sim(f_l, m_l^+)/\tau} + \sum_{m_l^-\in M \setminus M_l }e^{sim(f_l,m_l^-)/\tau}}

其中\tau是一个缩放距离分布的温度超参数,sim(i,j) = \frac{i\cdot j}{\parallel i \parallel_2 \parallel j \parallel_2}l_2正则化后的i,j的点积,也就是cosine相似性。

这个损失函数属于监督对比学习的范畴,也就是说f_l/m_l^+/m_l^-的标签需要给定。但是在弱监督学习的场景下,要从比较弱且噪声大的标签上学习出一个鲁棒的表示是很困难的。为了缓解这个问题,我们提出了区域混合的概念来正则化这个损失函数。具体来说,对于图像I中的每一个区域l,我们通过线性结合的方式将l与另一张图的l^-混合起来,得到一个混合区域。这里我们假设区域ll^-来自不同类别,也就是y_l \neq y_{l^-}。混合区域的嵌入方法可以由下式计算:
\hat{f_l} = \omega f_l + (1 – \omega)f_{l^-}
其中系数\omega \sim \mathcal{B}(\beta, \beta)遵循一个两个形状参数都被设置为\beta的Beta分布\mathcal{B}(\cdot,\cdot)。之后,我们将新的区域混合对比损失函数定义为:
\mathcal{L_{l}^{RM-NCE}} = \omega \mathcal{L_l^{NCE}}(\hat{f_l},y_l) + (1 – \omega)\mathcal{L_l^{NCE}}(\hat{f_l}, y_{l^-})
这个新的损失函数计算了关于y_ly_{l^-}的两个\mathcal{L}^{NCE}_{l}损失,此处的\omega与混合区域嵌入时的\omega保持一致。这个式子鼓励网络学习混合区域的相对相似性,规范模型以从标签不完美的样本中学习鲁棒的表示。

具体实现时,对于(B,D,W,H)的特征\mathbf{F}(B,L,W,H)的粗略特征图\mathbf{P},对当前batch内的每一张图像的label中出现的每一个类别l,都进行以下过程:

区域语义聚合

上下文信息在像素理解中是非常重要的,但是先前的研究大多集中于图像内的上下文建模,却忽视了图像之间的上下文信息。为了缓解这种情况,我们设计了语义聚合来利用内存库中的数据集级上下文线索来增强语义理解。正如上文中描述的,我们的记忆库提供了大量的语义区域信号。即使一个大规模的记忆库可以有益于语义对比,它还它包含过度完整(或冗余)的表示,有些甚至是嘈杂的,使得准确的上下文学习变得困难。此外,直接聚合大规模的表示计算消耗很大,并且将会显著减慢训练和inference过程。

为了解决这些问题,我们将过度完整的记忆表示压缩成一组紧凑的代表性原型。对于每个类别l,我们对M_l中的所有特征进行K-means聚类,得到了K个原型向量,也就是聚类中心,将其组成一个矩阵Q_l \in \mathbf{R}^{K\times D}。这里我们为每个类别使用多个原型向量来代表显着的类内差异。之后,将来自M的所有类别原型向量concat到一起,得到一个全面的原型表示Q = [Q_1, Q_2, …, Q_l] \in \mathbf{R}^{K\times D \times L},之后,计算FQ的亲和矩阵:
S = softmax(F\otimes Q^T) \in \mathbf{R^{(WH)\times(LK)}}
其中F\in \mathbf{R}^{(WH)\times D}, Q\in\mathbf{R}^{(LK)\times D}为了计算方便,将其展平为矩阵表示。softmax将输入的每一行标准化。S中的每一项表示F中的每一行(特征)与Q^T中的每一列(原型向量)之间标准化后的相似性。基于这个亲和矩阵,可以计算关于原型表示 Q 的特征嵌入 F 的上下文摘要:
F’ = S \otimes Q \in \mathbf{R}^{(WH)\times D}
其中F’即为F丰富后的特征表示,该表示也被reshape成\mathbf{R}^{W\times H\times D}。最终,我们将F’与原始的Fconcat到一起,得到\hat{F}:
\hat{F} = [F, F’] \in \mathbf{R}^{W\times H \times 2D}
在这里,\hat{F}不仅编码了F中的图像内局部上下文,也捕获了F’中的跨图像全局上下文,从而丰富了语义理解的可代表性。

CAM预测

有了F’之后,对于每一类,都将其F’视为输入,经过一组卷积后得到1\times W \times H的map,再将其concat起来,得到F_{CAM} \in \mathbf{R}^{W\times H\times L},最终的激活mapO为:
O = F_{CAM}(\hat{F}) \in \mathbf{R}^{W\times H\times L}

详细网络结构

我们的分类器包括四个主要组件:

  1. backbone网络F_{FCN},将输入图像I转换为一个卷积表示F。任何FCN网络都可以使用,我们使用了VGG16和ResNet38.

  2. 类别级卷积层F_{CAM}从特征嵌入中产生类感知attention map。在我们的网络中,产生粗略map的和最终CAM预测的是不同的F_{CAM}

  3. 记忆库M存储所有训练过程中产生的区域模式,在inference阶段,记忆库被移除,仅有K-means产生的原型表示保留下来。这降低了在模型部署期间维护大型记忆库的成本。

  4. 损失函数为:
    \mathcal{L} = \sum_I\alpha_1 \mathcal{L}^{RM-NCE}+\alpha_2\mathcal{L}^{CE}(GAP(P), y) + \mathcal{L}^{CE}(GAP(O), y)
    其中每张图像I都被3个损失项监督。第一项\mathcal{L}^{RM-NCE}是区域混合对比损失,其值为图像I中所有区域的平均值。第二项是辅助交叉熵损失\mathcal{L}^{CE},用于监督中间产生的CAM预测P,第三项则是用于监督最终产生的CAM预测O

标签:

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注