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