【博客存檔】風格畫之最後一彈MRF-CNN

前言

前面有兩篇將圖像風格化的文章TensorFlow之深入理解Neural StyleTensorFlow之深入理解Fast Neural Style,講了業界關於Neural Style的基本研究,從最開始的基於pretrained的vgg模型,來做loss,前面的會去更新vgg模型中的weight來最小化loss,後面是更新transform network(deep residual network)的weight來使loss Network的total loss 最小化,後面這套,我run了下項目代碼,但是除了梵高的星空那張tyle的圖像,其他效果太差,合成的圖像基本無法看到content,試過各種不同的content|style權重比,好像效果都挺差的,有小夥伴在這塊有做過實驗,請指導下,或者有其他框架下面效果比較好的開源項目也請告知下,先謝謝了;上次在Deep Meet up, 周昌大神分享風格畫,提到結合MRF和CNN的相關工作,感覺挺有意思的,paper在這兒Combining Markov Random Fields and Convolutional Neural Networks for Image Synthesis,我找到了兩個相關的github項目github.com/chuanli11/CN作者的開源,基於torch的項目代碼,github.com/awentzonline,基於keras的一個開源項目,可以基於tensorflow的backend。

Paper原理

MRF是在圖像處理中一種經典方法, 圖像分割、合成均有用到,1999年時就在ICCV上有paper Texture Synthesis by Non-parametric Sampling,然後還有一篇我覺得比較給力的文章Markov Random Fields for Super-resolution and Texture Synthesis,而MRF的能力在於學習數據中所有k*k大小的圖像塊之間的相關性,通常使用簡單的近鄰規則,具體原理看看上面兩篇paper。

Combining Markov Random Fields and Convolutional Neural Networks for Image Synthesisnerual style那篇文章不同的是在style定義上,nerual style那篇,style是各層不同loss的加權和來做style loss,通過最小化content loss 和style loss來更新像素值,得到合成的圖像, 但是這裡使用MRF來編碼style,最終最小化energy function:

其中,差別最大的就是MRF loss function:

對每一個patch,通過normlizaed cross-correlation來找到最匹配的patch:

Content loss function

最後,從圖像的neural encoding重構圖像時,會產生noisy,文章,通過增加squared gradient norm來保證最終圖片的平滑性:

基本的原理就是這些,想要了解更多細節的去讀下這篇paper

源碼

paper作者開源了他的工作,github.com/chuanli11/CN,因為之前都沒有怎麼了解過torch,所以源碼看起來有點麻煩, 尤其是MRF那塊看得不是特別懂,另外作者自己寫了個lbfgs函數,源碼部分大家就去看看吧,我也好好研究,尤其是mrf.lua,看起來很複雜,其他的代碼模式好像是繼承nn.Module,然後重寫其中一些函數來滿足自己的需求,感覺編程模式和tensorflow差別有點大,適應起來有點麻煩。

另外有個基於keras的實現github.com/awentzonline

Result

代碼分析不夠,結果來湊,MRF+CNN來做風格化效果相當棒,下面是跑一些結果

以孫悟空的臉為style:

以金城武的人臉為style:

以某張素描分割為style:

總結

一系列的Neural Style的工作中,MRF來建模Style,效果看起來最好,但是訓練時間由於MRF的patch match,速度挺慢的,前面其他的方法,感覺都可以再次基礎上改善效果,另外感覺也可以試著用其他的方法來建模Style,希望之後能看到更多提升的paper。


推薦閱讀:

深度學習對話系統實戰篇--老版本tf.contrib.legacy_seq2seq API介紹和源碼解析
拔了智齒,疼滴想屎。
【博客存檔】深度學習之Neural Image Caption
[乾貨|實踐] TensorBoard可視化

TAG:计算机视觉 | 深度学习DeepLearning | TensorFlow |