当前位置: 代码迷 >> 综合 >> 论文学习笔记——弱监督语义分割(Learning Integral Objects with Intra-Class Discriminator for Weakly-Supervised Sema)
  详细解决方案

论文学习笔记——弱监督语义分割(Learning Integral Objects with Intra-Class Discriminator for Weakly-Supervised Sema)

热度:54   发布时间:2024-01-31 15:38:11.0

目录

  • 基础概念
  • CAM 与 ICD 的不同
  • ICD
  • 效果展示

基础概念

  • Feature manifold(特征流形)

    流形是一种空间,一个流形好比是一个 m 维的数据在 d 维的空间上被扭曲的结果。其中(m > d)(一般维度压缩的方法中都会提到这个概念)

    在这里插入图片描述

    上图中每张图片为同一张人脸的 64×64 的灰度图,如果按照列(或行)拼起来,就可以得到一个 4096 维的向量,这样一来,每一张图片就可以看成是 4096 维欧氏空间中的一个点。很显然,并不是 4096 维空间中任意一个点都可以对应于一张人脸图片的,这就类似于球面的情形,我们可以假定所有可以是人脸的 4096 维向量实际上分布在一个 d 维 (d < 4096) 的子空间中。而特定到 Isomap 的人脸这个例子,实际上我们知道所有的 698 张图片是拍自同一个人脸(模型),不过是在不同的 pose 和光照下拍摄的,如果把 pose (上下和左右)当作两个自由度(也就是坐标轴),而光照当作一个自由度,那么这些图片实际只有三个自由度,换句话说,存在一个类似于球面一样的参数方程(当然,解析式是没法写出来的),给定一组参数(也就是上下、左右的 pose 和光照这三个值),就可以生成出对应的 4096 维的坐标来。换句话说,这是一个嵌入在 4096 维欧氏空间中的一个 3 维流形。 实际上,上面的那张图就是 Isomap 将这个数据集从 4096 维映射到 3 维空间中,并显示了其中 2 维的结果,图中的小点就是每个人脸在这个二维空间中对应的坐标位置,其中一些标红圈的点被选出来,并在旁边画上了该点对应的原始图片,可以很直观地看出这两个维度正好对应了 pose 的两个自由度平滑变化的结果。 就我目前所知,把流形引入到机器学习领域来主要有两种用途:一是将原来在欧氏空间中适用的算法加以改造,使得它工作在流形上,直接或间接地对流形的结构和性质加以利用;二是直接分析流形的结构,并试图将其映射到一个欧氏空间中,再在得到的结果上运用以前适用于欧氏空间的算法来进行学习。 这里 Isomap 正巧是一个非常典型的例子,因为它实际上是通过“改造一种原本适用于欧氏空间的算法”,达到了“将流形映射到一个欧氏空间”的目的。Isomap 所改造的这个方法叫做 Multidimensional Scaling (MDS) ,MDS 是一种降维方法,它的目的就是使得降维之后的点两两之间的距离尽量不变(也就是和在原是空间中对应的两个点之间的距离要差不多)。只是 MDS 是针对欧氏空间设计的,对于距离的计算也是使用欧氏距离来完成的。如果数据分布在一个流形上的话,欧氏距离就不适用了。

    参考资料

