2013-11-25 40 views
2

我有一个图像处理问题,我想我可以用它来学习更多关于PyMC3的实验。我花了很多时间摆弄非线性求解器和蛮力方法,至今没有任何东西让我开心。使用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的好处吗?

回答

3

以上指定你会被并入PyMC模型作为确定性节点,​​在那里它是基于一些(大概)随机父节点(您的参数)中计算出的函数。然后这个节点将被连接到一个可能性(观察随机节点),该可能性提供了拟合参数的信息。例如,您可能有一些参数分布,用于描述process_and_compare对应于度量输出的错误分布。

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

至于Theano推移,后面利用它作为PyMC依赖性的动机是由于以下事实:当前状态的最先进的在MCMC涉及使用梯度信息,因此我们需要计算梯度的能力任意模型。我们希望最终从它的GPU能力中获益,但现在它只是为梯度。所有PyMC的对象是3版本Theano张量,因此,如果您有其他Theano计划建设贝叶斯模型的情况下,那么它可能可以进行工作。例如,我们可能最终要落实在PyMC的概率图模型,所以Theano可能会促进这一点。