不會編程也能做酷炫視頻風(fēng)格遷移?這個工具沖上Reddit熱榜
本文經(jīng)AI新媒體量子位(公眾號ID:QbitAI)授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請聯(lián)系出處。
這兩天,Reddit上一則關(guān)于視頻風(fēng)格遷移的帖子火了,發(fā)布僅一天就沖上了機(jī)器學(xué)習(xí)社區(qū)的熱榜第一。
明艷、華麗的Demo引起了網(wǎng)友們驚嘆。
著名的恐怖片《閃靈》經(jīng)過處理后,變得色彩明艷,有了漫畫風(fēng)格:
而電影《低俗小說》,處理效果像極了天主教堂五彩繽紛的玻璃窗:
大家紛紛留言追問“是不是對CNN的層過濾器進(jìn)行過修改”?
但樓主卻說「我不是程序員,也不清楚CNN是什么東西…….」
這就有點不可思議了,一個沒接觸過機(jī)器學(xué)習(xí)的小白,是怎么做到效果這么好的視頻風(fēng)格遷移呢?
「一鍵式」視頻風(fēng)格遷移工具
Reedit熱帖的樓主,是一位純藝術(shù)從業(yè)者,沒學(xué)過計算機(jī)和編程。
但是他卻卻借助一款「一鍵式」的傻瓜工具,輕松完成了視頻風(fēng)格遷移。
這款工具名叫Deep Dream Generator。
熟悉圖像風(fēng)格遷移的讀者可能對Deep Dream很熟悉,早在2015年谷歌就公布了這個軟件。
最早Deep Dream是為2014年ImageNet視覺識別挑戰(zhàn)賽而開發(fā)的,主要的目的也是識別圖像中的人臉和其他目標(biāo)。
但是隨后有人發(fā)現(xiàn),經(jīng)過訓(xùn)練的Deep Dream能夠反向運行,將給定圖片的像素特征整合到目標(biāo)中。
隨后,Deep Dream開始在藝術(shù)創(chuàng)作圈流行,由它生成的風(fēng)格遷移圖像頗具夢幻色彩,所以被叫做「Deep Dream」。
而制作這個工具的團(tuán)隊將Deep Dream做成了簡單易上手,不需要任何計算機(jī)知識,能夠直接在網(wǎng)頁使用的版本。
使用很簡單,只需要上傳目標(biāo)圖像和「風(fēng)格」,一鍵點擊,就能生成。
生成的圖片效果完全由上傳的「風(fēng)格」決定:
有了這工具,就算是既不懂藝術(shù),也不懂編程的小白,也能批量生產(chǎn)藝術(shù)作品。
視頻風(fēng)格遷移的兩種方法
盡管Deep Dream Generator官網(wǎng)上并沒有給出任何技術(shù)說明,但Deep Dream早已開源,并且風(fēng)格遷移已經(jīng)是深度神經(jīng)網(wǎng)絡(luò)應(yīng)用中輕車熟路的一個領(lǐng)域了。
一般常見的風(fēng)格遷移遷移算法由兩種基本思路,一是優(yōu)化法,第二種是在它之上優(yōu)化而來的前饋法。
優(yōu)化法
在這種方法中,其實并沒有使用真正意義上的神經(jīng)網(wǎng)絡(luò)。
任務(wù)中并沒有訓(xùn)練神經(jīng)網(wǎng)絡(luò)來做任何事情。只是利用反向傳播的優(yōu)勢來最小化兩個定義的損失值。
反向傳播到的張量是希望實現(xiàn)的圖像,從這里開始我們稱之為「復(fù)刻」。希望轉(zhuǎn)移其風(fēng)格的藝術(shù)品,稱為風(fēng)格圖像。而要將風(fēng)格轉(zhuǎn)移到其中的圖片,稱為內(nèi)容圖像。
「復(fù)刻」被初始化為隨機(jī)噪聲。然后與內(nèi)容和風(fēng)格圖像一起,通過一個預(yù)先訓(xùn)練過的圖像分類網(wǎng)絡(luò)的幾個層。
算法使用各個中間層的輸出來計算兩種類型的損失:風(fēng)格損失和內(nèi)容損失。在風(fēng)格上,「復(fù)刻」與風(fēng)格圖像有多接近,在內(nèi)容上就有有多接近。
△內(nèi)容損失公式
然后通過直接改變「復(fù)刻」,將這些損失降到最低。
經(jīng)過幾次迭代,「復(fù)刻」就能夠具備風(fēng)格圖像的風(fēng)格和內(nèi)容圖像的內(nèi)容。它是原始內(nèi)容圖像的風(fēng)格化版本。
前饋法
優(yōu)化法的缺點是運算成本較高,處理時間也比較長。
那么有沒有好的方法能夠直接利用深度神經(jīng)網(wǎng)絡(luò)的特性,減輕開發(fā)者的負(fù)擔(dān)呢?
前饋法的本質(zhì),是創(chuàng)建一個未經(jīng)訓(xùn)練的圖像轉(zhuǎn)換網(wǎng)絡(luò),它的功能是將內(nèi)容圖像轉(zhuǎn)換為對「復(fù)刻」的最佳猜測。
然后將圖像轉(zhuǎn)換網(wǎng)絡(luò)的輸出結(jié)果作為「復(fù)刻,與內(nèi)容和風(fēng)格圖像一起通過預(yù)訓(xùn)練圖像分類網(wǎng)絡(luò)來計算內(nèi)容和樣式損失。
最后,為了減少損失,需要將損失函數(shù)反向傳播到圖像轉(zhuǎn)換網(wǎng)絡(luò)的參數(shù)中,而不是直接到「復(fù)刻結(jié)果中。
任意風(fēng)格遷移
雖然前饋法可以立即生成風(fēng)格化的結(jié)果,但它只能對一個給定的風(fēng)格圖像進(jìn)行復(fù)刻。
是否可以訓(xùn)練一個網(wǎng)絡(luò)可以接受任何風(fēng)格圖像,并從這兩張圖像中產(chǎn)生一個風(fēng)格化的結(jié)果呢?
換句話說,能不能做出一個真正任意的風(fēng)格轉(zhuǎn)移網(wǎng)絡(luò)?
幾年前,有研究人員發(fā)現(xiàn),圖像轉(zhuǎn)換網(wǎng)絡(luò)中的實例歸一化層是唯一重要的代表風(fēng)格的層。
如果保持所有卷積參數(shù)不變,只學(xué)習(xí)新的實例正則化參數(shù),就可以實現(xiàn)在一個網(wǎng)絡(luò)中表示完全不同的風(fēng)格。
來自康奈爾大學(xué)的一個團(tuán)隊首次將這個想法變成現(xiàn)實。他們的解決方案是使用自適應(yīng)實例歸一化(Adaptive Instance Normalization),使用編碼器-解碼器架構(gòu)從風(fēng)格圖像中生成Instance Norm參數(shù),取得了相當(dāng)好的效果。
當(dāng)然,以上介紹的這三種方法都要求一定的編程計算機(jī)基礎(chǔ),但如果你只是想試玩Deep Dream Generator,可以直接點擊下方傳送門:
https://deepdreamgenerator.com/generator