pdf code

Convolutional CRFs for Semantic Segmentation

这篇论文提出使用卷积版的Conditional Random Field(CRF)用于优化语义分割的结果。首先回顾(对写review的我此时是新学的) FullCRF的算法,然后提出了ConvCRF的算法以及implementation,作者代码已开源

FullCRF

CRF的原意在于让特征相似的点输出相似的值,最后转换为优化一下这个条件概率: E(ˆx|I)=iNψu(ˆxi|I)+ijNψp(ˆxi,ˆxj|I)

第一项为基础全语义分割网络输出的值,第二项体现图片中不同位置的相互影响。FullCRF中,第二项计算公式为 ψp(xi,xj|I):=μ(xi,xj)Mm=1w(m)k(m)G(fIi,fIj) 其中μ(xi,xj)=|xixj|也就是图中每一个点(除了点i之外).常用的核函数k有如以下的高斯函数

k(fIi,fIj):=w(1)exp(|pipj|22θ2α|IiIj|22θ2β)+w(2)exp(|pipj|22θ2γ)

其中w(1),θ等是仅有的可学习参数,直觉而言,就是特征相似者相互影响大,距离近者相互影响大。

最终实现的迭代算法:

image

ConvCRF

ConvCRF先假设两个曼哈顿距离大于一定阈值k的点相互独立,这个k称为ConvCRF的filter size.这也就是ConvCRF对前文μ(xi,xj)的预设方式

对于位于x,y的点它对应的卷积核/CRF核为 kg[b,dx,dy,x,y]:=exp(di=1|f(d)i[b,x,y]f(d)i[b,xdx,ydy]|22˙θ2i)

其中θi为可学习的变量fi为特征向量,卷积范围内的每一个pair有一个对应的,K=si=1wigi结果Q,combined message则由此式子给出

Q[b,c,x,y]=dx,dykK[b,dx,dy,x,y]P[b,c,x+dx,y+dy]

作者提到,这个运算操作可以说类似于locally connected layers(every pixel has its own filter),区别在于每一个kernel在channel方向上是一个常数(只负责加权求和整个feature vector而不需要重整feature)。

(题外话,locally connected layer目前有keras implementation但是还没有officail pytorch implementation,参考)