CAM 与 ICD 的不同

  • CAM(Class activation maps)

    • 在此过程中,主要标准是类别间的区分。局部区域中较容易识别的前景物体像素主导了激活,例如人的脸部或汽车的车轮。其他前景像素则无法与背景区分开
    • 该模型的最终目标是学习类别间识别的边界。但是,要获得WSSS的整体对象蒙版,我们需要精确地区分像素是属于前景对象还是属于背景。因为前景像素和背景像素位于同一图像中,所以这种鉴别主要在同一图像级类别内进行,即,类别内鉴别
    • 通常,如图所示,CAM所学习的类间边界不符合我们对前景和背景之间的类内区分的要求。因此,仅通过对CAM分数进行阈值化就很难获得完整的目标蒙版
    • CAM做到的核心内容为分离不同类物体,只能给出目标对象的稀疏和不完整的估计,因此难以平衡前景的召回率和背景的假阳性率
  • ICD(Intra-Class Discriminator)

    • 为解决上述问题,文章引入了一个类内的分类器,目的是在同类下,能够清楚分出前景以及后景
    • 因此ICD相比CAM更适合于WSSS类问题
  • 为提升WSSS问题的精度需要对上述模型进行融合使用,通过下图可以清楚的看出两者的关系
    在这里插入图片描述

  • ICD的贡献

    • 文章在将CAM应用于WSSS时发现了边界不匹配问题,即图像级类间识别与所需像素级类内分割之间的差距
    • 文章提出了一种有效的端到端类内鉴别器(ICD)方法,通过学习类内边界来分离前景对象和背景来解决此问题
    • 文章进行了广泛的实验,以分析文章提出的ICD方法的有效性。 所提出的模型实现了基于图像标签的WSSS的最新性能

