论文链接:https://arxiv.org/abs/2303.10334
代码链接:https
方法
一种即插即用的方法
-
all training images → images features
用backbone训一个多标签分类器
-
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}˚
-
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(Fi⋅wj)exp(Fi⋅wn).
对于背景簇中心,也是用类似的方法。但这里的阈值并不是选出一个很低的阈值比如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(Bi⋅wj)exp(Bi⋅wn).
-
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=K1′1F1′∈F′∑sin(f(x),F1′),=K2′1B2′∈B′∑sin(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=FGn−BGn,
这样,便得到当前类别的CAM了
实验
CAM质量评估
最终分割质量评估
可视化
放出失败案例,赞
个人看法
即插即用,赞。不用追赶SOTA
类似的想法在看了一篇用visual words的论文之后也有过