侯偉棟
(四川大學計算機學院,成都610065)
有很多原因會造成圖像模糊,在日常拍照或者是監控視頻中,因為攝像機和物體之間發生了相對運動,而造成的圖像問題,稱之為運動模糊。運動模糊與普通模糊不同的是,普通模糊通常是一些噪聲模糊核與圖像數據卷積的結果,而運動模糊的模糊核與其并不相同,其主要形成原因是隨機的相對運動,我們把這些隨機的相對運動也稱之為模糊核,而實際原理大不相同。
在計算機視覺領域,關于人臉和去除模糊一直都是比較熱門的研究課題。去除運動模糊是去除模糊的一個分支,近幾年關于去除運動模糊的研究越來越多,但是這些研究對圖像本身的內容并不怎么關注。很多時候我們需要針對特定場景下的圖像來去除運動模糊,這些研究的算法具有普適性但沒有針對性,它們并不關注圖像本身的信息,所以在特定場景下效果并不突出。
無論是日常拍照還是視頻監控,很多時候大家對人臉圖像更為看重,因此在人臉圖像上去除運動模糊顯得尤為重要。本課題基于此,針對人臉進行去除運動模糊的算法研究,在人臉這個特定場景下將具有更好的表現效果。
關于圖像模糊問題大約分為兩類,一種是在了解模糊核的基礎上進行去除模糊,被稱為非盲目去模糊,另一種是在不知道模糊核的情況下,被稱為盲目去模糊。早期的研究主要是非盲目去模糊,即在模糊核是已知的前提下[1],如何恢復圖像,當時主要使用經典的Lucy-Richardson 算法,或者Tikhonov 濾波器來對圖像進行反卷積運算,但是這些方法雖然都有一定的效果,但是從視覺效果上來看還是比較差。之后出現了一些基于迭代的方法[2],通過使用帶參數的先驗模型來改進每次迭代的模糊核以及目標圖像,雖然效果有一定提升,但是這些算法的運行時間和迭代次數是不可預估的。
隨著近些年深度學習的興起以及神經網絡在圖像領域的大規模應用,越來越多的去除運動模糊方法采用深度學習的方法,并且其效果也被大大加強,漸漸地使用深度學習去除運動模糊的算法逐漸成為了主流,效果也越來越好。Sun 等人[3]采用卷積神經網絡(CNN)的方法來預估模糊核,取得了不錯的效果,Gong 等人[4]則使用完全卷積網絡進行運動軌跡的預估,從而預測模糊核具體表達方式,Nah 等人[5]采用了多尺度的卷積神經網絡,端到端的去除運動模糊,所有這些方法都使用CNN 來估計未知的模糊函數。
考慮到現有的神經網絡算法都是為了解決圖像的運動模糊問題,而并不針對圖像的類別,為了更好地解決人臉圖像的去除運動模糊問題,本文在生成對抗網絡[6](GAN)的基礎上提出了一種深度學習方法,該方法采用自己制作的虛擬人臉運動模糊數據集,將上采樣網絡、卷積神經網絡以及殘差網絡結合起來,通過使用跳躍鏈接的方式關聯前后端網絡輸出,得到了最終的端到端的網絡結構,這種方法能夠很好地去除人臉圖像的運動模糊,下面是本文方法介紹。
在現有的公開數據集中,只有運動模糊的數據集,并沒有根據圖像內容分門別類,為了更好地訓練網絡的針對性,我們制作了人臉圖像運動模糊的數據集。首先,從現有的人臉公開數據集CelebA_HQ 和FFHQ中人工篩選出可用的人臉正面圖片,之后采用Orest Kupyn 等人[7]提出的一種基于馬爾科夫隨機過程的生成模糊核運動軌跡的算法,對圖像進行處理,得到對應的人臉運動模糊圖像。將生成的運動模糊圖像和原圖編為圖像對,即生成了最終的虛擬數據集,如圖1所示。

圖1 虛擬數據集
數據集中所有圖像數據尺寸均為256×512,均由256×256 大小的運動模糊圖像和其對應的原圖像組成,數據集中總共有近6000 張圖片,其中4700 多張用于訓練,1100 多張用于測試。
Goodfellow 等人提出了生成對抗網絡的概念,即生成器和鑒別器。生成器接收混亂數據并生成樣本,鑒別器接收真實數據和生成的樣本數據,并嘗試區分它們。最終的目標是得到一個能夠生成使得鑒別器無法區分的樣本生成器。生成器G 和鑒別器D 的博弈過程如公式(1)所示:

