1. 程式人生 > >機器學習:利用卷積神經網路實現影象風格遷移 (一)

機器學習:利用卷積神經網路實現影象風格遷移 (一)

相信很多人都對之前大名鼎鼎的 Prisma 早有耳聞,Prisma 能夠將一張普通的影象轉換成各種藝術風格的影象,今天,我們將要介紹一下Prisma 這款軟體背後的演算法原理。就是發表於 2016 CVPR 一篇文章,

“ Image Style Transfer Using Convolutional Neural Networks”

演算法的流程圖主要如下:

這裡寫圖片描述

總得來說,就是利用一個訓練好的卷積神經網路 VGG-19,這個網路在ImageNet 上已經訓練過了。

給定一張風格影象 a 和一張普通影象 p,風格影象經過VGG-19 的時候在每個卷積層會得到很多 feature maps, 這些feature maps 組成一個集合 A

,同樣的,普通影象 p 通過 VGG-19 的時候也會得到很多 feature maps,這些feature maps 組成一個集合 P,然後生成一張隨機噪聲影象 x, 隨機噪聲影象 x 通過VGG-19 的時候也會生成很多feature maps,這些 feature maps 構成集合 GF 分別對應集合 AP, 最終的優化函式是希望調整 x 讓 隨機噪聲影象 x 最後看起來既保持普通影象 p 的內容, 又有一定的風格影象 a 的風格。

content representation

在建立目標函式之前,我們需要先給出一些定義: 在CNN 中, 假設某一 layer 含有 N

l 個 filters, 那麼將會生成 Nl 個 feature maps,每個 feature map 的維度為 Ml , Ml 是 feature map 的 高與寬的乘積。所以每一層 feature maps 的集合可以表示為 FlRNl×Ml , Flij 表示第 i個 filter在 position j 上的 activation。

所以,我們可以給出 content 的 cost function:

Lcontent(p,x,l)=12ij(FlijPlij)

style representation

為了建立風格的representation,我們先利用 Gram matrix 去表示每一層各個 feature maps 之間的關係,G

lRNl×Nl , Glij 是 feature maps i,j 的內積:

Glij=kFlikFljk

利用 Gram matrix,我們可以建立每一層的關於 style 的 cost :

El=14N2lM2li,j(GlijAlij)2

結合所有層,可以得到總的cost

Lstyle(a,x)=l=0LwlEl

最後將 content 和 style 的 cost 相結合,最終可以得到:

Ltotal(p,a,x)=αLcontent(p,x)+βLstyle(a,x)

α,β 表示權值,在建立 Lcontent 的時候,用到了 VGG-19 的 conv4_2 層,而在建立 Lstyle 的時候,用到了VGG-19 的 conv1_1, conv2_1, conv3_1, conv4_1 以及 conv5_1。

下一篇部落格裡,我們將介紹基於 TensorFlow 的程式碼實現。