1
本文作者: 宗仁 | 2016-12-07 20:20 |
根據(jù)你提供的圖片內(nèi)容和想要的風(fēng)格重新“生成”一張新的圖片,是今年很多濾鏡粉玩過(guò)的一個(gè)爆火游戲,但如何把這個(gè)“游戲”遷移到視頻上,并實(shí)現(xiàn)高質(zhì)量的視頻風(fēng)格“生成”對(duì)于很多人來(lái)說(shuō)并不熟悉,因?yàn)槭忻嫔线@個(gè)功能大規(guī)模推向?yàn)V鏡粉的廠商還并不多,粉絲們對(duì)這個(gè)技術(shù)背后的算法也不甚了解。不過(guò)在今年Siggraph Asia 2016上的參展商演講中,騰訊AI Lab聯(lián)合清華大學(xué)實(shí)驗(yàn)室的團(tuán)隊(duì),就為我們現(xiàn)場(chǎng)講解了關(guān)于視頻風(fēng)格變換的相關(guān)內(nèi)容。
演講者,黃浩智,騰訊AI Lab。
迭代圖像風(fēng)格轉(zhuǎn)換
前向圖像風(fēng)格轉(zhuǎn)換
迭代視頻風(fēng)格轉(zhuǎn)換
前向視頻風(fēng)格轉(zhuǎn)換
小結(jié)
在這之前,圖片風(fēng)格轉(zhuǎn)換的問(wèn)題,傳統(tǒng)的方法:是基于手工提取特征來(lái)生成一張新的圖片。而目前比較流行的使用深度學(xué)習(xí)的方法:是基于深度網(wǎng)絡(luò)學(xué)習(xí)的特征來(lái)生成一張新的圖片。
今年的CVPR有一篇 oral文章 “Image Style Transfer Using Convolutional Neural Networks”,當(dāng)時(shí)引起了學(xué)術(shù)界的廣泛關(guān)注,講的就是關(guān)于迭代的圖像風(fēng)格變換問(wèn)題。
然后我們具體去做的時(shí)候,一般是這樣的:
先輸入一張隨機(jī)(噪聲)圖,經(jīng)過(guò)VGG—19網(wǎng)絡(luò),可以提取出我們預(yù)先定義好的content和style特征。
我們將content特征跟用戶(hù)提供的輸入圖像(content image)去比對(duì),將style特征跟另外一張預(yù)先設(shè)定好的風(fēng)格圖像(譬如某位大師的一幅油畫(huà))去比對(duì),有了內(nèi)容的差異和風(fēng)格的差異后。
我們一步步通過(guò)一個(gè)叫back propagation(反向傳播)的過(guò)程,從網(wǎng)絡(luò)的高層往回傳, 一直傳到我們輸入的那張隨機(jī)噪聲圖, 我們就可以去修改這張隨機(jī)噪聲圖,使得它跟我們指定的content特征和style特征越來(lái)越像。
所以它最后在content 特征上接近于用戶(hù)輸入的那張,在style特征上接近于另一張預(yù)先設(shè)定好的油畫(huà)作品等。
如下圖所示,先用一個(gè)VGG—19圖形識(shí)別和卷積網(wǎng)絡(luò)提取輸入圖片的content和style特征。(這些提取的特征主要用于后面重構(gòu)隨機(jī)輸入得到的結(jié)果)
關(guān)于內(nèi)容表示(CNN特征圖像): 深度神經(jīng)網(wǎng)絡(luò)已經(jīng)可以抽取高層次(抽象)的信息表征了。
下面是內(nèi)容損失函數(shù)
關(guān)于風(fēng)格表示
下面是風(fēng)格損失函數(shù)
下圖是流程的展示。
——一開(kāi)始輸入的隨機(jī)噪聲圖,經(jīng)過(guò)中間的(VGG 19)網(wǎng)絡(luò),在不同的層次分別提取的內(nèi)容和風(fēng)格特征,跟用戶(hù)輸入原圖的內(nèi)容進(jìn)行比較,跟預(yù)先設(shè)定的另一張圖(比如大師的某張油畫(huà)圖)的風(fēng)格進(jìn)行比較,然后計(jì)算出損失函數(shù)Ltotal。
具體的風(fēng)格變換算法中產(chǎn)生的總的損失=α*內(nèi)容損失+ β*風(fēng)格損失。
但迭代圖像風(fēng)格變換自有它的缺陷之處。
沒(méi)有訓(xùn)練和自學(xué)習(xí)的過(guò)程;
對(duì)每一張新的輸入圖都要重復(fù)它迭代更新的過(guò)程;
速度慢。
斯坦福大學(xué)的 Justin Johnson曾經(jīng)提出一種使用前向網(wǎng)絡(luò)完成圖像風(fēng)格變換的方法,發(fā)表于ECCV 2016。
在其實(shí)踐時(shí),采用的圖片轉(zhuǎn)換網(wǎng)絡(luò)層具體見(jiàn)下:
2個(gè)卷積網(wǎng)絡(luò)層進(jìn)行下采樣;
中間5個(gè)殘差網(wǎng)絡(luò)層;
2個(gè)反卷積網(wǎng)絡(luò)層進(jìn)行上采樣。
損失函數(shù)包下面三部分
最后的實(shí)踐結(jié)果如下,質(zhì)量非常不錯(cuò)。
總的來(lái)說(shuō),使用前向圖片風(fēng)格轉(zhuǎn)換
不僅可以保證實(shí)時(shí)性;
還可以使得(前向式)生成和迭代式在視覺(jué)上近似的結(jié)果。
將風(fēng)格變換技術(shù)由圖像向視頻拓展最為直接的方式就是使用圖像風(fēng)格變換的技術(shù)逐幀完成視頻的變換,但是這樣很難保證視頻幀間風(fēng)格的一致性。為此 Ruder 等人提出了一種迭代式的做法 [Ruder, Manuel, Alexey Dosovitskiy, and Thomas Brox. "Artistic style transfer for videos." arXiv preprint arXiv:1604.08610 (2016)],通過(guò)兩幀像素之間的對(duì)應(yīng)關(guān)系信息來(lái)約束視頻的風(fēng)格變換。
不過(guò),迭代式(Ruder et al.)的方法來(lái)處理視頻的風(fēng)格變換考慮了時(shí)間域的一致性,但是處理速度非常慢,處理一幀視頻大約需要 3 分鐘。
那不考慮時(shí)空一致性又是什么結(jié)果呢?以靜態(tài)圖片轉(zhuǎn)換為例。
實(shí)驗(yàn)結(jié)果是這樣的
總的來(lái)說(shuō),迭代式(Ruder et. al)的方法來(lái)處理視頻的風(fēng)格變換
考慮了時(shí)間的一致性,但處理速度非常慢,處理一幀視頻大約需要3分鐘;
另外其品質(zhì)還高度依賴(lài)光流的精確性。
所以AI Lab嘗試了前向視頻風(fēng)格遷移
我們的方法:
通過(guò)大量視頻數(shù)據(jù)進(jìn)行訓(xùn)練;
自動(dòng)辨別學(xué)習(xí)效果,并自我優(yōu)化;
在訓(xùn)練過(guò)程中我們保持了輸出結(jié)果的時(shí)間一致性。
最終,騰訊AI Lab
設(shè)計(jì)了獨(dú)特的深度神經(jīng)網(wǎng)絡(luò);
將風(fēng)格變換的前向網(wǎng)絡(luò)與視頻時(shí)空一致性結(jié)合起來(lái);
高效地完成高質(zhì)量的視頻風(fēng)格變換。
深度神經(jīng)網(wǎng)絡(luò)已經(jīng)可以抽取高層次(抽象)的信息表征了。
不同網(wǎng)絡(luò)層的格拉姆矩陣可以用來(lái)表述風(fēng)格(紋理,筆觸等)。
從圖片進(jìn)階到視頻(風(fēng)格的轉(zhuǎn)換),要注意時(shí)空的一致性。
前向神經(jīng)網(wǎng)絡(luò)可以同時(shí)抓取風(fēng)格和時(shí)空一致性。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。