【论文阅读--WSSS】Extracting Class Activation Maps from Non-Discriminative Features as well

论文链接:https://arxiv.org/abs/2303.10334
代码链接:https

方法

一种即插即用的方法

在这里插入图片描述

  1. all training images → images features

    用backbone训一个多标签分类器

  2. image features → clusters

    注意:这篇文章是为每个类别单独进行聚类

    先基于CAM用阈值处理得到 前景背景。

    f ( x ) i , j ∈ { F , if CAM ⁡ n i , j ( x ) ≥ τ B , otherwise f(x)^{i,j}\in\begin{cases}\mathcal{F},&\textrm{if}\operatorname{CAM}_{n}^{i,j}(x)\geq\tau\\ \mathcal{B},&\textrm{otherwise}\end{cases} f(x)i,j{F,B,ifCAMni,j(x)τotherwise

    然后分别对前景-背景分别进行K-means得到前景-背景的cluster center

    F = { F 1 , ⋯   , F K } \mathbf{F}=\{\mathbf{F}_1,\cdots,\mathbf{F}_K\} F={F1,,FK} B = { B 1 , ⋯   , B K } ˚ \mathbf{B}=\mathring{\left\{\mathbf{B}_{1},\cdots,\mathbf{B}_{K}\right\}} B={B1,,BK}˚

  3. clusters → local prototypes

    由于CAM可能会激活不完整或者几乎不准确,前面简单的阈值处理后聚类得到的簇中心质量可能不一定好。这里则通过与分类器权重计算预测分数,来挑选出高质量的簇中心。

    对于前景簇中心,要求选出具有高置信度的簇中心,这里对预测分数设置一个较高的阈值—比如0.9;挑选后的前景簇中心 F ′ = { F 1 ′ , ⋯   , F K 1 ′ ′ } \mathbf{F}'=\{\mathbf{F}'_1,\cdots,\mathbf{F}'_{K'_1}\} F={F1,,FK1}

    z i = exp ⁡ ( F i ⋅ w n ) ∑ j exp ⁡ ( F i ⋅ w j ) . z_i=\dfrac{\exp\left(\mathbf{F}_i\cdot\mathbf{w}_n\right)}{\sum_j\exp\left(\mathbf F_i\cdot\mathbb{w}_j\right)}. zi=jexp(Fiwj)exp(Fiwn).

    对于背景簇中心,也是用类似的方法。但这里的阈值并不是选出一个很低的阈值比如0.1。考虑到CAM对共现背景(context)会误认为属于前景,这里选择的阈值为0.5,得到挑选后的背景簇中心 B ′ = { B 1 ′ , ⋯   , B K 1 ′ ′ } \mathbf{B}'=\{\mathbf{B}'_1,\cdots,\mathbf{B}'_{K'_1}\} B={B1,,BK1}(后面通过前景map - 背景map来缓解共现背景误激活的问题)

    z i = exp ⁡ ( B i ⋅ w n ) ∑ j exp ⁡ ( B i ⋅ w j ) . z_i=\dfrac{\exp\left(\mathbf B_i\cdot\mathbf w_n\right)}{\sum_j\exp\left(\mathbf B_{i}\cdot\mathbf w_j\right)}. zi=jexp(Biwj)exp(Biwn).

  4. local prototype → generate LPCAM

    F G n = 1 K 1 ′ ∑ F 1 ′ ∈ F ′ s i n ( f ( x ) , F 1 ′ ) , B G n = 1 K 2 ′ ∑ B 2 ′ ∈ B ′ s i n ( f ( x ) , B 1 ′ ) , \begin{aligned}FG_n&=\frac{1}{K_1'}\sum_{\text{F}_1'\in\mathbb{F}'}sin(f(x),\mathbf{F}_1')\text{,}\\ BG_n&=\frac1{K_2'}\sum_{\text{B}_2'\in\mathbf{B'}}sin(f(x),\textbf{B}_1'),\end{aligned} FGnBGn=K11F1Fsin(f(x),F1),=K21B2Bsin(f(x),B1),

    f(x)就是最后一层输出,没有经过pooling

    这样就得到前景map和背景map,同时由于用余弦相似度计算,他们的值都被归一化到[-1, 1]之间。

    LPCAM ⁡ n ( x ) = ReLU ⁡ ( A n ) max ⁡ ( ReLU ⁡ ( A n ) ) A n = F G n − B G n , \operatorname{LPCAM}_{n}(x)=\dfrac{\operatorname{ReLU}\left(\boldsymbol{A}_{n}\right)}{\operatorname*{max}\left(\operatorname{ReLU}(A_{n})\right)}\\ \boldsymbol{A}_n=F\boldsymbol{G}_n-B\boldsymbol{G}_{n}, LPCAMn(x)=max(ReLU(An))ReLU(An)An=FGnBGn,

    这样,便得到当前类别的CAM了

实验

CAM质量评估

最终分割质量评估

在这里插入图片描述

可视化

在这里插入图片描述

放出失败案例,赞

个人看法

即插即用,赞。不用追赶SOTA

类似的想法在看了一篇用visual words的论文之后也有过

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值