机器学习:利用卷积神经网络实现图像风格迁移 (一)
相信很多人都對(duì)之前大名鼎鼎的 Prisma 早有耳聞,Prisma 能夠?qū)⒁粡埰胀ǖ膱D像轉(zhuǎn)換成各種藝術(shù)風(fēng)格的圖像,今天,我們將要介紹一下Prisma 這款軟件背后的算法原理。就是發(fā)表于 2016 CVPR 一篇文章,
“ Image Style Transfer Using Convolutional Neural Networks”
算法的流程圖主要如下:
總得來說,就是利用一個(gè)訓(xùn)練好的卷積神經(jīng)網(wǎng)絡(luò) VGG-19,這個(gè)網(wǎng)絡(luò)在ImageNet 上已經(jīng)訓(xùn)練過了。
給定一張風(fēng)格圖像 a 和一張普通圖像 p,風(fēng)格圖像經(jīng)過VGG-19 的時(shí)候在每個(gè)卷積層會(huì)得到很多 feature maps, 這些feature maps 組成一個(gè)集合 A,同樣的,普通圖像 p 通過 VGG-19 的時(shí)候也會(huì)得到很多 feature maps,這些feature maps 組成一個(gè)集合 P,然后生成一張隨機(jī)噪聲圖像 x, 隨機(jī)噪聲圖像 x 通過VGG-19 的時(shí)候也會(huì)生成很多feature maps,這些 feature maps 構(gòu)成集合 G 和 F 分別對(duì)應(yīng)集合 A 和 P, 最終的優(yōu)化函數(shù)是希望調(diào)整 x 讓 隨機(jī)噪聲圖像 x 最后看起來既保持普通圖像 p 的內(nèi)容, 又有一定的風(fēng)格圖像 a 的風(fēng)格。
content representation
在建立目標(biāo)函數(shù)之前,我們需要先給出一些定義: 在CNN 中, 假設(shè)某一 layer 含有 Nl 個(gè) filters, 那么將會(huì)生成 Nl 個(gè) feature maps,每個(gè) feature map 的維度為 Ml , Ml 是 feature map 的 高與寬的乘積。所以每一層 feature maps 的集合可以表示為 Fl∈RNl×Ml , Flij 表示第 i個(gè) filter在 position j 上的 activation。
所以,我們可以給出 content 的 cost function:
Lcontent(p,x,l)=12∑ij(Flij?Plij)
style representation
為了建立風(fēng)格的representation,我們先利用 Gram matrix 去表示每一層各個(gè) feature maps 之間的關(guān)系,Gl∈RNl×Nl , Glij 是 feature maps i,j 的內(nèi)積:
Glij=∑kFlikFljk
利用 Gram matrix,我們可以建立每一層的關(guān)于 style 的 cost :
El=14N2lM2l∑i,j(Glij?Alij)2
結(jié)合所有層,可以得到總的cost
最后將 content 和 style 的 cost 相結(jié)合,最終可以得到:
Ltotal(p,a,x)=αLcontent(p,x)+βLstyle(a,x)
α,β 表示權(quán)值,在建立 Lcontent 的時(shí)候,用到了 VGG-19 的 conv4_2 層,而在建立 Lstyle 的時(shí)候,用到了VGG-19 的 conv1_1, conv2_1, conv3_1, conv4_1 以及 conv5_1。
下一篇博客里,我們將介紹基于 TensorFlow 的代碼實(shí)現(xiàn)。
轉(zhuǎn)載于:https://www.cnblogs.com/mtcnn/p/9412430.html
總結(jié)
以上是生活随笔為你收集整理的机器学习:利用卷积神经网络实现图像风格迁移 (一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jQuery 操作 CSS
- 下一篇: 华为Mate 50系列入网:共三款 均不