返回介绍

FCN(3) - DenseCRF

发布于 2025-02-25 23:05:00 字数 4122 浏览 0 评论 0 收藏 0

上一回我们简单介绍了无向图模型和 CRF 的基本概念,下面我们来看看 CRF 在图像分割问题上的具体应用。我们简单回忆一下 CRF 中的两个关键变量,这时我们需要换一下变量的名称 - 我们用 I 表示图像的像素信息,也就是观察变量,我们用 X 表示图像中每一个像素的类别,也就是我们想要知道的信息。不过在更多的文档中,大家喜欢用 X 表示图像上的像素,用 Z 表示我们想求的 label。

好了,为了更好地展示我们提到的模型,我们给出一个简单的图形:

下面的就是我们建模的过程了,最简单的建模方式就是每一个像素的类别只和自己所在的像素有关。我们可以用一个简单的图来表示:

这个图看上去比较简单吧,而且计算也比较简单。我们可以建一个模型,输入是一个像素的特征,输出是一个像素所代表的类别。那么这个模型和一般的分类问题没有太多区别。

不过这样的效果显然不好,谁能只通过一个像素就知道这个地方是什么类别呢?这个模型虽然简单好解,但是我们一眼就可以看出,它并不是一个高级的模型,所以这个模型 pass 了。不要问我什么理由……

下面我们再来一个模型,每一个像素的类别和所有像素的图像信息有关,这个模型实际上就和 FCN 的输出相同,我们可以用下面的图表示这个模型:

CNN 模型虽然很强大,但是 CNN 模型缺少一个关键点,就是每一个像素点类别之间实际上存在着一定关系,也就是我们常说的图像的平滑性 - 每一个图像像素点的类别都有可能和临近点的类别相近,这个特性是 CNN 模型所不具有的。所以我们对这个模型也保留意见。

于是我们新鲜出炉的新模型又来了 - 这一次我们让每一个像素点的类别和它的 4 邻域的类别相关,于是它的模型变成了这个样子:

这个模型瞬间高大上了许多,我们前面提到的平滑性已经得到了一定的满足。但是有时候仅仅是这种程度的关联是不够的,如果临近的几个像素恰好产生了一点波动,不是我们想要的那个样子,那么这个像素点的类别就有可能出问题。我们还需要更深层次的关联。于是乎,传说中的 denseCRF 就诞生了。

denseCRF 的模型是什么样子呢?如下图所示:

好吧,基本上能连在一起的都连在一起的,我们把模型的复杂程度提到了最高的程度,完全成了一团乱麻了……

Dense CRF

我们看过了它的模型形式,下面直接来看看模型的能量函数表达形式:

E(x)=\sum_i \psi _u(x_i)+\sum_{i<j}\psi_p(x_i,x_j)

可以看出每一个像素都有一个 unary 的函数,也就是说在这个特征函数里 w,剩下的参数都出现在图像的像我们只考虑当前像素的类别,而暂时不考虑别的像素的类别信息。

而后面的 pairwise 函数里,每一个像素的类别都和其他像素计算一个 energy feature。于是就有了上面的公式形式。注意这里的能量函数是所有像素点的联合能量和不是某一个像素点的能量,所以后面的 pairwise 项,我们有 n(n-1)/2 组特征,总的来说,特征数量是像素数量的平方级别,如果我们有一张 100 万像素的图片,那么我们就会建立 4950 亿组 pairwise 特征。正是因为这种复杂的形式,所以这个模型被称作 Dense CRF。满满的全是 dense 啊!

关于 unary 函数的内容,我们可以尽情发挥,在 denseCRF 中我们并没有对这一部分做详细的限制。因此关于这部分我们就暂时略去不谈了,在后面的文章中我们会重新回来,挖掘 unary 函数的潜力。下面我们专注于解决 pairwise 这个大坑。

下面我们讲 piarwise 部分展开,其中

\psi_p(x_i,x_j)=\mu(x_i,x_j)\sum_{m=1}^Kw^{(m)}k^{(m)}(f_i,f_j)

可以看出,pairwise 函数中还是比较复杂的,我们从左往右以此介绍。

首先是\mu(x_i,x_j),这一项被称作 label compatibility 项,简单来说这里约束了“力”传导的条件,只有相同 label 条件下,能量才可以相互传导。具体来说,“一个像素可能是飞机”的能量可以和“另一个像素可能是飞机”的能量相互传导,从而增加或者减少后者“可能是飞机”的能量,从而影响“可能是飞机”的概率,而“一个像素可能是飞机”的能量是不能影响“另一个像素是人”的概率的。

文章中也提到了,这个简单地一刀切似乎有点不人性。拿 Pascal-VOC 中的 20 类+背景类来说,有些类别之间的相似性是很强的,而另外一些类别则完全不相似,所以作者后面提到了一些学习相关的事情,这里我们就不再深入下去了。

加和项里面就是经典的权重*feature 的套路了,其中

k^{(m)}(f_i,f_j)=w^{(1)}exp(-\frac{|p_i-p_j|^2}{2\theta_{\alpha}^2}-\frac{|I_i-I_j|^2}{2\theta_{\beta}^2})+w^{(2)}exp(-\frac{|p_i-p_j|^2}{2\theta_{\gamma}^2})

这一项以特征的形式表示了不同像素之前的“亲密度”。前面我们提到了特征不同于 tabular 形式的 factor,我们看不到表格,只能看到公式。上面的公式中,第一项被称作 appearance kernel,第二项被称作 smooth kernel。这里面有很多变量,我们一一来看。

appearance kernel 里面的 p 表示像素的位置 - position,我们的图像是 2 维的,那么 position 就有 2 维。I 表示图像的像素值 - Intensity,我们的图像是彩色的,那么 Intensity 就有 3 维。分式下面的两个参数无论从位置还是长相都像高斯分布中的方差,这里的含义也差不多的。

于是乎我们可以看出,如果两个像素距离近且颜色近,那么这个 feature 特征就会很强,反之则不强。同时分母也控制了强弱性,分母越大越难强起来。其实这一项和图像处理中的 bilateral filter 很像。我们相当于在一个 5 维的空间内寻找相近的像素对并给予它们的特征加强。

看完了前面一项,在看后面那一项就不会觉得太难。大家照着上面那一段话自行分析吧。

好了,到这里我们就交代完 DenseCRF 的表达形式了,下面就要进入 Mean field variational inference 的环节了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文