2013-11-25 146 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可能會促進這一點。