侯偉棟
(四川大學(xué)計算機學(xué)院,成都610065)
有很多原因會造成圖像模糊,在日常拍照或者是監(jiān)控視頻中,因為攝像機和物體之間發(fā)生了相對運動,而造成的圖像問題,稱之為運動模糊。運動模糊與普通模糊不同的是,普通模糊通常是一些噪聲模糊核與圖像數(shù)據(jù)卷積的結(jié)果,而運動模糊的模糊核與其并不相同,其主要形成原因是隨機的相對運動,我們把這些隨機的相對運動也稱之為模糊核,而實際原理大不相同。
在計算機視覺領(lǐng)域,關(guān)于人臉和去除模糊一直都是比較熱門的研究課題。去除運動模糊是去除模糊的一個分支,近幾年關(guān)于去除運動模糊的研究越來越多,但是這些研究對圖像本身的內(nèi)容并不怎么關(guān)注。很多時候我們需要針對特定場景下的圖像來去除運動模糊,這些研究的算法具有普適性但沒有針對性,它們并不關(guān)注圖像本身的信息,所以在特定場景下效果并不突出。
無論是日常拍照還是視頻監(jiān)控,很多時候大家對人臉圖像更為看重,因此在人臉圖像上去除運動模糊顯得尤為重要。本課題基于此,針對人臉進行去除運動模糊的算法研究,在人臉這個特定場景下將具有更好的表現(xiàn)效果。
關(guān)于圖像模糊問題大約分為兩類,一種是在了解模糊核的基礎(chǔ)上進行去除模糊,被稱為非盲目去模糊,另一種是在不知道模糊核的情況下,被稱為盲目去模糊。早期的研究主要是非盲目去模糊,即在模糊核是已知的前提下[1],如何恢復(fù)圖像,當(dāng)時主要使用經(jīng)典的Lucy-Richardson 算法,或者Tikhonov 濾波器來對圖像進行反卷積運算,但是這些方法雖然都有一定的效果,但是從視覺效果上來看還是比較差。之后出現(xiàn)了一些基于迭代的方法[2],通過使用帶參數(shù)的先驗?zāi)P蛠砀倪M每次迭代的模糊核以及目標(biāo)圖像,雖然效果有一定提升,但是這些算法的運行時間和迭代次數(shù)是不可預(yù)估的。
隨著近些年深度學(xué)習(xí)的興起以及神經(jīng)網(wǎng)絡(luò)在圖像領(lǐng)域的大規(guī)模應(yīng)用,越來越多的去除運動模糊方法采用深度學(xué)習(xí)的方法,并且其效果也被大大加強,漸漸地使用深度學(xué)習(xí)去除運動模糊的算法逐漸成為了主流,效果也越來越好。Sun 等人[3]采用卷積神經(jīng)網(wǎng)絡(luò)(CNN)的方法來預(yù)估模糊核,取得了不錯的效果,Gong 等人[4]則使用完全卷積網(wǎng)絡(luò)進行運動軌跡的預(yù)估,從而預(yù)測模糊核具體表達方式,Nah 等人[5]采用了多尺度的卷積神經(jīng)網(wǎng)絡(luò),端到端的去除運動模糊,所有這些方法都使用CNN 來估計未知的模糊函數(shù)。
考慮到現(xiàn)有的神經(jīng)網(wǎng)絡(luò)算法都是為了解決圖像的運動模糊問題,而并不針對圖像的類別,為了更好地解決人臉圖像的去除運動模糊問題,本文在生成對抗網(wǎng)絡(luò)[6](GAN)的基礎(chǔ)上提出了一種深度學(xué)習(xí)方法,該方法采用自己制作的虛擬人臉運動模糊數(shù)據(jù)集,將上采樣網(wǎng)絡(luò)、卷積神經(jīng)網(wǎng)絡(luò)以及殘差網(wǎng)絡(luò)結(jié)合起來,通過使用跳躍鏈接的方式關(guān)聯(lián)前后端網(wǎng)絡(luò)輸出,得到了最終的端到端的網(wǎng)絡(luò)結(jié)構(gòu),這種方法能夠很好地去除人臉圖像的運動模糊,下面是本文方法介紹。
在現(xiàn)有的公開數(shù)據(jù)集中,只有運動模糊的數(shù)據(jù)集,并沒有根據(jù)圖像內(nèi)容分門別類,為了更好地訓(xùn)練網(wǎng)絡(luò)的針對性,我們制作了人臉圖像運動模糊的數(shù)據(jù)集。首先,從現(xiàn)有的人臉公開數(shù)據(jù)集CelebA_HQ 和FFHQ中人工篩選出可用的人臉正面圖片,之后采用Orest Kupyn 等人[7]提出的一種基于馬爾科夫隨機過程的生成模糊核運動軌跡的算法,對圖像進行處理,得到對應(yīng)的人臉運動模糊圖像。將生成的運動模糊圖像和原圖編為圖像對,即生成了最終的虛擬數(shù)據(jù)集,如圖1所示。
圖1 虛擬數(shù)據(jù)集
數(shù)據(jù)集中所有圖像數(shù)據(jù)尺寸均為256×512,均由256×256 大小的運動模糊圖像和其對應(yīng)的原圖像組成,數(shù)據(jù)集中總共有近6000 張圖片,其中4700 多張用于訓(xùn)練,1100 多張用于測試。
Goodfellow 等人提出了生成對抗網(wǎng)絡(luò)的概念,即生成器和鑒別器。生成器接收混亂數(shù)據(jù)并生成樣本,鑒別器接收真實數(shù)據(jù)和生成的樣本數(shù)據(jù),并嘗試區(qū)分它們。最終的目標(biāo)是得到一個能夠生成使得鑒別器無法區(qū)分的樣本生成器。生成器G 和鑒別器D 的博弈過程如公式(1)所示:
公式中G表示生成器,D表示鑒別器,x表示真實數(shù)據(jù)(GroundTruth),z表示輸入的混亂數(shù)據(jù),G(z)表示生成器生成的樣本數(shù)據(jù),D(*)表示鑒別器判斷輸入數(shù)據(jù)是否是真實數(shù)據(jù)的概率。整個公式的目標(biāo)就是最大化G,最小化D。生成對抗網(wǎng)絡(luò)被應(yīng)用于很多不同的圖像領(lǐng)域,如圖像超分辨率[8]、風(fēng)格遷移[9]、圖片合成[10]等。
卷積網(wǎng)絡(luò),GAN 網(wǎng)絡(luò)被越來越多地用到了圖像處理領(lǐng)域中。本文提出的神經(jīng)網(wǎng)絡(luò)模型結(jié)合了以上兩種網(wǎng)絡(luò)結(jié)構(gòu),如圖2 所示。
圖2 神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu)
首先介紹下生成網(wǎng)絡(luò)。首先數(shù)據(jù)加載器會將圖像對加載到網(wǎng)絡(luò)中,圖像對的尺寸大小為256×512,在進入網(wǎng)絡(luò)之前將圖像對切分為運動模糊圖像和真實圖像,最終運動模糊圖像會作為原始輸入,輸入到網(wǎng)絡(luò)中。圖像通過第一層卷積網(wǎng)絡(luò)層,分解為維度為64 的圖像特征層,但圖像大小不變,之后兩層的卷積網(wǎng)絡(luò)中使用了池化的操作,每次都將圖像變?yōu)樵瓉淼?/2,在通過第三層網(wǎng)絡(luò)后,圖像大小變?yōu)?4×64,維度變?yōu)?56。網(wǎng)絡(luò)中段使用4 個串聯(lián)的殘差模塊增加網(wǎng)絡(luò)的深度,采用這種結(jié)構(gòu),能在增加圖像特征信息的基礎(chǔ)上,保證梯度信息不會消失,保障網(wǎng)絡(luò)的訓(xùn)練過程,并且殘差模塊并不會更改圖像的大小以及維度。最后的部分使用連續(xù)兩層的上采樣網(wǎng)絡(luò),將圖像放大到原來的大小,同時將圖片維度進行壓縮,與前面的卷積網(wǎng)絡(luò)形成對應(yīng),再通過一個卷積網(wǎng)絡(luò)生成最終的樣本圖像。整個生成網(wǎng)絡(luò)中,將卷積網(wǎng)絡(luò)、殘差網(wǎng)絡(luò)、上采樣網(wǎng)絡(luò)結(jié)合起來,既加深了網(wǎng)絡(luò)深度,提取了更多的深層特征,又避免了由于網(wǎng)絡(luò)過深而產(chǎn)生的梯度消失問題。為了得到更好的生成效果,在網(wǎng)絡(luò)前端添加了一個跳躍鏈接線,將前端產(chǎn)生的圖像特征與后端的圖像特征相疊加,這樣更好地加強了網(wǎng)絡(luò)前后端的聯(lián)系。
其次是鑒別網(wǎng)絡(luò)。在鑒別網(wǎng)絡(luò)中使用了三個串聯(lián)的卷積層作為主體結(jié)構(gòu),將生成網(wǎng)絡(luò)輸出的樣本圖像和對應(yīng)的真實數(shù)據(jù)分別傳入網(wǎng)絡(luò)中,最終生成了兩個1維的數(shù)據(jù),鑒別網(wǎng)絡(luò)的最終目的就是為了分辨這兩個數(shù)據(jù)的真假。
本文的損失函數(shù)由對抗損失和均方誤差損失結(jié)合而成,如公式(2)所示。
其中L 為本文最終的損失函數(shù),a、b 為不同損失函數(shù)的權(quán)重參數(shù),具體設(shè)置為a=0.01,b=2,LGAN為GAN 網(wǎng)絡(luò)中的對抗損失,LM為輸出樣本圖像和真實圖像之間的均方誤差。
其中對抗損失描述的是鑒別網(wǎng)絡(luò)在對輸入圖像真假進行判斷是產(chǎn)生的損失,如公式(3)所示。
公式中所描述的是輸入1~N 個樣本的散度的疊加,I 代表生成網(wǎng)絡(luò)最終輸出的樣本數(shù)據(jù)。
均方誤差損失描述的是生成的樣本圖像數(shù)據(jù)與真實圖像數(shù)據(jù)之間的差距,如公式(4)所示。
其中n 為樣本的個數(shù),m 代表每個圖像樣本數(shù)據(jù)中二維圖像點的個數(shù),w 代表每個點出的權(quán)重參數(shù),x為真實圖像每個二維圖像點處的數(shù)據(jù),y 為輸出樣本二維圖像點處的數(shù)據(jù)。
本文使用PyTorch 深度學(xué)習(xí)框架實現(xiàn)的網(wǎng)絡(luò)模型。為了優(yōu)化訓(xùn)練效果,在反向傳播的過程中,生成網(wǎng)絡(luò)反向傳播一次,鑒別網(wǎng)絡(luò)反向傳播4 次。使用Adam[11]作為優(yōu)化器對網(wǎng)絡(luò)進行優(yōu)化,batch size 設(shè)置為8,總共訓(xùn)練200 個epoch,學(xué)習(xí)率lr 最初設(shè)置為0.001,在第100 個epoch 之后開始衰減,在200 個epoch 時衰減為0。整個網(wǎng)絡(luò)在CPU 為Intel Core i7 8700K,內(nèi)存為32GB,顯卡為NVIDIA 2080 的電腦上進行訓(xùn)練,整個訓(xùn)練時長大約為4 天。
在網(wǎng)絡(luò)訓(xùn)練結(jié)束后,選取訓(xùn)練時最佳的網(wǎng)絡(luò)參數(shù)加載入網(wǎng)絡(luò)中進行測試,最終的測試結(jié)果和真實數(shù)據(jù)如圖3 所示,可以發(fā)現(xiàn)本文中提出的網(wǎng)絡(luò)結(jié)構(gòu)取得了明顯的效果,證明了本方法的可行性和有效性。
圖3 實驗結(jié)果
本文提出了一種端到端的神經(jīng)網(wǎng)絡(luò)模型,模型結(jié)合了GAN 網(wǎng)絡(luò)、卷積網(wǎng)絡(luò)、殘差網(wǎng)絡(luò)幾種基本的網(wǎng)絡(luò)結(jié)構(gòu),并通過跳躍鏈接的方式加強了網(wǎng)絡(luò)的整體聯(lián)系。通過使用自己生成的數(shù)據(jù)集訓(xùn)練后,網(wǎng)絡(luò)能夠很好地完成去除人臉運動模糊的任務(wù)。實驗證明此網(wǎng)絡(luò)能夠比較好地恢復(fù)運動模糊人臉的圖像細節(jié),在視覺效果上有著很好的表現(xiàn)力,但是該算法在人臉是正臉時有著很好的表現(xiàn)力,當(dāng)人臉為側(cè)臉時效果會有所下降,如何解決這一問題是后面研究的重點。