楊飄飄 丁友東* 于 冰 馮英瑞
1(上海大學上海電影學院 上海 200072) 2(上海交通大學計算機科學與工程系 上海 200240)
1895年,世界上第一部電影《工廠大門》拉開了電影史的序幕。1935年,第一部彩色電影《浮華世界》姍姍來遲。然而,即使彩色電影技術(shù)早已成熟,仍有一些杰出的電影人選擇黑白電影來表達他們的藝術(shù),如《辛德勒的名單》《曼哈頓》等。長達一百多年的電影發(fā)展歷程,留下了無數(shù)經(jīng)典之作,電影彩色化的需求應運而生。
電影彩色化,是為黑白、棕褐色或其他單色電影添加顏色的過程。當然,彩色化是一個病態(tài)的問題,不可能恢復其本來面貌[1]。例如,一個純色的氣球,可以是藍色、橙色、粉色,甚至任意一種顏色。如果沒有情節(jié)上的特殊要求,沒有必要去深究它到底是什么顏色,只要顯得自然、沒有違和感即可。
最初的彩色化工作全部由手工完成,工作量大,成本高,因而只能應用于極少數(shù)最為經(jīng)典的作品。隨著計算機技術(shù)的成熟,黑白電影開始數(shù)字化,采用圖像處理技術(shù),帶來了效率的提升,但仍然需要大量的人工參與。近幾年來,許多基于深度學習的研究著手解決圖像/視頻自動彩色化的問題。然而,圖像/視頻的彩色化還面臨著諸多挑戰(zhàn)[2-4]:
1) 訓練集很難涵蓋所有的場景。當然,可以通過增大訓練集來緩解這個問題。但是,當使用大型數(shù)據(jù)集進行訓練時,生成的彩色圖像噪聲較大。所以,很難訓練出萬能的模型,給任意場景上色。
2) 場景中包含各種各樣的對象,具有不同的曲面復雜性。如果曲面具有復雜的紋理,則著色技術(shù)可能無法正確識別該曲面是否為連續(xù)區(qū)域。
3) 如果將圖像彩色化算法直接應用于視頻,通常會產(chǎn)生閃爍現(xiàn)象,并隨著時間的推移出現(xiàn)不一致的結(jié)果,因而很有必要保證視頻序列的時序一致性。
本文提出一種帶有循環(huán)結(jié)構(gòu)的條件生成對抗網(wǎng)絡,其中生成網(wǎng)絡用于生成彩色圖像,完成彩色化任務;對抗網(wǎng)絡用于鑒別真?zhèn)?,提升生成器性能;循環(huán)結(jié)構(gòu)用于整合時序信息,解決上色的穩(wěn)定性問題。實驗結(jié)果表明,這樣的網(wǎng)絡結(jié)構(gòu)既能保證圖像上色的質(zhì)量,又考慮了時序一致性,可以應用于黑白電影的自動彩色化。
本文的主要貢獻有:
1) 將循環(huán)結(jié)構(gòu)和生成對抗網(wǎng)絡相融合,解決視頻著色的時序一致性問題。
2) 提出了時序一致性損失,進一步增強時序穩(wěn)定性。
3) 將算法應用于電影的自動彩色化,有助于減少電影工作人員的工作量。
電影的彩色化工作起源于二十世紀初,即在電影發(fā)明不久就提上了日程。最常見的方法是使用染料來著色,比如,晚上發(fā)生的場景使用深紫色或藍色,以模擬夜間。電影的每一幀都是手工著色完成,盡管當時的電影比現(xiàn)在的短得多,但依然費時費力,代價高昂。例如,1902年的《月球之旅》由法國著色師Thuillier的工作室著色完成。該工作室共有200人,他們用畫筆直接在膠片原料上繪畫。每位工作人員在流水線上只負責其中一種顏色,而單部電影通常使用二十多種不同的顏色?!对虑蛑谩饭灿?0個副本,每個副本的成本高達六千到七千法郎。
計算機的發(fā)展給電影彩色化的工作帶來了便利。首先,技術(shù)人員使用最好的黑白膠片將電影掃描進計算機。然后,只需為每個顏色區(qū)域繪制輪廓,計算機就可將其自動填充。由于原始黑白膠片保存了所有的亮度信息,可以使用單一顏色繪制較大的區(qū)域,讓原始膠片來處理亮度梯度信息。這意味著在一個場景中可能只需要添加10種左右的顏色。如果原來的顏色有跡可循,可以使用原來真實的顏色;如果沒有足夠的信息追蹤原貌,技術(shù)人員可以自主選擇適合該灰度級的顏色,當然還要與場景的上下文一致。
為了加快這一進程,Markle等[5]提出一種黑白膠片著色的設備和方法,它可以幀到幀地跟蹤每個物體,在同一物體上應用相同的顏色,直到該物體離開鏡頭。當新的物體進入鏡頭時,必須以相同的方式將顏色關(guān)聯(lián)到每個新的物體上。
Jacob等[6]通過在區(qū)域內(nèi)部放置所需的顏色標記來指示每個區(qū)域的顏色。該算法根據(jù)標記的位置和顏色,對圖像進行分割和著色。為了給視頻著色,需要手動選取少量參考幀,并使用上述標記方法對參考幀進行著色,然后利用運動估計的顏色傳輸技術(shù)將其色度信息傳輸?shù)揭曨l的其他幀中。由于用戶只需在少數(shù)選定的參考幀上應用顏色標記,因此減少了人工參與的工作量。
最近,Zhang等[7]提出一種深度學習方法,從大量數(shù)據(jù)中學習高級語義信息,根據(jù)用戶先前的輸入習慣和當前的輸入圖像來推薦可能的顏色。該系統(tǒng)可以實時使用,幫助新手快速參與著色工作,并大大提高了著色質(zhì)量。
然而,所有這些引導用戶的方法都需要大量的手動交互和美學技巧來生成精美的彩色圖像,這使得它們不適合大規(guī)模地為圖像著色。
自動彩色化的研究可以追溯到2002年,Welsh等[8]通過匹配圖像間的亮度和紋理信息,將源圖像的顏色傳輸?shù)侥繕藞D像。當圖像的紋理和亮度信息比較豐富時,該技術(shù)可以得到較好的結(jié)果。
Levin等[9]提出了一個簡單的著色方法,該方法基于一個前提:具有相似亮度并在時空中相鄰的像素具有相似的顏色。他們使用二次成本函數(shù)對這個前提進行建模,采用標準的方法求解優(yōu)化問題。這樣,用戶只需要用少量的顏色來注釋圖像,其指示的顏色將在空間和時間上自動傳播,以產(chǎn)生完全著色的視頻序列。
Larsson等[10]開發(fā)了一套全自動圖像彩色化系統(tǒng),它通過深度卷積網(wǎng)絡(VGG)提取低層和高層的語義特征,進而預測每個像素的顏色直方圖,決定生成圖像的顏色分配。該方法與先前的研究相比,有較大的改進。
Gupta等[11]提出的算法使用彩色圖像的超像素特征表示來學習不同圖像的像素和對應顏色之間的關(guān)系,以此來預測每幅灰度圖像的顏色值。與每個像素獨立處理的算法相比,使用超像素有助于提高空間一致性、加速著色過程。
Zhang等[12]提出了基于范例的端到端視頻彩色化網(wǎng)絡,主要解決時間一致性問題。該算法引入了一個結(jié)合語義信息和顏色傳播的循環(huán)網(wǎng)絡框架。視頻幀參照提供的參考圖像以及歷史著色結(jié)果進行序列彩色化,并利用時間一致性損失進一步增強了圖像的一致性。
Lei等[1]提出了一種具有自正則性和多樣性的全自動視頻彩色化方法。該模型包含用于視頻幀著色的著色網(wǎng)絡和用于時空顏色細化的細化網(wǎng)絡。在沒有任何標記數(shù)據(jù)的情況下,兩個網(wǎng)絡都可以在雙邊空間和時間空間中定義自正則損失。雙邊損失在雙邊空間中保證相鄰像素之間的顏色一致性,而時間損失在兩個相鄰幀間施加約束。由于視頻彩色化是一個多模態(tài)問題,該方法使用具有多樣性的感知損失來輸出各種模式下的上色結(jié)果。
本文方法與之前的彩色化方法相比,是全自動的,不需要任何參考幀和人工干預。它通過生成對抗網(wǎng)絡從大量的訓練樣本中學習灰度圖像到彩色圖像的映射關(guān)系,結(jié)合循環(huán)結(jié)構(gòu)減少幀與幀之間的不一致性,并成功應用于電影的彩色化。
生成對抗網(wǎng)絡(Generative Adversarial Networks,GAN)[13]是一種特殊的生成模型,通過引入競爭機制,從噪聲中生成以假亂真的樣本。條件式生成對抗網(wǎng)絡(conditional Generative Adversarial Networks,cGAN)[14]是對傳統(tǒng)GAN的一個擴充,將無監(jiān)督學習變成有監(jiān)督學習,解決帶標簽數(shù)據(jù)的生成問題。本文主要借鑒了cGAN模型,生成器G用于生成彩色圖像,鑒別器D用于辨別圖像的真假,兩者相互博弈,以提升生成器的性能,cGAN的網(wǎng)絡結(jié)構(gòu)如圖1所示。與GAN相比,輸入(即條件)不僅要送入生成器中,還要參與鑒別器的訓練。否則,損失不會懲罰輸入和輸出之間的匹配關(guān)系,它只會關(guān)心輸出是否真實。顯然,使用損失來衡量輸入和輸出之間的匹配程度很重要,故cGAN的性能要比GAN好得多。
圖1 cGAN的網(wǎng)絡結(jié)構(gòu)示意圖
為了保證生成電影的時序一致性,本文在cGAN的基礎(chǔ)上引入了循環(huán)結(jié)構(gòu)。循環(huán)神經(jīng)網(wǎng)絡(Recurrent Neural Network,RNN)是一類為處理序列數(shù)據(jù)而生的網(wǎng)絡結(jié)構(gòu),它將前一步的輸出作為當前步驟的輸入,因而具有記憶特性,其輸出結(jié)果不僅與當前的輸入有關(guān),還與之前的輸出有關(guān)。所以,循環(huán)結(jié)構(gòu)的引入有助于上色結(jié)果在幀與幀之間具有連續(xù)性。本文方法的網(wǎng)絡整體結(jié)構(gòu)如圖2所示。其中,Ik為當前輸入幀(即灰度圖像),它和上一幀的生成結(jié)果Ok-1通過生成器G生成當前輸出幀Ok。然后,分別使用當前輸入幀Ik、當前目標幀Tk、當前輸入幀Ik、當前輸出幀Ok作為真假數(shù)據(jù)來訓練鑒別器D。最后,當前輸出幀Ok將作為下一次處理的上一輸出幀。
圖2 本文方法的網(wǎng)絡整體結(jié)構(gòu)示意圖
2.1.1預處理
為確保正確的學習,本文對圖像的三個分量分別進行縮放(根據(jù)它們各自的范圍),以獲得在[-1,1]區(qū)間的像素值。由于網(wǎng)絡的輸入默認為256×256,所以在送入網(wǎng)絡前先將視頻幀縮放到256×256大小。
2.1.2生成器結(jié)構(gòu)
圖像到圖像的轉(zhuǎn)換問題[15]是將高分辨率的圖像作為輸入,生成高分辨率的目標圖像,其典型結(jié)構(gòu)主要有兩種,一是自編碼器結(jié)構(gòu),二是改進的U-Net[16]結(jié)構(gòu),如圖3所示,其中方格代表卷積層,網(wǎng)絡中沒有池化層和全連接層,用于減少參數(shù),提升運算速度,并減輕過度擬合。其實,自編碼器和U-Net的基本結(jié)構(gòu)是相同的,都包含編碼器和解碼器,編碼器通過卷積進行下采樣,解碼器通過反卷積進行上采樣,兩者的輸入輸出關(guān)系恰好相反。而U-Net與自編碼器相比,不同的是卷積層和對應的反卷積層之間添加了跳躍連接,實現(xiàn)大量低層信息的直接共享。由于黑白圖像與彩色圖像包含相同的邊緣信息,故U-Net更適合圖像的彩色化。
圖3 自編碼器與U-Net的結(jié)構(gòu)
本文使用CIEL*a*b*顏色空間,它由三個通道組成,其中:L*代表亮度;a*、b*代表色度。本文將亮度分量L*作為生成器的輸入,其a*、b*分量作為生成器的輸出,最終的結(jié)果由輸入L*和輸出a*、b*疊加形成彩色圖像。下面具體展示生成器的細節(jié)。首先將256×256×1的灰度圖像(L*通道)以及上一幀的生成圖像(a*b*通道)拼接在一起作為編碼器的輸入,最終輸出32×32×512的特征表示。為此,本文使用了8個卷積核進行下采樣。然后解碼器按照相應尺寸的卷積核進行上采樣,最后經(jīng)過tanh激活函數(shù),將數(shù)值映射到[-1,1]的區(qū)間內(nèi),即生成的256×256×2的a*b*通道。為了讓模型更具健壯性,本文在每個卷積運算后進行了批量歸一化操作。表1詳細說明了生成器的結(jié)構(gòu)。由于采用U-Net結(jié)構(gòu),每個卷積層conv的輸出會跳躍傳給反卷積層dconv,故表1中反卷積層輸出的尺寸為自身實際輸出的兩倍。
表1 生成器的網(wǎng)絡結(jié)構(gòu)參數(shù)表
續(xù)表1
2.1.3鑒別器結(jié)構(gòu)
鑒別器將生成圖像或目標圖像和輸入圖像一起作為輸入,輸出32×32的判別信息。它與編碼器的結(jié)構(gòu)類似,主要由卷積層構(gòu)成,對圖像進行空間下采樣,其詳細參數(shù)如表2所示。
表2 鑒別器的網(wǎng)絡結(jié)構(gòu)參數(shù)表
條件生成對抗網(wǎng)絡的目標函數(shù)可以表示為:
LcGAN(G,D)=EIk,Tk[logD(Ik,Tk)]+
EIk,Zk[log(1-D(Ik,G(Ik,Zk))]
(1)
式中:E代表期望值;D(Ik,Tk)表示鑒別器對真實數(shù)據(jù)的判別結(jié)果;而D(Ik,G(Ik,Zk))則是鑒別器對生成器從Ik產(chǎn)生的圖像G(Ik,Zk)的判別結(jié)果。生成器試圖最大限度地降低該目標函數(shù),鑒別器試圖將其最大化,從而形成兩者之間的博弈關(guān)系,即:
(2)
Isola等[15]提及使用L1 Loss作為傳統(tǒng)的損失函數(shù)可以對網(wǎng)絡加以優(yōu)化??紤]到視頻的時序連續(xù)性,生成器的生成結(jié)果不僅要與目標圖像計算損失,還要與上一幀的生成結(jié)果計算損失(時序一致性損失),即:
LL1(G)=α1EIk,Zk,Tk[‖Tk-G(Ik,Zk)‖1]+
α2EIk,Zk,Ok-1[‖Ok-1-G(Ik,Zk)‖1]
(3)
式中:α1和α2為權(quán)重系數(shù)。
最終,本文的生成器目標函數(shù)是:
λ1EIk,Zk,Tk[‖Tk-G(Ik,Zk)‖1]+
λ2EIk,Zk,Ok-1[‖Ok-1-G(Ik,Zk)‖1]
(4)
式中:λ1和λ2為超參數(shù),可以根據(jù)情況調(diào)節(jié),當λ1=λ2=0時,不采用L1損失函數(shù)。
在cGAN中,實際沒有隨機參數(shù)z,但整個網(wǎng)絡可以正常運行,其結(jié)果是生成器的每個輸入都會對應一個確定的輸出。
訓練時,本文對生成器和鑒別器交替使用Adam優(yōu)化器進行優(yōu)化。由于鑒別器訓練較快,本文將鑒別器學習率設為0.000 02,生成器的學習率設為0.000 2,動量β1都取0.5,使訓練更加穩(wěn)定。對于激活函數(shù)LeakyReLU,其Leaky部分的斜率設置為0.2??紤]到視頻具有序列性,本文把mini-batch的大小設置為1。對于損失函數(shù),λ1和λ2分別為100和10。
本文選擇1945年的電影《Leave her to Heaven》制作訓練集。該電影為彩色電影,時長1 h 40 min,在每秒取10幀的情況下,共計66 000余幀。訓練時,本文將其分辨率縮放為256×256,每一幀的亮度通道作為輸入,彩色通道作為輸出。由于采用視頻幀作為輸入,訓練時間相對較長。測試時,本文用其他類似的影視作品創(chuàng)建測試集,以涵蓋訓練集中沒有的場景,檢驗模型的泛化能力。
本文的算法基于TensorFlow2.0.0實現(xiàn),在Pascal Titan Xp GPU上花了約120 h的訓練時間。最終,實驗結(jié)果如圖4-圖8所示,并與文獻[18]、文獻[19]、文獻[1]的算法作對比(注:只能黑白印刷,效果不佳,請諒解)。
(a) 灰度圖像 (b) 文獻[18]算法
(c) 文獻[19]算法 (d) 文獻[1]算法
(e) 本文算法 (f) 原圖像圖4 實驗結(jié)果1
(a) 灰度圖像 (b) 文獻[18]算法
(c) 文獻[19]算法 (d) 文獻[1]算法
(e) 本文算法 (f) 原圖像圖5 實驗結(jié)果2
(a) 灰度圖像 (b) 文獻[18]算法
(c) 文獻[19]算法 (d) 文獻[1]算法
(e) 本文算法 (f) 原圖像圖6 實驗結(jié)果3
(a) 灰度圖像 (b) 文獻[18]算法
(c) 文獻[19]算法 (d) 文獻[1]算法
(e) 本文算法 (f) 原圖像圖7 實驗結(jié)果4
(a) 灰度圖像 (b) 文獻[18]算法
(c) 文獻[19]算法 (d) 文獻[1]算法
(e) 本文算法 (f) 原圖像圖8 實驗結(jié)果5
本文采用峰值信噪比(PSNR)和LPIPS[20]作為衡量著色圖像和原圖像相似性的指標。注意,這些指標并不能完全反映著色圖像的質(zhì)量。例如之前的例子,一個氣球可以被染成藍色或紅色,這兩種顏色都是合理的,但選擇一種不同于原圖像的顏色可能會導致圖像相似性度量上的巨大誤差。
3.2.1峰值信噪比
峰值信噪比是一種鑒別畫質(zhì)的客觀標準,數(shù)學公式下:
(5)
式中:MSE是著色圖像與原圖像的均方誤差;MAXI為圖像的最大像素值,即255。PSNR的單位為dB,其值越大,代表失真越少。表3羅列了不同算法下PSNR的度量結(jié)果。
表3 不同算法下PSNR的度量結(jié)果 單位:dB
3.2.2LPIPS
LPIPS用于評估兩幅圖像的距離,其值越小,意味著兩幅圖像越相似。與傳統(tǒng)方法相比,LPIPS通過深度神經(jīng)網(wǎng)絡來學習感知相似性的度量,其結(jié)果和人的感知更為接近。表4羅列了不同算法下LPIPS的度量結(jié)果。
表4 不同算法下LPIPS的度量結(jié)果
目前,有許多研究致力于灰度圖像的著色,其上色效果在視覺上是自然的。但是,如果直接將算法應用于視頻,幀與幀之間顏色的細微變化會產(chǎn)生明顯的閃爍現(xiàn)象。由于本文的模型引入了循環(huán)結(jié)構(gòu),可以從灰度視頻序列中生成一個更加連貫的彩色視頻。如圖9所示,即使在人物快速移動時,本文算法生成的彩色幀差異仍然較小,減少了最終視頻的閃爍現(xiàn)象。雖然閃爍現(xiàn)象依舊存在,但遠沒有只針對圖像著色的算法那么明顯。
(a) (b)圖9 前后兩幀的上色效果
生成對抗網(wǎng)絡的精髓在于引入競爭機制,因而生成器和鑒別器的損失不可能同時降低,鑒別器表現(xiàn)良好,必然引起生成器的損失上升,反之亦然。圖10和圖11分別展示了隨著訓練次數(shù)的增加,生成器和鑒別器的損失變化曲線??梢钥闯?,兩者的損失一直在波動,生成器的質(zhì)量在博弈中得以提升。
圖10 生成器的損失變化曲線
圖11 鑒別器的損失變化曲線
本文提出基于循環(huán)生成對抗網(wǎng)絡的電影彩色化算法。通過使用條件生成對抗網(wǎng)絡生成彩色幀,引入循環(huán)結(jié)構(gòu)來保證視頻的時序一致性。本文的工作試圖改善全自動電影彩色化,但結(jié)果仍然不夠完美。本文希望循環(huán)結(jié)構(gòu)和條件生成對抗網(wǎng)絡的結(jié)合能給未來的視頻彩色化和其他視頻處理帶來有益的啟示。