Weakly Supervised Semantic Segmentation with Boundary Exploration论文解读
Weakly Supervised Semantic Segmentation with Boundary Exploration论文解读
摘要:为了在弱监督下获得语义分割,本文提出了一种简单而有效的方法,该方法基于从训练图像中显式探索对象边界以保持。 具体来说,我们通过利用从分割和边界的一致率。具体来讲,利用CNN分类器获得的粗定位映射来合成边界注释,并使用注释来训练本文提出的称为BENet的网络,BENet可以进一步挖掘更多的对象边界来为语义分割提供约束。 最后,利用生成的训练图像伪注释来监督一个现成的分割网络。 我们在PASCALVOC2012基准上对所提出的方法进行了评价,最终结果分别在VAL和测试集上获得了65.7%和66.6%的mIoU分数,其性能优于VAL和测试集 以前的方法是在图像级别的监督下训练的。
再结合一下后面的知识可以得到:本文其实就是利用边界探索的思想提出了一个名叫BENet的网络,该网络可以在图像级标签的约束下得到边界标签,用这个边界标签的约束去修订粗定位映射从而得到语义分割。最后是用得到的语义分割图去训练一个现成的语义分割网络(文中采用的deeplab)。这样整个流程下来就实现了弱监督的语义分割。整个的算法框架如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cerw0Sha-1603364941082)(C:\Users\Ambition_Kingo\AppData\Roaming\Typora\typora-user-images\image-20201020162200439.png)\
一、第一个问题就是局部定位位映射怎么得到?也就是上图中绿色框的部分。文中基于CAM,提出了一个基于注意力模型的CAM算法,基于CAM,得到了局部定位映射。原文3.2节(Attention-Pooling CAM to Obtain Localization Maps)
一、Location Map 的边界探索
1.1 CAM背景知识补充
CAM,全称class activation map。在Learning Deep Features for Discriminative Localization这篇文章中,作者提出了CNN网络除了具有很强的图片处理,分类能力;同时还能够针对图片中的关键部分进行定位,这个过程被称为Class Activation Mapping,简称CAM。简单来讲 CAM就是提取出一副图像中关键的信息,像素越关键,热量就越高。
在这里插入图片描述
CAM的网络架构,如下图所示。输入一张图片,然后进过CNN网络提取出许多feature map,每个fearure map都能够表示出整个网络的部分特征。这里的CNN网络可以使用VGG啊,或者google net系列的例如inception等等,但是有这样一个问题,我们认为feature map还保留着图片的空间信息,这也是为什么最后通过ifeature map的叠加可以得到class activation map的原因。而通常的网络中会选择全连接层进行图片特征图向特征向量的转换在这个转换过程中就会丢失空间信息,所以文中采用global average pooling(GAP)来代替fully connected。然后将生成的这个值,最后通过一个全连接层实现相应的分类结果,相应的全连接层的权重称为相应的权重w1,w2.。。。。。
我们这样想最后生成的结果分类结果,其实就是pool之后的值与相应权重的乘积,相应的这个pool值是由GAP生成的,所以最后分类的结果可以看为是特征图与权重的乘积,这时候权重就代表了每个特征图对于最后结果的贡献程度,那么假如我们将特征图乘以权重直接相加,那么对于最后结果影响大的地方因该有相对较大的值,小的地方有相对较小的值,这个过程也就是CAM的原理讲解。具体的过程可以看图二的下面部分,了解具体操作。
个人理解:通过cnn后我们可以得到很多通道特征图,每个特征都对分类有贡献,比如说绿色的特征图可能对分类为狗子贡献更大,红色的特征图可能对分类为人特征更大,这个贡献就体现在不同类别的对应权重上,所以在经过监督学习后,绿色特征图对应于类别为人的特征就特别大(如图中的绿色权重Wn,假设最后加黑的输出时分类为人的可能性的话)。所以将每个特征图全局池化后为向量后乘以不同类别的权重向量并求和得到的就是对应类别的得分,得分最高的即为最后的分类结果。CAM其实就是将各个特征图乘以不同权重后叠加组合成的热度图,如figure2的下面的那副图。
GAP:全局平均池化,把整个图像(通道)相加取平均,最后输出一个数,最早出现在network in network 这篇文章中。
1.2 attention pooling CAM
用GAP来提取CAM虽然简单有效,但也存在一些问题,即潜在的给每个像素都分配了相同的权重,这会鼓励不相关的区域也做出响应。所以本文作者在此基础上提出了基于attention pooling 的CAM。
和之前一样,attention pooling来提取CAM也保留了前面的FCN网络,然后把本来用GAP的地方用attention pooling来替代了。attention pooling其实就是通过类别C的location map MC来得到一个注意力图AC。最后的类别分数是
其中,M_i^C是类别C的location map 的第i个像素,AiC生成的注意力池化图的第i个元素。AC的计算方法如下,K是一个常数。J是在M^C中的像素集合。
值得注意的是对于一张输入图片,会有C个location map,C 是总类数。第一次迭代时的CAM图是由随机的W权重得到的。
1.3合成边界标签
我们通过CAM得到了location map后,就可以来合成一些可以信赖的边界标签了,并用这些来标签来训练BENet,BENet在训练好后又可以得到更多物体的边界标签。原文We fifirstly exploit localization maps tosynthesize a small amount of credible boundary labels, and then these are used to explore more boundary cues through training BENet
由于上面得到的边界标签是一个高维矩阵,矩阵的每个元素代表了对应位置的像素是类别C_i的可能性,所以我们先把这个矩阵合成为类别矩阵(即得到确定的每个像素的类别)。公式如下
其中0和255分别代表背景标签和不确定类别的标签, θ f g \theta_fg θfg 和 θ b g \theta_bg θbg 分别代表判断前景和后景的阈值。这之后又加了个dCRF(密集条件随机场)
有了上面的像素类别矩阵后,我们就可以开始合成边界了。合成边界的假设是:当相邻区域包含近似数目的相同前景后景像素,我们假设这个区域的中心像素是一个边界。原文:According to the defifinition of boundary, we assume that there exist boundaries where adjacent regions contain approximate numbers of identical foreground and background pixels.
而这个区域我们用一个滑动的窗口去获取,并统计窗口内的对应统计信息。给定一个中心位于i像素,尺寸为w的窗,我们用 N i c N^c_i Nic 来表示窗口内属于C类别的像素数目。窗口内每个类别的统计比例 S i c S^c_i Sic 的计算方式为:
一个像素是否被判定为边界的准则为:
- 窗内要有足够多的像素来支撑判别
- 窗内前景和背景区域的尺寸要足够接近
依据上面两条思想,边界判定的公式为:
其中,1代表是边界,0代表不是边界。255是其他。
1.4训练BENet
既然我们已经通过location map 得到了一批可信的标签,接下来我们就可以用他们去训练我们的BENet,进而得到更多边界了。BENet的损失函数如下:
其中,Pi是BENet输出的i 像素是边界的可能性。三个 Φ \Phi Φ 分别是边界集合,前景像素集合以及背景像素集合。上面其实就是针对三个集合的交叉熵。其中 W i = P i W_i=\sqrt{P_i} Wi=Pi ,他的作用文中是这样说的:To reduce the heavy dependence on synthetic boundary labels which may contain some misclassifified samples, we relax the assumption that all boundary labels are reliable by adding a weight parameter W i W_i Wi in the boundary loss term. 我们可以这样思考,如果某个像素被标记为边界,单很低的 P i P_i Pi 代表着是前景或者背景的可能性更大,那么开根号后的权重就会想必别的权重进一步减小,从而降低他的影响。
2、修改已探索边界的的location map
训练好的BENet可以挖掘物体的大边界,所以,我们可以用BENet的预测输出来作为约束来指导粗location map的传播。约束的方法用的是random walk,随机徘徊。
之后,再将生成的边界矩阵B转化为语义亲和矩阵,亲和矩阵的每个元素 a i j a_ij aij 表示表示原边界矩阵B中i和j 像素间的亲和度。其计算方法如下:
其中 Π i j \Pi_ij Πij 表示从i到j的像素集合。最后将随机游走迭代完后的矩阵乘以location map,就完成了传播,最后再用dCRF来轻微的修正分割的效果。
3.用BES框架生成的语义分割图去训练现有的语义分割网络,文中选取的是deeplab。
一些其余的实现细节
Attention Pooling CAM:文章CAM这块用的是ResNet50作为骨干,只是将最后的全连接改成了1*1的卷积,此外还将resnet50中最后一个阶段的卷积步长由2变成了1,因为最后location map的分辨率是原始图像的1/16.具体见下图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SzXs5gh0-1603364941092)(C:\Users\Ambition_Kingo\AppData\Roaming\Typora\typora-user-images\image-20201022184402286.png)]
BENet: BENet是基于在ImageNet上预训练好的ResNet50来构建的。为了完全混合不同尺度的特征,来自浅层和深层网络的特征在第五阶段被concat并且连接上一个1*1的卷积层。
3、实验结果
3.1消融实验
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n1ITmnfT-1603364941092)(C:\Users\Ambition_Kingo\AppData\Roaming\Typora\typora-user-images\image-20201022185301362.png)]
3.2 边界评估
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f9CUUyk4-1603364941092)(C:\Users\Ambition_Kingo\AppData\Roaming\Typora\typora-user-images\image-20201022185920015.png)]
3.3语义分割的效果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AdXc3uYK-1603364941093)(C:\Users\Ambition_Kingo\AppData\Roaming\Typora\typora-user-images\image-20201022185953696.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ijjppRYu-1603364941093)(C:\Users\Ambition_Kingo\AppData\Roaming\Typora\typora-user-images\image-20201022190007862.png)]
3.4一些失败的案例
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9QT5aOZH-1603364941094)(C:\Users\Ambition_Kingo\AppData\Roaming\Typora\typora-user-images\image-20201022190324309.png)]
文章中说这种失败的原因主要有两个。
3.5和当前前沿技术的比较
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rzAcPk99-1603364941094)(C:\Users\Ambition_Kingo\AppData\Roaming\Typora\typora-user-images\image-20201022190509049.png)]
我们可以观察到,由BES生成的语义标签有助于DeppLab-ASPP在Val和测试集中优于所有列出的图像级监督方法。