ICD

  • 模型框架
    在这里插入图片描述

    如图所示,本文提出一个端到端的模型框架,存在两个分支,一个为CAM(CAM只在部分前景区域激活,但突出显示的区域集中在前景上),另一个就是本文提出的ICD模型。框架综合CAM给出的得分以及ICD给出前景和后景的得分,计算出最终的结果

  • ICD分支

    ICD分支中存在两条路径:

    • Bottom-Up Estimation(自底向上的估计)
      ICD的核心思想是基于特征流形将像素分为前景和背景组。我们通过学习每个类 c c 的方向向量 w c w_c 来解决这个问题。假设 X = { X i } i = 1 N X=\left \{ X_i \right \}^N_{i=1} 为所有输入图像的合集, f i f_i 为对应输入图像 X i X_i 的特征图,其大小为 H × W H \times W ,通过学习得到的方向向量为:
      L b u ( X ) = ? 1 N H W i = 1 N k = 1 H W c = 1 C y i , c ( w c T f i , k ) 2 (1) L_{bu}(X) = - \frac{1}{NHW}\sum^N_{i=1}\sum^{HW}_{k=1}\sum^C_{c=1}y_{i,c}(w^T_cf_{i,k})^2 \tag{1}
      w c = w c ^ w c ^ 2 (2) w_c = \frac{\hat{w_c}}{\|\hat{w_c}\|_2} \tag{2}
      其中 f i , k f_{i,k} 为特征图 f i f_i 中第 k k 个像素点, y i , c y_{i,c} 是一个二进制标签(当第 c c 个标签存在于图像中时,为1;反之为0)。为了防止琐碎的无穷大解, w c w_c 受到L2-归一化的约束,如方程式2中所示。

      优化公式1可以促进 w c w_c 将像素特征分为两类。这些特征共享相同的图像级类标签,并且属于第c类的前景或背景。因此,ICD不会像CAM那样陷入难以进行类间分区的问题。由于前景(或背景)像素的特征趋于聚集在一起,并且前景和背景的向量通常不重叠,如图1所示,方向矢量学会将其分为两类,分别是前景与背景。因此,很自然地采用在定向向量上特征投影的符号(正负),来区分前景和后景。为此,我们通过以下方式计算每个像素的得分:
      S ^ i , k , c = w c T f i , k (3) \hat{S}_{i,k,c} = w_c^Tf_{i,k} \tag{3}
      其中, S ^ i , k , c \hat{S}_{i,k,c} 的绝对值可以看作为自信度,符号(正负)表示像素属于前景还是背景。注意,到目前为止,暂时还不知道是正号代表前景,还是负号代表前景,反之亦然。

      但我们注意到,虽然CAM只在部分前景区域激活,但突出显示的区域集中在前景上。(这一属性被前人们论文提出的方法的高效性广泛的证明了,因为它们将CAM中的高分区域作为前景种子。)因此,我们可以利用这个属性来识别这两个组中的哪一个是前景。为此,对于图像中呈现的每个类,我们首先根据公式3中的符号将像素分成两组。例如, I i , c p o s = { k S ^ i , k , c > 0 , y i , c = 1 } I^{pos}_{i,c} = \left \{k|\hat{S}_{i,k,c} > 0,y_{i,c} = 1 \right \} I i , c n e g = { k S ^ i , k , c < 0 , y i , c = 1 } I^{neg}_{i,c} = \left \{k|\hat{S}_{i,k,c} < 0,y_{i,c} = 1 \right \} 。定义 M i , k , c M_{i,k,c} 为对应的CAM得分,我们计算这两组CAM得分的均值:
      M ˉ c g = 1 N I i , c g i = 1 N k I i , c g M i , k , c , g { p o s , n e g } (4) \bar{M}^g_c=\frac{1}{N|I^g_{i,c}|}\sum^N_{i=1}\sum_{k\in I^g_{i,c}} M_{i,k,c}, \quad g\in\{pos,neg\}\tag{4}
      其中 ? |\cdot| 表示集合中元素的数量。

      然后比较 M ˉ c p o s \bar{M}^{pos}_c M ˉ c n e g \bar{M}^{neg}_c 的值,如果后者也就是 M ˉ c n e g \bar{M}^{neg}_c 的值更大,则反转ICD的得分。因此在ICD的得分 S ^ i , k , c \hat{S}_{i,k,c} 中,正值永远表示前景。
      S ^ i , k , c = S ^ i , k , c ? sign ( M ˉ c p o s ? M ˉ c n e g ) (5) \hat{S}_{i,k,c} = \hat{S}_{i,k,c} \cdot \text{sign}(\bar{M}^{pos}_c - \bar{M}^{neg}_c) \tag{5}
      其中, sign ( ? ) \text{sign}(\cdot) 是一个符号函数,将正值映射为 1 1 ,负值映射为 ? 1 -1

      出于效率方面的考虑,我们将上述步骤作为网络中的一个模块来进行实施,以便可以在线调整ICD分数的符号。 我们通过公式4,来计算本地平均CAM分数。 在每个小型批次中,并采用步长为0.9的移动平均策略来更新全局平均CAM分数。 然后根据公式5来进行全局CAM分数符号翻转。

    • Top-Down Adaptation(自上而下的适应)

      • 首先,通过对每个超像素中的ICD分数 S i , k , c S_{i,k,c} 取平均值,从而得到精炼的ICD分数 S i , k , c S'_{i,k,c}

      • 上述步骤有助于恢复通常在下采样过程中丢失的物体边界信息。 随后根据改进的ICD分数生成二进制掩码 B i , k , c B_{i,k,c}
        B i , k , c = Π ( S i , k , c > 0 ) , k { 1 , , H W } (6) B_{i,k,c} = \Pi(S'_{i,k,c}>0),\quad k\in\{1,\dotsc,HW\} \tag{6}
        其中, Π ( ? ) \Pi(\cdot) 为指针函数,当状态为True时为1,反之为0。

      • 最后,我们训练了一个新的分支来拟合二进制掩码,并得出了新的ICD分数 S i , k , c S''_{i,k,c} ,并通过极大似然估计来构建损失函数:
        L t d ( X ) = ? 1 N H W i = 1 N k = 1 H W c = 1 C y i , c ( B i , k , c log ? σ ( S i , k , c ) ) + ( 1 ? B i , k , c ) log ? ( 1 ? σ ( S i , k , c ) ) (7) L_{td}(X)=-\frac{1}{NHW}\sum^N_{i=1}\sum^{HW}_{k=1}\sum^C_{c=1}y_{i,c}(B_{i,k,c}\log \sigma(S''_{i,k,c}))+(1-B_{i,k,c})\log(1-\sigma(S''_{i,k,c})) \tag{7}
        其中, σ ( ? ) \sigma(\cdot) s i g m o i d sigmoid 函数, S i , k , c S''_{i,k,c} 为分支的预测值,也是最后生成遮罩的最终ICD得分。

  • 损失函数

    整个ICD框架是和CAM一起训练的。将 L c a m ( X ) L_{cam}(X) 表示为CAM的多类别Sigmoid损失函数,总的损失函数为:
    L a l l ( X ) = L c a m ( X ) + L b u ( X ) + L t d ( X ) (8) L_{all}(X)= L_{cam}(X)+L_{bu}(X)+L_{td}(X)\tag{8}
    其中论文对上述 L b u ( X ) L_{bu}(X) L t d ( X ) L_{td}(X) 两个损失函数提出了两个变体(改进方案):

    • 使用 L 1 L1 正则化(将原先的平方改为绝对值)来学习 w c w_c :
      L a b s ( X ) = = ? 1 N H W i = 1 N k = 1 H W c = 1 C y i , c w c T f i , k (9) L_{abs}(X)== - \frac{1}{NHW}\sum^N_{i=1}\sum^{HW}_{k=1}\sum^C_{c=1}y_{i,c}|w^T_cf_{i,k} |\tag{9}
    • 另一个直观的选择是将其视为标准的二分类问题,该问题会生成在线伪标签并采用Sigmo损失函数进行训练:
      Y i , k , c = Π ( w c T f i , k > 0 ) (10) Y_{i,k,c}=\Pi(w^T_cf_{i,k}>0)\tag{10}
      L s i g ( X ) = ? 1 N H W i = 1 N k = 1 H W c = 1 C y i , c ( Y i , k , c log ? σ ( w c T f i , k ) + ( 1 ? Y i , k , c ) log ? ( 1 ? σ ( w c T f i , k ) ) ) (11) L_{sig}(X)=-\frac{1}{NHW}\sum^N_{i=1}\sum^{HW}_{k=1}\sum^C_{c=1}y_{i,c}(Y_{i,k,c}\log \sigma(w^T_cf_{i,k})+(1-Y_{i,k,c})\log(1-\sigma(w^T_cf_{i,k}))) \tag{11}
    • 通过分析梯度,论文揭示了这些变体的联系。 这三个变体的梯度可以统一形式表示:
      ? L ( X ) ? w c = ? i ? 1 N k = 1 N W ( y i , c sign ( w c T f i , k ) ) ? λ i , k ? f i , k (11) \frac{\partial L(X)}{\partial w_c}=-\sum^N_{i-1}\sum ^{NW}_{k=1}(y_{i,c}\text{sign}(w^T_cf_{i,k}))\cdot \lambda_{i,k}\cdot f_{i,k}\tag{11}
      其中:
      λ i , k = { w c T f i , k for L b u 1 for L a b s σ ( w c T f i , k ) ? Y i , k , c for L s i g (12) \lambda_{i,k}= \begin{cases}|w^T_cf_{i,k} |\qquad\qquad&\text{for}\quad L_{bu}\\1 &\text{for}\quad L_{abs}\\|\sigma(w^T_cf_{i,k})-Y_{i,k,c}|&\text{for}\quad L_{sig}\tag{12} \end{cases}
      公式11和12显示,梯度是特征的加权和。文章最初的方法将更多的权重放在具有较大绝对值投影的特征上,这通常是可靠的,因为它们距离决策边界较远。 相比之下,Sigmoid损失函数法对决策边界附近特征权重的关注度更高,这是次要的,因为这些估计值不可靠。
  • 训练并生成种子

    在训练过后,通过适应的ICD得分 S i , k , c S''_{i,k,c} 来生成种子。对于只有单类别的图像,我们直接使用ICD分数以阈值为0的方式生成遮罩(pseudo-masks)。对于多类别的图像,将被所有ICD分数标记为背景的像素用作种子背景,而其他像素为前景。如果有一个像素被多个ICD分数标记为前景,我们将采用CAM分数和ICD分数的乘积来确定其类别,因为CAM是专门被类别识别问题优化的。CRF后处理也被采用以进一步完善细节。

效果展示

在这里插入图片描述
通过上图可以看出,论文提出的方法所展示出的结果效果非常出色。最后使用CRF进行优化后对物体的细节部分有了更高的精度。

论文代码:https://github.com/js-fan/ICD
原文地址:Learning Integral Objects with Intra-Class Discriminator for Weakly-Supervised Semantic Segmentation

  相关解决方案