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)。
- 使用nnn张训练集第一次训练模型至收敛,这样训练图像Ii(i=1,2,...n)I_i(i=1,2,...n)Ii(i=1,2,...n),输出各个类别的score map/heat map,设置阈值得到图像中存在类别集合LLL的判别区域Ri,lR_{i,l}Ri,l,l∈Ll\in Ll∈L。
- 更新训练集,对于图像IiI_iIi将识别得到的所有类别lll的区域Ri,lR_{i,l}Ri,l擦去,即Ii=Ii∖Ri,LI_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中的类别置信度乘上SSS中对应类别的feature map,在通过argmax\arg \maxargmax合成最终的语义分割图。
具体做法如下:
- 设AE输出的各个类别预测结果为f(I,θ)f(I,\theta)f(I,θ),合成最终的预测结果为SSS,即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∈Oseg∣Sc∣∑c∈Oseg∑u∈Sclogfu,c(I;θ)−1∑c∈Oseg∣S^c∣∑c∈Oseg∑u∈S^clogfu,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;θ)]
对于上式的理解:
损失函数可以看作两个部分,分别是SSS与S^\hat{S}S^的损失估计,我们希望SSS中正确预测的各个像素的置信度尽可能的高/趋紧于1,同样的,对于优化后的输出S^\hat{S}S^,我们也希望对于其预测出的且确实存在该类的置信度也尽可能的高/趋紧于1。
PSL和MIL-seg的ILP的区别:
在MIL-seg中,作者是将ILP作为后场处理,而本文中作者将PSL作为一个损失函数来迭代优化,使得其融入训练中。
疑问:
所以为什么要这样设计同时优化SSS和S^\hat{S}S^呢?如果优化SSS和S^\hat{S}S^的交叉熵,使得SSS趋紧于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在训练一次网络,收敛后得到的输出。