Convolutional CRFs for Semantic Segmentation
这篇论文提出使用卷积版的Conditional Random Field(CRF)用于优化语义分割的结果。首先回顾(对写review的我此时是新学的) FullCRF的算法,然后提出了ConvCRF的算法以及implementation,作者代码已开源
FullCRF
CRF的原意在于让特征相似的点输出相似的值,最后转换为优化一下这个条件概率: E(ˆx|I)=∑i≤Nψu(ˆxi|I)+∑i≠j≤Nψp(ˆxi,ˆxj|I)
第一项为基础全语义分割网络输出的值,第二项体现图片中不同位置的相互影响。FullCRF中,第二项计算公式为 ψp(xi,xj|I):=μ(xi,xj)M∑m=1w(m)k(m)G(fIi,fIj) 其中μ(xi,xj)=|xi≠xj|也就是图中每一个点(除了点i之外).常用的核函数k有如以下的高斯函数
k(fIi,fIj):=w(1)exp(−|pi−pj|22θ2α−|Ii−Ij|22θ2β)+w(2)exp(−|pi−pj|22θ2γ)
其中w(1),θ等是仅有的可学习参数,直觉而言,就是特征相似者相互影响大,距离近者相互影响大。
最终实现的迭代算法:
ConvCRF
ConvCRF先假设两个曼哈顿距离大于一定阈值k的点相互独立,这个k称为ConvCRF的filter size.这也就是ConvCRF对前文μ(xi,xj)的预设方式
对于位于x,y的点它对应的卷积核/CRF核为 kg[b,dx,dy,x,y]:=exp(−d∑i=1|f(d)i[b,x,y]−f(d)i[b,x−dx,y−dy]|22˙θ2i)
其中θi为可学习的变量fi为特征向量,卷积范围内的每一个pair有一个对应的,K=∑si=1wigi结果Q,combined message则由此式子给出
Q[b,c,x,y]=∑dx,dy≤kK[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,参考)