使用PyMC3进行多图像处理

时间:2013-11-25 18:11:30

标签: python image-processing bayesian pymc mcmc

我有一个图像处理问题我认为我可以用来试验更多关于PyMC3的知识。我花了很多时间摆弄非线性求解器和蛮力方法,到目前为止没有什么能让我高兴。

我遇到的问题涉及一种复杂的方法,用于共同注册同一场景的两个图像,但以不同的方式记录。考虑尝试将常规黑白可见图像与热红外图像匹配。或者,从医学成像的角度来看,想一想将MRI数据与X射线数据进行匹配。

为了简单起见,我可以用以下函数表示我的数据处理工作流程:

def process_and_compare(image_src, image_dst, parameters):
    """
    Parameters
    ----------
    image_src : 2D array
    image_trg : 2D array
    parameters : sequence of 7 scalars defining image transform

    Output
    ------
    metric : Scalar value indicating how well the transformed source image
             matches up with the target image.
    """

    image_src_warp = image_warper(image_src, parameters)
    metric = compare_two_images(image_src_warp, image_trg)

    return metric

此功能将两个图像和一个模型参数矢量作为输入。内部发生了一些复杂的数字运算。当它完成时,返回一个标量,表示模型(仅由参数向量定义)与两个图像对齐的程度。目前,关于源图像如何变形或如何比较两个图像的细节是黑盒子。最后,我最终得到的主要结果是与模型相对应的扭曲图像,从而产生最佳匹配。但是现在当我还在玩我的算法时,我想我可以通过可视化我的模型参数的后验分布来学习一些简单的测试用例图像。我最初认为PyMC会让这很容易,但是一旦我开始研究实际的实现细节,我就有点困惑了。

我已经查看了Thomas Wiecki最近的PyMC3 presentations,并通过Cam Davidson-Pilon阅读了很多伟大的在线书籍。到目前为止,我认为PyMC3与PyMC2的新功能(部分)是时髦的模型规范syntax并自动使用Theano来处理加速。

在我到目前为止看到的示例中,看起来现在通常使用新的语法系统完全指定数据模型。但就我而言,我有更复杂的功能。

以下是我的问题:

  1. 有人能指出我现有的PyMC示例,其中涉及作为用户功能实现的黑匣子数据模型吗? PyMC2或PyMC3都很棒!

  2. 一旦我弄清楚如何使用PyMC3,我能否在我的Python数据模型函数中深深体会到Theano的好处?

1 个答案:

答案 0 :(得分:2)

您在上面指定的函数将作为确定性节点合并到PyMC模型中,其中它基于一些(可能是)随机父节点(您的参数)进行计算。然后,该节点将下游连接到提供用于拟合参数的信息的似然(观察到的随机节点)。例如,您可能有一些参数分布,用于描述与process_and_compare输出的度量标准对应的错误分布。

PyMC wiki在PyMC 2的一系列域中有几个模型示例。在主分支的pymc/examples文件夹中有PyMC 3示例。

就Theano而言,使用它作为PyMC依赖的动机是因为MCMC当前最先进的技术涉及使用梯度信息,因此我们需要能够计算任意梯度楷模。我们希望最终能够从其GPU功能中受益,但现在它只适用于渐变。所有PyMC的对象都是版本3中的Theano张量,所以如果你在构建贝叶斯模型的背景下有其他的Theano计划,那么很有可能它可以工作。例如,我们最终可能希望在PyMC中实现概率图形模型,因此Theano也可能会为此提供便利。