AdvErasing
paper: Object Region Mining with Adversarial Erasing: A Simple Classification to Semantic Segmentation Approach
文章发表在2017年的CVPR上,同样的也是基于CAM进行后续处理。
作者考虑到CAM网络是通过训练辨别模型从而得到score map/heat map。所以无可避免主要的激活区域总是在最具辨识度(discriminate)的地方,如果能够解决这个问题,一定能改善CAM的效果。所以这是本文的第一部分工作,AE算法(adversarial erasing)。在此基础上,作者还提出了第二个算法PSL(Prohibitive Segmentation Learning)。
AE
作者为了完成CAM的分类网络(从feature map到点的转换使用平均池化),使用了强监督下表现良好的DeepLab-CRF-LargeFOV模型(当然,Deeplab也是基于VGG16)。
- 使用 n n n张训练集第一次训练模型至收敛,这样训练图像 I i ( i = 1 , 2 , . . . n ) I_i(i=1,2,...n) Ii(i=1,2,...n),输出各个类别的score map/heat map,设置阈值得到图像中存在类别集合 L L L的判别区域 R i , l R_{i,l} Ri,l, l ∈ L l\in L l∈L。
- 更新训练集,对于图像 I i I_i Ii将识别得到的所有类别 l l l的区域 R i , l R_{i,l} Ri,l擦去,即 I i = I i ∖ R i , L I_i=I_i\setminus R_{i,L} Ii=Ii∖Ri,L。擦去的方法是将这些区域的像素值设为训练集的平均像素值。
- 使用更新后的训练集重新训练(第二次)训练模型至收敛,重复2操作。
- 如法炮制,一直到图像中已经没有显著的属于类别的信息了,作者实验发现(训练-擦除)执行三次的效果最棒。
PLUS~:作者这里得到背景语义图的方式也是基于saliency。
PSL
AE能够得到不错的效果,但是会存在两个问题:
- 部分像素点位置的归属不确定,即前景和背景的置信度都很低,不知道该归到哪个类。
- 存在误判,比如识别出不存在于图像中的物体。
PSL是作者提出的在线算法。即随着训练的收敛,输出结果逐渐优化,label也会近一步的优化,从而达到更进一步的监督。
PSL个人认为和MIL-seg中的ILP一模一样…设S是经过AE后得到的识别结果,PSL思路就是将CAM中的类别置信度乘上
S
S
S中对应类别的feature map,在通过
arg
max
\arg \max
argmax合成最终的语义分割图。
具体做法如下:
- 设AE输出的各个类别预测结果为 f ( I , θ ) f(I,\theta) f(I,θ),合成最终的预测结果为 S S S,即 S = max { f ( I ; θ ) } S=\max\{f(I;\theta)\} S=max{f(I;θ)}。
- 设 v \boldsymbol{v} v是AE/CAM中对图像中的类别置信度。
- 设 S ^ \hat{S} S^是 f ( I , θ ) f(I,\theta) f(I,θ)加工优化在合成的预测结果。即 S ^ = max { [ 1 , v ] ⊗ f ( I ; θ ) } \hat{S}=\max \{[1, \boldsymbol{v}] \otimes f(I ; \theta)\} S^=max{[1,v]⊗f(I;θ)},即对应背景的fearure map,乘上系数1(因为一张图里肯定有背景,所以背景置信度肯定为1),对于其他识别出的前景分割图,分别乘上对应的类别置信度。
这样PSL部分的loss为:
min
θ
[
∑
I
∈
I
−
1
∑
c
∈
O
s
e
g
∣
S
c
∣
∑
c
∈
O
seg
∑
u
∈
S
c
log
f
u
,
c
(
I
;
θ
)
−
1
∑
c
∈
O
s
e
g
∣
S
^
c
∣
∑
c
∈
O
s
e
g
∑
u
∈
S
^
c
log
f
u
,
c
(
I
;
θ
)
]
\min _{\theta}[ \sum_{I \in \mathcal{I}}-\frac{1}{\sum_{c \in \mathcal{O}^{s e g}}\left|S_{c}\right|} \sum_{c \in \mathcal{O} \operatorname{seg}} \sum_{u \in S_{c}} \log f_{u, c}(I ; \theta)-\frac{1}{\sum_{c \in \mathcal{O}^{s e g}}\left|\hat{S}_{c}\right|} \sum_{c \in \mathcal{O}^{s e g}} \sum_{u \in \hat{S}_{c}} \log f_{u, c}(I ; \theta)]
θmin[I∈I∑−∑c∈Oseg∣Sc∣1c∈Oseg∑u∈Sc∑logfu,c(I;θ)−∑c∈Oseg∣∣∣S^c∣∣∣1c∈Oseg∑u∈S^c∑logfu,c(I;θ)]
对于上式的理解:
损失函数可以看作两个部分,分别是
S
S
S与
S
^
\hat{S}
S^的损失估计,我们希望
S
S
S中正确预测的各个像素的置信度尽可能的高/趋紧于1,同样的,对于优化后的输出
S
^
\hat{S}
S^,我们也希望对于其预测出的且确实存在该类的置信度也尽可能的高/趋紧于1。
PSL和MIL-seg的ILP的区别:
在MIL-seg中,作者是将ILP作为后场处理,而本文中作者将PSL作为一个损失函数来迭代优化,使得其融入训练中。
疑问:
所以为什么要这样设计同时优化
S
S
S和
S
^
\hat{S}
S^呢?如果优化
S
S
S和
S
^
\hat{S}
S^的交叉熵,使得
S
S
S趋紧于
S
^
\hat{S}
S^好像也不错?毕竟SEC中把CRF的效果也直接让DCNN预测就是通过计算CRF前后的交叉熵来诱导DCNN。
test时:
测试时,作者采用更加严格的约束,对于类别置信度低于一定阈值的直接置为0,就是直接把对应类别的feature map直接删去。
addition
当然AE+PSL之后还使用了CRF进行后场处理。
performance
VOC12 val | VOC12 test | |
---|---|---|
AE | 50.9 | - |
AE+PSL | 54.1 | - |
AE+PSL++ | 55.0 | 55.7 |
PSL++:PSL训练收敛好后,生成的segmentation mask经过CRF优化后得到了refined segmentation mask,将其作为superivsion在训练一次网络,收敛后得到的输出。