機器學習:利用卷積神經網絡實現圖像風格遷移 (一)
來源:程序員人生 發布時間:2017-03-07 08:48:38 閱讀次數:6901次
相信很多人都對之前大名鼎鼎的 Prisma 早有耳聞,Prisma 能夠將1張普通的圖象轉換成各種藝術風格的圖象,今天,我們將要介紹1下Prisma 這款軟件背后的算法原理。就是發表于 2016 CVPR 1篇文章,
“ Image Style Transfer Using Convolutional Neural Networks”
算法的流程圖主要以下:

總得來講,就是利用1個訓練好的卷積神經網絡 VGG⑴9,這個網絡在ImageNet 上已訓練過了。
給定1張風格圖象 a 和1張普通圖象 p,風格圖象經過VGG⑴9 的時候在每一個卷積層會得到很多 feature maps, 這些feature maps 組成1個集合 A,一樣的,普通圖象 p 通過 VGG⑴9 的時候也會得到很多 feature maps,這些feature maps 組成1個集合 P,然后生成1張隨機噪聲圖象 x, 隨機噪聲圖象 x 通過VGG⑴9 的時候也會生成很多feature maps,這些 feature maps 構成集合 G 和 F 分別對應集合 A 和 P, 終究的優化函數是希望調劑 x 讓 隨機噪聲圖象 x 最后看起來既保持普通圖象 p 的內容, 又有1定的風格圖象 a 的風格。
content representation
在建立目標函數之前,我們需要先給出1些定義: 在CNN 中, 假定某1 layer 含有 Nl 個 filters, 那末將會生成 Nl 個 feature maps,每一個 feature map 的維度為 Ml , Ml 是 feature map 的 高與寬的乘積。所以每層 feature maps 的集合可以表示為 Fl∈RNl×Ml , Flij 表示第 i個 filter在 position j 上的 activation。
所以,我們可以給出 content 的 cost function:
Lcontent(p,x,l)=12∑ij(Flij?Plij)
style representation
為了建立風格的representation,我們先利用 Gram matrix 去表示每層各個 feature maps 之間的關系,Gl∈RNl×Nl , Glij 是 feature maps i,j 的內積:
Glij=∑kFlikFljk
利用 Gram matrix,我們可以建立每層的關于 style 的 cost :
El=14N2lM2l∑i,j(Glij?Alij)2
結合所有層,可以得到總的cost
Lstyle(a,x)=∑l=0L
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
------分隔線----------------------------
------分隔線----------------------------