IRNet论文解读:https://zhuanlan.zhihu.com/p/246105364
图像分割弱监督技术综述:https://blog.csdn.net/hacker_long/article/details/88677087
IRNet是一种弱监督的实例分割方法,是基于image-level label的弱监督图像分割方法之一
Image-level label
image-level label或image-level tag指的是一张图片只有一个标签,这个标签往往是有概括性的,而忽略了很多细节。例如:“陆上交通工具”,而并不是细化成“自行车”“三轮车”“小型轿车”这种很细粒度的标签。(好处之一在于这种label相对方便获取)。一般基于image-level label的弱监督方法会预训练一个基于image-level label的网络,网络的分割能力不强,但能够大概地区分前景和背景。
IRNet的结构
IRNet的结构如下图所示:
可以看出,框架主要分为三个分支网络:
- 分支1:一个使用image-level label训练的分类网络,可以看做是一个粗糙的语义分割网络,输出为Class Attention Maps(简称CAM);
- 分支2:物体中心预测;
- 分支3:物体边界预测。
分支1:训练得到CAM
CAM的概念是另一篇15年的论文Learning Deep Features for Discriminative Localization中提出的。这篇文章提出了利用GAP(global average pooling)来替代一般特征识别网络最后的全连接层(GAP的概念是更早的论文提出的,这里简单记录不再仔细分析)。
Global Average Pooling
GAP原本是一种正则化训练方法。它的提出动机在于:
- 替代全连接层,减少参数量,也就减少了可训练参数,环节模型的过拟合问题;
- 强制特征图与类别对应,对于卷积结构而言更加自然。
GAP的主要原理如下:
假设通过特征提取网络,得到了4张\(6 \times 6\)的特征图,则现在对4张feature map分别做average pooling,得到4个\(1 \times 1\)的特征图,相当于得到了一个\(1 \times 4\)的特征向量。这个特征向量可以送入softmax层进行分类。
Class Activation Mapping
CAM的主要目的是,假设一张图里有若干个不同类别的目标,而现在只需要重点关注一个类别,或得到不同类别的特征图中最重视的特征。
CAM利用了GAP网络的输出。还是接着上面\(1 \times 4\)的特征向量的例子来理解。假设现在得到了4张\(6 \times 6\)的特征图,CAM的生成方法是:对特征图进行上采样,得到与原图一样的尺寸,再通过GAP,得到\(1 \times 4\)的特征向量。向量中的每一维再向后送入一个全连接的层,每一层对应着一个类别,如图所示:
例如,当我们注重对狗的分类(假设是第二类)时,通过让网络训练、调整\(1 \times 4\)的特征向量到狗分类的权值\(\omega_{12},\omega_{22},\omega_{32},\omega_{42}\),即可最终得出如上图中的heat map,我们会发现网络的重点在于狗的位置。当然,如果识别目标是人类(假设是第三类),网络会通过调整\(1 \times 4\)的特征向量到狗分类的权值\(\omega_{13},\omega_{23},\omega_{33},\omega_{43}\)来生成对应的CAM。
数学上的解释
设\(f_k(x,y)\)是第k个特征图上\((x,y)\)位置的值,则通过GAP可以得到\(F_k=\sum_{x,y}f_k(x,y)\),对于某个类别c,在经过softmax前的输入值为:\(s_c=\sum_k\omega_k^cF_k\),最终输出的类别值是:\(P_c = \frac{exp(s_c)}{\sum_c exp(s_c)}\). 而这个时候得到的类别c的CAM可以表示为\(M_c\):
\[s_c = \sum_k\omega_k^cF_k = \sum_k\omega_k^c\sum_{x,y}f_k(x,y) = \sum_{x,y}\sum_k\omega_k^cf_k(x,y)\\ M_c = \sum_k\omega_k^cf_k(x,y) \]分支2:物体中心预测
这一步实际上就是预测物体的质心,然后利用质心的性质确定那些点是属于物体的。displacement field上的每个点实际上表示着原图中这个点到物体质心的向量。颜色代表向量的角度,饱和度代表向量的长度。当前点到质心的偏移量\(D(x)\)可以用一种迭代的形式进行优化,如下图所示:
基本思想是找到偏移值较小一些点作为物体的中心,再利用上图中的优化方法对图像中的点进行迭代更新,最终用一个物体的中心所能到达的所有点的集合视为一个instance,这样可以得到一个无类别的instance图像。
再将其与分支1中得到的CAMs相结合,可以得到instance-wise CAMs。
在常规理解下,不知道物体的中心的ground truth,怎么算出最初始的位移场?然而,这篇文章提出了一种在不知道物体中心的情况下的解决办法。
首先,分支1可以看做一个简易的图像分割网络,得到的结果虽然准确性很低,但能够提供图上每个像素对应不同class的基础的置信度信息。对于每个像素,我们将其分为几类:
- 最高confidence高于threshold:将像素认定为最高confidence所对应的类别;
- 最高confidence低于threshold:像素标记为ignored。
接下来,我们对每个像素取一个半径为\(\gamma\)的邻域,并将其与邻域中的所有其他像素构成像素对。像素对可以分成三种(如图所示):
- 像素对中的两个像素属于同一类:\(P^+\);
- 像素对中的两个像素不属于同一类:\(P^-\);
- 像素对中存在像素属于ignore:ignore。
对于一个前景正像素对\(P_{fg}^+=(i,j)\),则该像素对中的两个像素拥有相同的物体中心。即设\(x\)为像素坐标,\(D(x)\)为像素到中心的偏移值,则有:
\[x_i + D(X_i) = x_j + D(X_j)\\ x_j - x_i = D(x_i) - D(x_j) \]令:
\[\hat{\delta} = x_j - x_i\\ \delta = D(x_i) - D(x_j) \]则\(\hat{\delta} - \delta\)应该是要趋近于0的,于是定义对于前景正像素对的损失函数:
\[L^D_{fg} = \frac{1}{P_{fg}}\sum_{(i,j)\in P_{fg}}|\delta(i,j) - \hat{\delta}(i,j)| \]对于背景正像素对\(P_{bg}^+=(i,j)\),由于理论上一个物体的所有点到质心的距离(带方向)总和为0,因此损失函数:
\[L^D_{bg} = \frac{1}{P_{bg}}\sum_{(i,j)\in P_{fg}}|\delta(i,j)| \]这样就完成了网络中的对于“物体中心点预测”的损失函数的定义。
分支3:物体边界预测
上面找到的像素对可不只是为物体中心预测准备的,而是也可以用于物体的边界预测。这篇文章引入了像素对关联度\(a_{ij}\)的概念:
\[a_{ij} = 1 - max_{k\in\Pi_{ij}}B(x_k) \]其中,\(B(x_k)\)表示边界,\(\Pi_{ij}\)表示一个像素对\((i,j)\)之间的所有点。即当所有点中最大的点\(x'\)满足\(B(x')=1\),则有\(a_{ij} = 0\)。两个点之间的像素对关联小,也就意味着两个点之间可能存在着边界。
因此,对于正像素对和负向素对的定义,可以得到边界预测的损失函数:
\[L^B = -\sum_{(i,j)\in P_{fg}^+}\frac{log\ a_{ij}}{2|P_{fg}^+|} - \sum_{(i,j)\in P_{bg}^+}\frac{log\ a_{ij}}{2|P_{bg}^+|} - \sum_{(i,j)\in P^-}\frac{log(1-a_{ij})}{|P^-|} \]分支2和分支3的loss合并
\[L = L^D_{fg} + L^D_{bg} + L^B \]最终IRNet的总体结构一览:
标签:sum,像素,CAM,fg,omega,物体,IRNet From: https://www.cnblogs.com/pab-oolongtea/p/17999715