當前位置:
首頁 > 新聞 > 用數據說話:把自拍照變成畢加索名畫 哪種演算法最高效?

用數據說話:把自拍照變成畢加索名畫 哪種演算法最高效?

提起前段時間紅遍朋友圈的 Prisma,可能許多朋友都還記憶猶新:輸入一張自己的照片,再選一個 Prisma 內置的名畫濾鏡,幾秒之後就能得到一張名畫風的新照片。



用數據說話:把自拍照變成畢加索名畫 哪種演算法最高效?


絕大部分用戶可能只是通過 Prisma 過了一把當畫家的癮,但對於程序猿們來說,僅僅得到一張風格迥異的新照片似乎還遠遠不夠。


近日,有位外國開發者根據 fast.ai 平台開設的深度學習代碼實踐課程,親手實現了一個照片風格轉換器,並對幾種常見的優化演算法的性能進行了綜合對比,最終以圖表加博客的方式記錄下來。


下面就讓我們跟隨作者的腳步,一起看看究竟哪種演算法最高效(程序猿是怎麼玩壞 Prisma 的)。原文來自medium.com,雷鋒網編譯。文中相關的代碼開源地址和原博客地址見文末。



什麼是照片風格轉換器?它是怎麼工作的?


問題1:什麼是風格轉換器(style transfer)?


所謂照片風格轉換器,就是類似 Prisma 的,轉換照片風格的軟體 App。他們抽取 A 照片的風格特徵(一般都是一張名畫),然後將這種特徵應用到 B 照片的內容上,從而生成了全新的照片 C。


問題2:怎樣分隔一張照片的風格和內容?


使用卷積神經網路(CNN)。由於 AlexNet 已經成功地將 CNN 應用於目標識別(即確定圖像中的主體內容),並且在 2012 年主導了最流行的計算機視覺競賽,因此 CNN 是目前用於圖像目標識別的最流行和有效的方法。


簡單說,CNN 是通過學習構建在先前圖層上的各個過濾器層來識別對象的。例如,第一層通常用來學習識別簡單的圖案,例如物體的邊緣和稜角。中間層可能用來識別更複雜的圖案,例如人物的眼鏡、汽車的輪胎等。Jason Yosinski 大神曾在下面這個視頻中詳細介紹了 CNN 的相關內容。

https://www.youtube.com/watch?v=AgkfIQ4IGaM


事實證明,CNN 第一層中的過濾器對應於一張照片的風格,包括畫筆描邊、紋理等。靠後的圖層中的過濾器對應於識別圖像中的主體,例如狗,建築物或一座山等。


例如,將一幅畢加索的畫作輸入 CNN,並分析第一層(樣式層)有多少過濾器被激活,就可以得到該畫作的樣式表示。同樣,通過最後一層(內容層)的分析,我們也可以得到畫作內容的表示。


問題3:怎樣將風格和內容融合在一起?


這一步很有意思。由於兩張照片的風格大不相同,因此它們的樣式層中激活的過濾器也就不同,通過分析兩個樣式層中的過濾器,就能獲得兩張照片的樣式之間的差別。同樣,對內容層中過濾器的分析,也能得到兩張照片內容的差別。


用數據說話:把自拍照變成畢加索名畫 哪種演算法最高效?



例如,如圖所示,我們想把一張自拍照和畢加索的畫作融合。融合後的圖像首先以圖示中的雜訊圖像為起點,然後將這張圖像輸入 CNN ,它會激活樣式層和內容層中的一些特定的過濾器。按照上述的方法,通過對比融合照片和畢加索畫作的風格層,就可以得到風格損失(style loss);通過對比融合照片和自拍照的內容層,就可以得到內容損失(content loss),將兩種損失相加,就得到了總損失。


下面的任務就很清楚了:通過優化演算法的介入,我們想辦法將這個總損失最小化,最終就得到了一張畢加索風格的自拍照了。

問題4:有哪些常見的優化演算法?


到目前為止,我遇到了兩種類型的優化演算法:一階的和二階的。


一階方法通過梯度(gradient)將目標函數最小化(或者最大化)。應用最廣泛的就是梯度下降法(Gradient Descent)及其各種變體,詳情見如下鏈接:


http://sebastianruder.com/optimizing-gradient-descent/


二階方法是通過二階導數將目標函數最小化(或者最大化)。由於二階導數的計算成本很高,因此這裡所討論的二階演算法 L-BFGS(Limited-memory Broyden–Fletcher–Goldfarb–Shanno) 使用了 Hessian 矩陣近似。



哪種優化演算法最高效?



由於我們在以下試驗中處理的照片顏色灰度都介於 0-255 之間,因此將各演算法的學習率(learning rate)都設置為 10,這看起來可能有點大,但效果還可以接受。演算法的其他超參數(hyperparameters)都保持默認。測試的硬體環境是:Amazon P2 實例上的單片 K80 GPU。


實驗1:100 次循環,300 x 300 像素



用數據說話:把自拍照變成畢加索名畫 哪種演算法最高效?



如圖所示,我們輸入了兩張 300 x 300 像素的照片,並運行整個優化循環 100 次。雖然 100 次並不足以生成一個效果很好的融合照片,但對我們分析各個優化演算法的性能已經足夠了。



用數據說話:把自拍照變成畢加索名畫 哪種演算法最高效?




用數據說話:把自拍照變成畢加索名畫 哪種演算法最高效?



如圖所示,由於學習率設置的略大,因此梯度下降(Gradient Descent)、Adadelta 和 RMSProp 在整個循環中都處於不斷的震蕩狀態,並沒有顯示出明顯的收斂趨勢。反觀 Adam 和 L-BFGS 演算法則能夠快速收斂,並且誤差也基本相同。


