先上效果图,CPNet彷佛对一些难样本有着更好的效果:
微信
文中提到了下面关键字:
构建了corresponding prior map(CPmap),而后经过Context Prior Layer(CPLayer)来把这个CPmap融合到网络中,与此同时,使用Affinity Loss来对应这个CPLayer。网络
关于上面这句话如何解读,我先留着疑问。机器学习
做者提出两个概念:ide
做者说,在图像分割任务中,每个图片都有对应的ground truth,可是ground truth中是每个像素所属于的类别,说模型很难从独立的像素中学习到contextual(上下文)信息,所以须要explicitly regularize network(显式的规范网络)。学习
在论文中,做者使用Affinity Loss来显式的规范网络.this
For each pixel in the image, this loss forces the network to consider the pixels of the same category (intra-context) and the pixels among the different categories (inter-context).idea
这个损失可让模型考虑同一类别的其余像素和不一样类别的其余像素。spa
在使用Affinity Loss以前,须要先构建Ideal Affinity Map。code
A is our desired Ideal Affinity Map with size N × N , which encodes which pixels belong to the same category. We employ the Ideal Affinity Map to supervise the learning of Context Prior Map.orm
这个A中每个1表示这一个像素和其余同一类别的像素,经过这个Ideal Affinity Map来训练CPMap
咱们用全卷积网络对Image进行特征提取,获得一个HxW的尺寸的特征图,这里咱们在上文已经说到了,可是没有说这个特征图的通道数是多少,看下图:
通道数是HxW,也就是上面提到的N,这样对于每个像素来讲,他的特征正好是1xN,这样和咱们获得的Ideal Affinity Map是否是恰好对应上了?
因此这里咱们就能够用简单的二值交叉熵来计算Predicted Prior Map和Ideal Affinity Map的损失:
这就完事了吗?并非:
However, such a unary loss only considers the isolated pixel in the prior map ignoring the semantic correlation with other pixels.
直观上感受,上面的其实只考虑了两个像素之间的关系,其实忽视了更多的语义关系。因此还须要另一部分损失。
a表示Idea Affinity Map中的元素,P表示从X获得的NxN的矩阵。
公式(2)表示,这里有点目标检测的味道了。
举个例子,假设总共有5个像素把:
做者原文:
对于公式(4),1-a恰好就是把0和1反过来了,这样1-a中的1表示的是不一样的两个像素,所以体现的是inter-class 不一样类的联系。
最后的最后,Affinity Loss为:
CPLayer的结构以下,忽然一看还挺复杂的:
这里来看一下aggregation module是如何整合了spatial information:
看起来就是用了两个并行的1xk和kx1的卷积,OK,这个地方不难。
这里我提示一下,怎么理解这个intra-class呢?从P中,能够找到一个像素和其余同类别的像素,从\(\widetilde{X}\)中,能够找到全部像素预测几率。所以Y中的每个像素的预测的几率值,实际上是考虑了同类别的其余像素的预测值综合起来的结果。所以这是一个类内上下文的综合考虑。
以前计算的affinity Loss在论文中是写做\(L_p\),
而后整个模型的损失: