【论文笔记】Class Re-activation Maps for Weakly-Supervised semantic Segmentation

研究领域:weakly-supervised semantic segmentation(WSSS)

研究对象:BCE loss 和 SCE loss的优劣,如何将SCE loss应用到WSSS中

文章目录:

  1. 摘要

  1. 模型

  1. 可以学到的知识

摘要(Abstract)

摘要里面主要提出了三点:

  1. 导致pseudo mask 不准确的主要原因是binary cross-entropy loss(BCE)。因为BCE的 sum-over-class pooling 特性,pseudo mask 可能出现边际不清晰的特点

  1. 本文提出的简单有效的改进方法是:使用一个新的loss(softmax cross-entropy loss i.e SCE) 对已经用BCE训练收敛的CAM进行重新激活,也就是ReCAM。使用SCE loss的为了使用它的对比学习的属性。

  1. ReCAM不仅可以生成更高质量的mask,还可以作为一个插件,非常方便。

Extracting class activation maps (CAM) is arguably the most standard step of generating pseudo masks for weakly-supervised semantic segmentation (WSSS). Yet,  we find that the crux of the unsatisfactory pseudo masks is the binary cross-entropy loss (BCE) widely used in CAM. Specifically, due to the sum-over-class pooling nature of BCE, each pixel in CAM may be responsive to multiple classes co-occurring in the same receptive field. As a result, given a class, its hot CAM pixels may wrongly invade the area belonging to other classes, or the non-hot ones may be actually a part of the class. To this end, we introduce an embarrassingly simple yet surprisingly effective method: Reactivating the converged CAM with BCE by using softmax cross-entropy loss (SCE), dubbed ReCAM. Given an image, we use CAM to extract the feature pixels of each single class, and use them with the class label to learn another fully-connected layer (after the backbone) with SCE. Once converged, we extract ReCAM in the same way as in CAM. Thanks to the contrastive nature of SCE, the pixel response is disentangled into different classes and hence less mask ambiguity is expected. The evaluation on both PASCAL VOC and MS COCO shows that ReCAM not only generates high-quality masks, but also supports plug-and-play in any CAM variant with little overhead.

预备知识(Preliminary)

CAM

CAM的一般步骤是:

  1. 用global averange pooling 提取特征

  1. 用一般的 prediction 层去做分类(常用的:resnet网络的全连接层)

  1. 用BCE(binary cross-entropy loss)训练网络

其中z[k] 是在第k类上模型的预测值,sigma是激活函数,y[k]是{0,1}标签中的一个值,0表示图片上没有k这个类,1则是表示图片上有第k个类。

这个loss也可以写成

 如果图片上没有k这个类

 如果图片上有k这个类

  1. 一旦模型收敛了,我们可以通过公式求出图片在k类上的CAM:

其中W是第k类分类层的参数,f(x)送入GAP网络之前提取出来的特征,然后对Ak进行下列操作就得到了CAM(可以理解为对CAM做了一个激活和归一化)

伪掩码(Pseudo Mask)

因为CAM是包含所有的类的mask,我们需要每个类的单独的mask作为pseudo mask。有四种方法可以使用CAM生成pseudo mask:

  1. 把CAM 阈为0-1的掩码(0表示不在类中,1表示在类中)

  1. 用IRN方法将CAM生成pseudo mask

  1. 反复地用分类网络生成每个类的pseuso mask

  1. 结合方法2和方法3

语义分割

接下来我们用生成的pseudo mask作为label对语义分割网络做全监督训练,用来训练的loss公式如下所示:

这个式子乍看很复杂,但是最外层的两个积分就是在全图的像素点上进行积分(图片的维度是H×W的),第三个积分是在 所有类(包括背景)一共K+1个类上进行积分。Loss的核心部分就是最后一段:

其中 y[k]代表第k类的label,z[k]代表第k类的预测值。

动机(Motivation)

最终的分割结果主要还是和分类模型相关,在求一个图片的CAM的时候通常会出现如下两个问题:

  1. False positive pixel:明明是B类中的像素点被错误的分类到了A类,同时B类并不是背景。

  1. False negative pixel:属于A类的像素点被分类为背景点 。

同时发现,如果使用了BCE 损失函数,这个问题会尤为明显。

在BCE 损失函数中,函数sigma也就是sigmoid函数的式子是:

This loss represents the penalty strength for misclassification corresponding to x. The BCE loss is thus not class mutually exclusive—the misclassification of one class does not penalize the activation on others. This is indispensable for training multi-label classifiers. However, when extracting CAM via these classifiers, we see the drawbacks: non-exclusive activation across different classes (resulting in false positive pixels in CAM); and the activation on total classes is limited (resulting in false negative pixels) since partial activation is shared

文中的这段指出BCE 损失函数没办法体现类与类之间的互斥性。没办法体现出一个类错误的分类之后对其他类的惩罚。而当我们使用这样的分类器提取CAM的时候,不同类之间的不独立性会导致CAM中的false positive 像素点;在整个类上的激活被限制住了会导致CAM中的false negative 像素点。

模型(Model)

本文用骨干网络ResNet-50提取特征,并记提取出来的特征为f。从下图的上半部分我们可以看到提取出来的特征通过GAP以后进入FC 层进行分类,此处的分类结果结合图片维度的标签可以计算BCE损失函数(公式1)。FC层的参数w和特征f点乘得到CAM之后(公式3),并且将CAM记作Mk:

接着我们看图片的下半部分,生成CAM再与特征进行元素对元素的乘法(element-wise multiplication):

这里的c是管道数的意思,一共有C个管道,每个管道都要啊做这样一个乘法。这一步的用意在于使用每一个类的CAM生成对应类的f(feature map)。

接着我们把生成的fk放进GAP网络接上一个FC分类层,可以得到一个新的预测值:

接着我们会用这个预测值和标签值去计算SCE损失函数。通过这样的方法,我们成功将基于BCE损失函数的模型转移成为了基于SCE损失函数的模型。SCE损失函数如下所示:

我们使用SCE损失函数来更新模型(包括骨干模型)。

模型的总损失函数可以写作:

接下去我们使用和提取CAM一样的方法来提取ReCAM:

  

鉴于我们有两个分类层FC1和FC2,我们有参数w1和w2,这样我们对于w''的选择就有四种方法(选择哪个可见后面的结果)

  1. w

  1. w'

一些改进(Refine ReCAM)

作者提出了两种办法来改进ReCAM(具体可见论文):

  1. AdvCAM

  1. IRN

分辨BCE 和 SCE

首先作者对BCE和SCE都对变量z求导来观察这两者的收敛速度:

如果是对变量z求导可以得到下面式子:

如果是对正样本和负样本同时求导我们就可以得到下面的式子:

接着作者对zp(positive)与zq(negative)进行了分析,这里就略述了,具体可以看原文,作者得出的结论是:

当zp远小于zq的时候 SCE损失函数会收敛更快

实验结果

同时作者也做了实验来选择最好的w''参数:

由此可见,当数据集是VOC的时候选element-multiplication的比较好,当数据集是MS COCO的时候选w比较好。

可以学习到的东西(Take-away message)

  1. SCE损失函数 比 BCE损失函数更可以体现多标签的性质,更适用于多标签任务。

  1. ReCAM比CAM要更好用,并且可以单独作为插件使用。


文章:https://arxiv.org/pdf/2203.00962.pdf

code:https://github.com/zhaozhengChen/ReCAM

参考:https://zhuanlan.zhihu.com/p/478133151

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值