公式中G表示生成器,D表示鑒別器,x表示真實數據(GroundTruth),z表示輸入的混亂數據,G(z)表示生成器生成的樣本數據,D(*)表示鑒別器判斷輸入數據是否是真實數據的概率。整個公式的目標就是最大化G,最小化D。生成對抗網絡被應用于很多不同的圖像領域,如圖像超分辨率[8]、風格遷移[9]、圖片合成[10]等。
卷積網絡,GAN 網絡被越來越多地用到了圖像處理領域中。本文提出的神經網絡模型結合了以上兩種網絡結構,如圖2 所示。

圖2 神經網絡模型結構
首先介紹下生成網絡。首先數據加載器會將圖像對加載到網絡中,圖像對的尺寸大小為256×512,在進入網絡之前將圖像對切分為運動模糊圖像和真實圖像,最終運動模糊圖像會作為原始輸入,輸入到網絡中。圖像通過第一層卷積網絡層,分解為維度為64 的圖像特征層,但圖像大小不變,之后兩層的卷積網絡中使用了池化的操作,每次都將圖像變為原來的1/2,在通過第三層網絡后,圖像大小變為64×64,維度變為256。網絡中段使用4 個串聯的殘差模塊增加網絡的深度,采用這種結構,能在增加圖像特征信息的基礎上,保證梯度信息不會消失,保障網絡的訓練過程,并且殘差模塊并不會更改圖像的大小以及維度。最后的部分使用連續兩層的上采樣網絡,將圖像放大到原來的大小,同時將圖片維度進行壓縮,與前面的卷積網絡形成對應,再通過一個卷積網絡生成最終的樣本圖像。整個生成網絡中,將卷積網絡、殘差網絡、上采樣網絡結合起來,既加深了網絡深度,提取了更多的深層特征,又避免了由于網絡過深而產生的梯度消失問題。為了得到更好的生成效果,在網絡前端添加了一個跳躍鏈接線,將前端產生的圖像特征與后端的圖像特征相疊加,這樣更好地加強了網絡前后端的聯系。
其次是鑒別網絡。在鑒別網絡中使用了三個串聯的卷積層作為主體結構,將生成網絡輸出的樣本圖像和對應的真實數據分別傳入網絡中,最終生成了兩個1維的數據,鑒別網絡的最終目的就是為了分辨這兩個數據的真假。
本文的損失函數由對抗損失和均方誤差損失結合而成,如公式(2)所示。

其中L 為本文最終的損失函數,a、b 為不同損失函數的權重參數,具體設置為a=0.01,b=2,LGAN為GAN 網絡中的對抗損失,LM為輸出樣本圖像和真實圖像之間的均方誤差。
其中對抗損失描述的是鑒別網絡在對輸入圖像真假進行判斷是產生的損失,如公式(3)所示。

公式中所描述的是輸入1~N 個樣本的散度的疊加,I 代表生成網絡最終輸出的樣本數據。
均方誤差損失描述的是生成的樣本圖像數據與真實圖像數據之間的差距,如公式(4)所示。

其中n 為樣本的個數,m 代表每個圖像樣本數據中二維圖像點的個數,w 代表每個點出的權重參數,x為真實圖像每個二維圖像點處的數據,y 為輸出樣本二維圖像點處的數據。
本文使用PyTorch 深度學習框架實現的網絡模型。為了優化訓練效果,在反向傳播的過程中,生成網絡反向傳播一次,鑒別網絡反向傳播4 次。使用Adam[11]作為優化器對網絡進行優化,batch size 設置為8,總共訓練200 個epoch,學習率lr 最初設置為0.001,在第100 個epoch 之后開始衰減,在200 個epoch 時衰減為0。整個網絡在CPU 為Intel Core i7 8700K,內存為32GB,顯卡為NVIDIA 2080 的電腦上進行訓練,整個訓練時長大約為4 天。
在網絡訓練結束后,選取訓練時最佳的網絡參數加載入網絡中進行測試,最終的測試結果和真實數據如圖3 所示,可以發現本文中提出的網絡結構取得了明顯的效果,證明了本方法的可行性和有效性。

圖3 實驗結果
本文提出了一種端到端的神經網絡模型,模型結合了GAN 網絡、卷積網絡、殘差網絡幾種基本的網絡結構,并通過跳躍鏈接的方式加強了網絡的整體聯系。通過使用自己生成的數據集訓練后,網絡能夠很好地完成去除人臉運動模糊的任務。實驗證明此網絡能夠比較好地恢復運動模糊人臉的圖像細節,在視覺效果上有著很好的表現力,但是該算法在人臉是正臉時有著很好的表現力,當人臉為側臉時效果會有所下降,如何解決這一問題是后面研究的重點。