實驗2:100 次循環,600 x 600 像素


當參數增多時,L-BFGS 演算法應該表現的更好。為此,我們在試驗2中增大了圖像,並切換了素材。



用數據說話:把自拍照變成畢加索名畫 哪種演算法最高效?




用數據說話:把自拍照變成畢加索名畫 哪種演算法最高效?



如圖所示,雖然學習率的設置還是略大,但梯度下降和 Adadelta 演算法在面對大數據量時顯得更穩定,RMSProp 還是始終處于震盪狀態。


另外,Adam 演算法一開始收斂很快,但後期被 L-BFGS 反超。不知道是不是和循環次數有關,下面我們試著增加循環次數。


實驗3:1000 次循環,300 x 300 像素


在實驗3中,我們增加了循環次數,依然使用實驗2中的照片素材,但像素變為 300 x 300。



用數據說話:把自拍照變成畢加索名畫 哪種演算法最高效?




用數據說話:把自拍照變成畢加索名畫 哪種演算法最高效?



如圖所示,在略大的學習率設置下,梯度下降、Adadelta 和 RMSProp 始終處于震盪狀態無法收斂。但 Adam、Adagrad 和 L-BFGS 三種演算法的收斂情況則相對較好,其中效果最好的 L-BFGS 大約比 Adam 的優化效果好 50% ,並且速度也更快。



用數據說話:把自拍照變成畢加索名畫 哪種演算法最高效?



從最終生成的融合照片的成像效果也能看出來,L-BFGS、Adam 和 Adagrad 的效果要好一些。


實驗4:不同的學習率,100 次循環,300 x 300 像素


有說法稱過大的學習率可能會導致梯度下降、Adadelta 和 RMSProp 三種演算法不收斂,因此在實驗 4 中我們減小這三種演算法的學習率。



用數據說話:把自拍照變成畢加索名畫 哪種演算法最高效?



可以看到,所有演算法最終都收斂了。可能是得益於較低的學習速率,梯度下降的最終表現要優於 Adadelta 演算法。另外,較高的學習率雖然在一開始時幫助 Adam LR 10 取得了較快的收斂速度,但最終效果並不好。而 Adam LR 1 雖然收斂緩慢,但表現很穩定。那麼問題來了,如果增加循環次數,Adam LR 1 的表現是否會超過 Adam LR 10 呢?


實驗5:不同的學習率,500 次循環,300 x 300 像素


增加循環次數之後,即便在學習速率較小的情況下,梯度下降、Adadelta 和 RMSProp 三種演算法也還是出現了震蕩。



用數據說話:把自拍照變成畢加索名畫 哪種演算法最高效?



有趣的是,Adam LR 1 最終果然反超了 Adam LR 10,甚至有超過 L-BFGS 的趨勢。


實驗6:1000 次循環,300 x 300 像素


這一次我們僅僅對 Adam LR 1 和 L-BFGS 進行了對比,通過進一步增加循環次數,可以看到,Adam LR 1 最終的表現並沒有超過 L-BFGS。



用數據說話:把自拍照變成畢加索名畫 哪種演算法最高效?




總結



從上述試驗可以發現:在較大的學習率設置下,梯度下降、Adadelta 和 RMSProp 三種演算法不容易收斂,但增大數據量,前兩種會有所好轉。總體上,L-BFGS 演算法的收斂效果最好,速度也最快。


改變學習率。Adam 在學習率較小時,收斂情況提升明顯,隨著循環次數的增大,收斂效果幾乎與 L-BFGS 演算法相當,但收斂情況最好的依然是 L-BFGS 演算法。


最後作者表示,以上實驗只是從參數設置、數據量和迭代次數等方面入手簡單探索了幾種常見演算法的特性,目的只是幫助大家在開發中更好地使用它們。雖然試驗結果顯示 L-BFGS 演算法的收斂速度最快,效果最好,但按照個人習慣,他用 Adam 演算法的情況反而更多。另外,究竟哪種演算法效果最好,也不能一概而論,還是要根據數據類型和項目要求靈活選擇。


源碼地址:https://github.com/slavivanov/Style-Tranfer


來源:medium,雷鋒網編譯


雷鋒網相關閱讀:


通過從零開始實現一個感知機模型,我學到了這些


城市版Prisma?用神經網路技術構建夢想中的城市


中國版 Prisma 來了,我們今天再聊聊深度學習

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 雷鋒網 的精彩文章:

Google殺回P2P支付紅海,安卓版Gmail免費轉賬
阿里領投瑞士AR汽車導航公司WayRay,將與上汽合作
光子互動黨宇航:沒有互動,VR 敘事不可能成立
打假小程序 「12315」 上線!因為它,iPhone 8 或是史上最貴 iPhone

TAG:雷鋒網 |

您可能感興趣

I&B插畫丨她的畫居然讓人想起畢加索名畫???
美國文藝青年求婚用一張畫搞定,畢加索名作旁邊的一張畫,好溫馨
畢加索名言
姑媽的老舊縫紉機,竟然藏了一幅畢加索名畫,價值兩億小夥子賺翻
杭州:石頭版畢加索名畫《夢》
伊索名言名句
一份讓科學家絕望的探索名單
畢加索名畫以4.2億元天價在英拍賣成交
一婦人死前留給侄子一台縫紉機,竟隱藏畢加索名畫,男子一夜暴富
畢加索名作《坐著的藍衣女人》拍出天價,4500萬美元順利成交