MIL+seg
paper: From Image-level to Pixel-level Labeling with Convolutional Networks
这是15年CVPR的文章,个人感觉架构和CAM有异曲同工之处。
与EM-adapt一样都是基于DCNN解决W3S问题。同样输入图像经过DCNN得到了张(原图12倍下采样)的特征图。由于我们的label是image-level,可以视作一个向量,对应存在的类别,其值为1,不存在的类别,其值为。
From freature maps to vector
由于DCNN输出的是特征图,所以要想办法将一张图映射到一个点,以方便与向量计算loss。常用的将feature map映射为点的做法可以是全局平均池化或者全局极大池化。但是都存在问题:
- 平均池化对于feature map各个位置的值都赋予相同的权重,即也考虑了那些不属于该类别的点,这将引入噪声。
- 极大池化只取feature map最大值的点作为输出,这将导致feature map倾向于在该类别最具辨识度处的点输出较大值。(实验表明极大池化不好训练,因为一开始各个点的值都很接近)
为了解决平衡极大池化的过分局部考虑以及平均池化的过多噪声,作者提出了LSE(Log-Sum-Exp)算法以参数化这一映射。对于第张大小的feature map,我们将其映射至点,参数,表示该feature map在位置上的值。
所以可以通过调整的大小以调整映射考虑局部和整体之间平衡。之后就是和分类模型一样的训练了。
ILP(Image-Level Prior)
训练好后得到了张feature maps以及分别LSE后得到的一个维向量。对于这个向量,我们可以理解为是对输入图像是否存在类别的概率。比如如果LSE后的,而对应的是猫,则意味着原图中存在猫的概率为。
那么这个判定结果(image-level)是有助于我们将张feature maps合成最终输出的。常见的合成方法是直接argmax,即对应各个位置,将最大值所在的feature map对应的类别作为该点的判定结果。有了ILP,我们就可以先将每张feature map上每个点乘上该类别的判别概率,得到优化后的feature map,之后在argmax操作得到输出。
| baseline w/o ILP | baseline w/ ILP |
|---|---|
之后如果则将判定为类别,否则判定为背景。
segmentation
ILP之后得到的图已经能够较好的包裹住物体,但是有false postive的情况,即包裹的区域大于实际物体的区域,所以需要进一步优化结果。思路是使用传统算法。作者实验发现基于MCG的建议区域效果最好。
performance
| VOC12 val | VOC12 test | |
|---|---|---|
| baseline | 17.8 | - |
| baseline+ILP | 32.6 | - |
| baseline+ILP+MCG | 42.0 | 40.6 |