深度学习(图像处理): A neural algorithm of artistic style算法详解
Gatys, Leon A., Alexander S. Ecker, and Matthias Bethge. “A neural algorithm of artistic style.” arXiv preprint arXiv:1508.06576 (2015).
下面這篇發(fā)表于CVPR16,內(nèi)容類似,排版更便于閱讀。
Gatys, Leon A., Alexander S. Ecker, and Matthias Bethge. “Image Style Transfer Using Convolutional Neural Networks.” Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016.
概述
本文介紹Leon Gatys在2016年初大熱的Style Transfer算法。這一算法結(jié)果直觀,理論簡潔,廣受人民群眾喜愛,在github上有各種平臺的源碼實現(xiàn):?
- 基于Torch的Neural-Style?
- 基于Tensorflow的Neural Art?
- 基于Caffe的Style Transfer。
本文的核心思路如下:?
- 使用現(xiàn)成的識別網(wǎng)絡(luò),提取圖像不同層級的特征。?
- 低層次響應(yīng)描述圖像的風(fēng)格,高層次響應(yīng)描述圖像的內(nèi)容。?
- 使用梯度下降方法,可以調(diào)整輸入響應(yīng),在特定層次獲得特定的響應(yīng)。?
- 多次迭代之后,輸入響應(yīng)即為特定風(fēng)格和內(nèi)容的圖像。
【辨】一般網(wǎng)絡(luò)層有如下形式?
網(wǎng)絡(luò)的權(quán)重W,網(wǎng)絡(luò)的響應(yīng)xt+1。
特別要強(qiáng)調(diào)的是,常見的深度學(xué)習(xí)問題利用輸入-輸出樣本對訓(xùn)練網(wǎng)絡(luò)的權(quán)重。這篇文章中,是利用已經(jīng)訓(xùn)練好的權(quán)重,獲取一個符合輸出要求的輸入。
復(fù)習(xí):分類網(wǎng)絡(luò)
直接使用VGG191分類網(wǎng)絡(luò)(下圖省略了末尾處做分類的幾層。和原始分類網(wǎng)絡(luò)相比,本文僅將max pooling換成了average pooling,略微提升結(jié)果視效。?
網(wǎng)絡(luò)不同層次的響應(yīng)描述了圖像不同層次的信息:低層次描述小范圍的邊角、曲線,中層次描述方塊、螺旋,高層次描述內(nèi)容。
下文在提到“卷積層”時,實際指的是Conv+ReLU的復(fù)合體。用慣了Torch的同學(xué)尤其注意。
圖像中的信息
使用分類網(wǎng)絡(luò)中卷積層的響應(yīng)來表達(dá)圖像的風(fēng)格和內(nèi)容。
內(nèi)容:響應(yīng)
任取一張圖像X0,將其輸入上述分類網(wǎng)絡(luò)。其第l個卷積層的響應(yīng)記為Xl,其尺寸是Hl×Wl×Nl。?
對于目標(biāo)圖像X0?????,同樣送入該網(wǎng)絡(luò),可以得到該層響應(yīng)Xl????。
若希望X0和X0?????內(nèi)容相似,可以最小化如下二范數(shù)誤差:?
這一誤差可以對本層響應(yīng)的每一元素求導(dǎo)2:?
h=1,2...H,w=1,2...W,k=1,2...N
進(jìn)一步,利用鏈?zhǔn)椒▌t,可以求得誤差對輸入圖像每一元素的導(dǎo)數(shù)?Elc/?x0hwk。這一步驟就是神經(jīng)網(wǎng)絡(luò)經(jīng)典的back-propagation方法。
利用?Elc/?X0來更新X0,可以獲得一個新的輸入圖像,其在第l層的響應(yīng)Xl更接近目標(biāo)圖像的響應(yīng)Xl????。也就是說:和目標(biāo)圖像的內(nèi)容更接近。
風(fēng)格:響應(yīng)的矩陣積
先引入一個Nl×Nl的特征矩陣Gl:?
i=1,2...N,j=1,2...N
Gl由第l層的響應(yīng)計算而來,但是消除了響應(yīng)的位置信息,可以看做對于風(fēng)格的描述。ij位置的元素描述第i通道響應(yīng)和第j通道響應(yīng)的相關(guān)性。
對于目標(biāo)圖像相應(yīng)層的風(fēng)格Gl????,最小化如下誤差可以使X0和X0?????的風(fēng)格近似:?
可以求得誤差對本層響應(yīng)的導(dǎo)數(shù):?
同樣可以通過back-propagation求得?Els/?X0,進(jìn)而更新X0使其風(fēng)格接近X0?????。
實驗
以高斯噪聲為初始輸入圖像,優(yōu)化內(nèi)容+風(fēng)格的混合誤差,多次執(zhí)行前向/后向迭代使用L-BFGS方法優(yōu)化,即可實現(xiàn)style transfer。其中:?
內(nèi)容層 - conv4_2?
風(fēng)格層 - conv1_1, conv2_1, conv3_1, conv4_1, conv5_1
權(quán)重
內(nèi)容誤差與風(fēng)格誤差的權(quán)重設(shè)為α,β,兩者之比從1×10?3到5×10?4,五個風(fēng)格層權(quán)重相同。
當(dāng)風(fēng)格誤差權(quán)重很高時,得到的結(jié)果近似風(fēng)格圖像的紋理。
風(fēng)格層
和直覺相反,風(fēng)格誤差可以包含非常高的卷積層(conv5_1),反而有更自然,更“神似”的視覺效果。?
?
這告訴我們:風(fēng)格本身也是非常抽象的概念,需要較深的網(wǎng)絡(luò)來描述。
速度
由于需要反復(fù)迭代,本文算法的速度很慢。512×512圖像,使用NVIDIA K40 GPU,需要近1小時完成。
總結(jié)
這篇文章頗有一些啟發(fā):?
- 深度學(xué)習(xí)不只是一頭進(jìn)一頭出的“香腸工廠”。?
-“識別”這個看似無關(guān)的高層任務(wù)包含了很豐富的信息。
我們并不需要特別訓(xùn)練,就能夠欣賞非寫實風(fēng)格的繪畫,識別其中的對象,辨認(rèn)畫家的風(fēng)格。這說明人類在認(rèn)識真實世界的過程中,就學(xué)習(xí)到了分別提取“內(nèi)容”和“風(fēng)格”的能力。?
同樣的,以真實世界物體訓(xùn)練的識別神經(jīng)網(wǎng)絡(luò),也自然地能夠分別提取“內(nèi)容”和“風(fēng)格”。
想要親自體驗的同學(xué),可以使用DeepArt網(wǎng)站提交自己的風(fēng)格圖像和內(nèi)容圖像,不過免費版本需要等待幾天。網(wǎng)站還提供了其他用戶的精彩作品可以欣賞。
2016年夏季在俄羅斯大熱的照片濾鏡Prisma同樣實現(xiàn)風(fēng)格轉(zhuǎn)移,只需等待幾十秒到若干分鐘,8月份的更新更是支持移動端的離線運(yùn)算,不過其提速依賴于另外的論文。
在處理視頻時,這篇文章考慮了結(jié)果的連續(xù)性和穩(wěn)定性,這里有基于Torch的實現(xiàn)。
總結(jié)
以上是生活随笔為你收集整理的深度学习(图像处理): A neural algorithm of artistic style算法详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android sim卡状态改变广播,a
- 下一篇: android多点触摸事件,Androi