趙 亮,張 鴻
(1.武漢科技大學 計算機科學與技術學院,湖北 武漢 430065;2.武漢科技大學智能信息處理與實時工業系統湖北省重點實驗室,湖北 武漢 430065)
隨著互聯網時代的來臨和信息技術的發展,在網絡中充斥著越來越多的圖像內容。但使用者在觀看這些圖像和使用這些圖像進行一些相關工作時,會發現這些圖像的質量良莠不齊,而復雜、多樣的光照條件是影響這些圖像質量的重要因素。本文將注意力放在設計一種方法,能以較好的效果,較高的魯棒性解決一些常存在的光照相關問題,亦即對圖像進行光照補償。通過光照補償,本身光照條件不佳而過暗、過曝,或反光、具有陰影的圖像,能獲得一個較為均衡的光照條件,從而顯示出更多的細節,或使圖像觀感更佳。另外,在人工智能領域,進行人臉識別、圖像分類等工作時,往往也對光照有較高的要求,此時對圖像進行光照補償的預處理能極大提高這些智能識別工作的效率。
本文提出了一種基于循環生成對抗網絡的光照補償方法。該方法使用類似風格遷移的思路,以分別處在正常光照和復雜光照下的同類事物或場景的圖像作為對抗訓練集訓練CycleGAN,以解決光照問題。在此基礎上,由于用于風格遷移的CycleGAN所使用的Instance Normalization(IN)在處理光照問題時效果不佳,將其替換成了能夠自我訓練參數的Switchable Normalization,得到了更好的效果。這種方法只要數據集的數據足夠豐富,就能很好平衡各種光照條件下的圖像光照,相較傳統方法具有更高的魯棒性。
生成式對抗網絡(generative adversarial networks,GANs)是由Goodfellow提出的一種采用對抗的思路來生成數據的網絡模型[1],其優點在于先驗假設少、模型設計簡單、無監督。Radford等[2]提出的深度卷積生成網絡(DCGAN)將卷積神經網絡(CNN)引入到了生成模型和判別模型當中,大幅提升了生成性能。Arjovsky等[3]利用Wasserstein距離代替JS散度提出了Wasserstein GAN,這種模型緩解了梯度消失的問題,也大幅提升了訓練穩定性。Mirza等[4]提出的條件GAN(conditional GAN, CGAN)為生成器添加了約束條件,使得GAN能有目標的學習,根據提供的類別標簽來生成圖像數據。Isola等[5]提出了pixtopix模型,該模型利用生成目標和條件輸入之間的對抗來優化損失函數,增加條件約束,能夠實驗逼真的圖像風格遷移。Goodfellow等提出了條件生成對抗網絡(Defense-GAN),能在原始GAN的基礎上引入條件判定,對生成的圖像進行約束[6]。Zhu等[7]提出了循環生成對抗網絡(CycleGAN),作為一種常規GAN的變形,能夠在不使用成對圖片的前提下,有效完成圖到圖的轉化與生成。
生成式對抗網絡的基本網絡流程如圖1所示。

圖1 GAN的網絡流程
G表示生成器,用于生成所需圖片;D代表的判別器,用于判斷圖片的真實性,以此來評估生成器的性能。生成器G、判別器D之間存在的對抗關系,可以用下式表示

(1)
式中:真實數據用Pdata(x) 表示,隨機噪聲用Pz(z) 表示,用于為生成器模擬真實數據中的擾動; D(x) 表示其經由判別器判斷,認為是真實樣本的概率; G(z) 表示由隨機噪聲經由生成器生成的樣本, D(G(z)) 表示該樣本經由判別其判斷,認為是真實樣本的概率。
在GAN的訓練過程中,生成器需要使生成樣本更接近真實樣本,也即要令D(G(z)) 接近1;判別器與之相對,要能判斷出真實樣本和生成樣本的真實性,也就是使D(x) 接近1,而D(G(z)) 更接近0。通過這樣一個對抗的過程,生成器和判別器的性能在該過程中交替提升,最終就能利用生成器生成近似于真實樣本的圖片。
循環生成對抗網絡(CycleGAN)是由Zhu等[7]提出的一種常規GAN的變形。
相比基礎GAN網絡,CycleGAN是由兩個鏡像的GAN網絡構成一個環形網絡,其中每一個單向的GAN網絡都有2個生成器與1個判別器。這樣的結構,使得其訓練不依賴成對的圖像,從而在應用上有更好的適應性。
CycleGAN中,其中一個單向GAN的判別器loss和生成器loss分別由以下式(2)與式(3)表示
LGAN(GXY,DY,X,Y)=Εy~Y[logDY(y)]+
Εx~X[log(1-DY(GXY(x)))]
(2)
(3)
其中,X與Y分別表示要進行轉換的兩個類中的真實輸入, G(XY) 與G(YX) 分別表示兩個生成器; D(Y) 表示該單向網絡的判別器。
完整的CycleGAN網絡由兩個上述的單向網絡以圖2的方式組成,它們共用2個生成器,各自有1個判別器。

圖2 CycleGAN單向網絡組合方式
如圖2所示,G、 F分別是由X類真實樣本轉換成Y類樣本和由Y類真實樣本轉換成X類樣本的生成器,在生成樣本之后,分別通過D(X) 和D(Y) 對生成的樣本的真實性進行判斷,通過這個過程訓練判別器,并將判斷結果反饋到生成器對生成器進行進一步的訓練。
傳統的光照補償方法,例如retinex算法或直方圖均衡法,通常是根據圖像的某種特性,使用固定的方法處理圖像。這些方法在其適合的特定情況下,能發揮較好的效果;但在實際應用中,圖像的特征往往是復雜、多樣化的,這些算法適用情況單一、魯棒性差的缺點就會暴露出來。
本文通過建立一個特定結構的改進CycleGAN網絡來解決復雜光照下的光照補償問題。
原理上,本方法參照利用CycleGAN進行風格遷移的思路,將光照情況作為一種特殊的風格進行光照情況的遷移,從而達到將復雜光照圖像轉化為正常光照圖像的效果。
這種方法的原理參考了CycleGAN的一些特性,在 CycleGAN 中,整個網絡的損失可以總結為下式
L(G,F,DX,DY)=ΕX~Pdata(X)[(1-DY(G(x)))2]+
ΕY~Pdata(y)[(DY(y)-1)2]+ΕX~Pdata(X)[(DX(X)-1)2]+
ΕY~Pdata(y)[(1-DX(F(y)))2]+
(4)
式中:G代表通過正常光照圖像生成復雜光照圖像的生成器,F表示通過復雜光照圖像生成正常光照圖像的生成器,DX、DY分別表示復雜光照圖像判別器和正常光照圖像的判別器,整個函數的目的是令整個循環網絡的損失最小化。根據該loss函數進行訓練,就能有效優化CycleGAN的網絡參數,從而使生成的正常光照圖像或復雜光照圖像與真實的圖像越來越接近,最終達到通過真實的復雜光照圖像生成最大程度接近真實的正常光照圖像的目的。
本文方法實現光照補償的具體算法流程如圖3所示。

圖3 基于循環生成對抗網絡的光照補償方法流程
其中一個單向網絡的訓練流程如下:
(1)將真實的正常光照圖像輸入網絡,首先用于訓練判別器;
(2)經過用于生成復雜光照圖像的生成器,將其轉換為復雜光照圖像;將生成的圖像送入判別器,并將判斷結果反饋至生成器中,以訓練生成器生成圖像的真實性,使得復雜光照圖像生成器生成的圖像向真實的復雜光照圖像一步步靠近;
(3)將生成的圖像送入正常光照圖像的生成器,生成正常光照的驗證圖像,反過來影響另一個生成器的相關參數。
以上是其中一個單向網絡的運行邏輯,將這個過程逆轉,輸入復雜光照圖像,并通過另一個單向網絡進行類似的操作,并使兩個單向網絡的訓練循環交替進行,就能形成一個完整的閉環生成網絡,并不斷訓練網絡中的兩個生成器與兩個判別器,達到使網絡生成的圖像“以假亂真”的效果。
在訓練中,最終會得到兩個生成器模型:將正常光照圖像轉換為復雜光照圖像的模型和將復雜光照圖像轉換為正常光照圖像的模型。實際上,在使用時只需如圖3左部所示,提取將復雜光照圖像轉換為正常光照圖像的模型,并將復雜光照圖像使用該模型進行光照的轉換,就能將復雜光照圖像中的光照均勻化,得到相應的正常光照圖像。
在本文中使用的生成器結構如圖4所示。

圖4 生成器結構
如圖4所示,圖像輸入格式為256×256的三通道彩色圖像。輸入的圖像先被送入3層卷積層進行提取特征,在特征提取完畢后,會經由一個包含11層的殘差塊來進行轉換操作,以保證在風格轉換的過程中不會對其它的特征產生影響。在此之后,轉換后的特征被送入兩層反向卷積層,以將高維特征重新復原成低級特征;最后,將獲得的特征送入一層卷積層以生成新圖像。
對于生成器而言,其損失可表示為式(5)

(5)
式中:G、F表示兩個生成器,x、y分別表示兩個生成器的輸入,即待轉換的正常光照/復雜光照圖像矩陣,Lcyc表示兩個生成器的循環損失,該值越小,則表示生成器輸入與輸出越相似。
與生成器相比,判別器的結構更為簡潔。圖5是本文所使用的判別器結構。

圖5 判別器結構
判別過程中,將256×256的圖像輸入4層卷積層進行特征提取,然后用一個卷積層進行判斷。判別器的損失函數與生成器有所不同,兩個判別器的誤差需要分開計算。為了判別器訓練的穩定性,這里選擇了均方誤差作為損失函數,則其中一個判別器的誤差可以表示為式(6)
LLSGAN=ΕX~Pdata(X)[(1-DY(G(x)))2]+
ΕY~Pdata(y)[(DY(y)-1)2]
(6)
式中:DY表示用于判別正常光照圖像真假的判別器, G(x) 是由生成正常光照圖像的生成器生成的圖像,y表示真實的正常光照圖像,LLSGAN表示該判別器的均方誤差,該值越小,則表示判別器分辨真實圖像與生成圖像的能力越強。
在整個網絡中綜合計算生成器、判別器的誤差,就可以得到全局損失函數,即前文式(4),從而有效優化整個網絡的參數。
此外,所有卷積層的激活函數選用Relu函數以更好擬合圖像特征,防止梯度消失;優化器選用Adam優化器,以提高訓練效率,獲得更好的訓練效果。
歸一化是在神經網絡的各層中,為了降低分布變化的影響,在進行實際操作之前就把數據分布根據特定規則映射到一個確定的區間的策略。簡單的說,歸一化就是要把原始數據通過某種方法處理后,限制在一定范圍內,以減少神經網絡的運算量,加速神經網絡收斂,是神經網絡中常用的一種結構。
在神經網絡中,比較常用的歸一化方式有Batch Normalization(BN)[8]、Instance Normalization(IN)[9]、Layer Normalization(LN)[10],Group Normalization(GN)[11]等。
由于在CycleGAN中,Batch size一般較小甚至為1,Batch Normalization效果欠佳,因此在進行風格遷移等工作時,常常使用Instance Normalization來進行歸一化的工作。但在本文的光照補償工作中,發現IN的效果并不理想。由于IN過于注意圖像的獨立特征,保持圖像的獨立性,很多時候會把一些非光照的圖像特性也進行遷移,對圖像本身的一些細節造成破壞,進而影響光照補償的最終效果。
因此,本文考慮采用適用性更強的Switchable Normalizaton來解決這個問題。Switchable Normalizaton是一種能夠通過可微分學習自行學習歸一化相關參數的歸一化方式,它統一了現有的IN、BN、LN等歸一化方式的各個維度,并在訓練的同時優化自身相對不同歸一化方式的權重系數,使自身結構靠近效果最佳的歸一化方式。
在SN的歸一化過程中,同時計算了BN,LN,IN這3種歸一化方式的統計量,然后引入6個分別與均值和方差對應的權值參數計算加權的均值和加權的方差作為SN的均值和方差,并對加權系數使用SOFTMAX來進行歸一化。SN的計算方式如式(7)所示
(7)
式中:與其它標準化方式類似的,γ與β分別代表縮放系數和偏移系數;Ω是一個包含BN、IN、LN的集合;μ和σ2分別表示均值和方差;wk和w′k分別是相應統計量對應的權重系數。
圖6體現了引入SN后的卷積層結構。

圖6 引入SN后的卷積層結構
如圖6所示,隨著卷積層的訓練,SN部分也在隨之優化自己的權重系數,使自己更加接近最適合的歸一化方式。這樣,每一層可以以各不相同的歸一化方式適應其需求,從而在訓練中獲得更好的效果。通過使用SN來進行歸一化,生成對抗網絡能更好地捕捉到所需求的光照特征,并加快其收斂速度;另一方面,使用SN來進行歸一化也省去了對歸一化步驟的參數設定工作,能提高網絡的工作效率。
本文所使用的數據集是針對本文實驗,從真實航運過程中收集的關于船舶的正常光照-復雜光照對抗數據集。該數據集包含兩類,即正常光照分類與復雜光照分類,每類有2000張各不相同的圖像,皆是從不同船舶的航行監控視頻中截取的單幀,且統一為256×256的三通道彩色圖像。其中,正常光照分類中的圖像是在一般情況下的船舶主體圖像,保證圖像中無模糊、不反光、不過暗,且包含棚架船、蓋雨布的船、未蓋雨布的船等多種船型。復雜光照類中的圖像是相似船只、相似角度,在光照不正常的情況下的航行圖像,其中,光照不正常的類型包括:船只雨布反光、水面反光嚴重;整體背景較暗,船只細節不清晰;光線條件不佳,船只顏色失真等。
在本實驗中,網絡里的各種參數比較繁瑣,這里取一些比較重要的參數以供參考:
網絡輸入格式為256×256×3,對應本文數據集所使用圖像的分辨率;誤差使用的是均方誤差;batchsize限于網絡需求和機器性能限制,設定為1;學習率為0.0002;優化器采用Adam優化器,其動量項為0.5;激活函數采用Relu函數;第一個卷積層中的gen過濾器數為64個。
為了評價光照補償效果的好壞,應當引入一定的評價指標來進行比較。由于單純通過主觀判斷或者客觀數據去評價光照補償的效果,都會有失偏頗,所以本文將同時從這兩個角度出發,來評判實驗效果,具體評價方式如下:
在主觀判斷的層面,主要通過對比原圖和通過不同光照補償算法處理后的圖像來進行,從清晰度、失真情況、可視細節、光照均勻程度等方面,全面評價每種光照補償方式的優劣。
在客觀數據的層面,通過計算不同圖像的亮度、對比度等數據來判斷對光照的處理情況;通過計算原圖與補償后圖像的峰值信噪比數據、均方誤差,來判斷光照補償方法對原圖特征的保留情況。其中,亮度取圖像像素的均值;對比度取圖像各像素的標準差,峰值信噪比由式(8)計算
(8)
式中:I、K分別表示原圖像和光照補償后的圖像,m、n是圖像的長、寬,MAXI表示圖像點顏色的最大數值。該數值用于體現補償后圖像與原圖像相比的失真程度,該值越高說明失真程度越低。
除此之外,為了保證評價指標的準確性,測試用圖像將分別選取過暗圖像和反光圖像這兩種特征差異較大的復雜光照圖像,以更全面的分析各種光照補償方法在不同情況下的可靠性,和面對復雜光照的魯棒性。以及,為了進一步說明本文算法的應用價值,還展示了一組實際情況下使用本文算法進行光照補償的效果圖。此外,為了比較實驗中使用的標準化方式SN相對于IN的效果,還將對訓練過程中兩種標準化方式的loss變化趨勢進行可視化比較。
為了驗證本文中光照補償方法的可行性和優越性,選取一些傳統的光照補償方法來進行對比實驗,這些方法包括:Retinex[12]算法、MSRCP(彩色恢復多尺度Retinex)[13]算法、Gamma矯正法[14]。同時,為了體現本文所使用的改進的歸一化方法的有效性,將傳統的使用IN的CycleGAN也加入了對比實驗的范圍,以更加全面對比各種方法的優劣。
圖7是一組過暗的圖像和其經過各種算法處理后得到的光照補償后圖像的對比效果。

圖7 過暗圖像光照補償效果對比
圖7可以直觀比較各種光照補償方法在對較暗圖像進行光照補償時的效果。可以看出,Retinex算法雖然提高了圖像的亮度,但也使得整張圖像偏灰,效果不佳;MSRCP算法相較Retinex而言有一個色彩恢復的過程,因而不會偏灰,但相比原圖又過于明亮,還原度不佳。Gamma 矯正法取Gamma值為1.5,在圖中前兩張圖像里效果較佳,但在最后一張圖像中,同時也加強了水面反射的強度,與實驗的目的不符;并且,Gamma矯正需要手動針對圖像調整Gamma值,不適合作為一種普適性的方法使用。使用IN歸一化方式的CycleGAN雖然對光照進行了一定程度的補償,但在圖像一些邊角位置,如船的雨布邊緣、陰影處出現了不同程度的失真、模糊。本文所使用方法既保留了圖像的原始細節,也一定程度上加強了光照,并且平衡了水面的反射與船體之間的亮度,效果最佳。
表1以圖7中的第一行圖像為例,體現了在過暗圖像光照補償中各算法的一些相關指標。在處理前,原圖的亮度偏低,而對比度偏高,這體現了原圖船體背光而顯得過暗的特點。Retinex算法處理過的圖像雖然亮度大大提升,但對比度降低,PSNR值也較低,說明圖像與原圖差距較大;MSRCP算法處理的圖像同樣亮度過高,而且對比度接近原圖,PSNR值較低,說明對于光照的平衡沒有做好,丟失了原圖的一些特征。Gamma校正法處理過的圖像對比度也較高,因為Gamma矯正對于亮度的增強是針對整張圖像的,同時也提高了沒有背光處如水面等位置的亮度。使用IN進行歸一化的CycleGAN對于亮度的增強幅度不夠,圖像偏灰偏暗。相較而言,本文方法提高了亮度、降低了對比度,說明該方法真正對光照進行了平衡,針對性的提高了背光偏暗部分的光照;同時較高的PSNR說明本圖保留了更多原圖中的特征,沒有出現嚴重失真的情況。

表1 不同算法對過暗圖像光照補償效果比較
圖8是一組有較嚴重反光的圖像在各種算法處理后的效果對比。如圖8所示,在處理有反光的圖像時,大部分光照補償算法的效果不佳。Retinex算法會使整張圖像偏灰,而且對于反光幾乎沒有影響;MSRCP算法反而使反光相對于背景更加刺眼,而且改變了圖像的風格,使圖像與原圖相距甚遠。Gamma算法這里取Gamma值為0.8進行處理,但即使根據圖像特性選取了適合的Gamma值,圖像雖然一定程度上減輕了反光,卻也使其整體過暗,與原圖差異明顯。使用IN歸一化的原始CycleGAN對這些圖進行處理的結果,則將雨布的顏色作為光照的一部分進行了遷移,致使雨布部分大面積失真。本文方法則較好地減弱了反光,且并未對原圖其它部分造成較大影響,視覺效果較為柔和,也能夠看清雨布、棚架的紋理。
類似的,表2展示了圖8中第一列反光圖像的各項相關指標。相對于原圖,Retinex算法和MSRCP算法的亮度都大幅提升,區別在于Retinex算法對比度過小,說明圖像細節不夠清晰;MSRCP算法對比度又過高,說明反光處與其它部分顏色反差較大,沒有起到預想中的減弱反光的效果。Gamma矯正法亮度過低,破壞了圖中原本較暗處的細節;原始的CycleGAN對比度也較低,這可能也是由于雨布顏色發生較大變化的緣故。本文算法相對原圖亮度略微提升,對比度略微降低,PSNR值最高,說明光照處理的效果較佳,且對原圖保留了更多細節。
圖9利用同一條船從早晨9∶30開始、下午17∶30結束的5張不同時間下、光照各有特點的圖像,體現了本文方法在光照處理上的魯棒性,展示了本文方法在實際使用情況下的效果。
可以看出,本文算法在實際使用中,對在不同時刻、不同光照的5張圖像處理之后,使其光照統一化,并且沒有破壞圖像本身的細節。處理之后的圖像相對于原圖,可見度上升、陰影面積減小,過強的光源被削弱,可以很輕易看出是同一條船。這說明本文算法能顯著減弱光照造成的負面影響,對復雜光照圖像做出有效的光照補償,從而使其適應深度學習或其它任務的需求。

圖8 反光圖像光照補償效果對比

表2 不同算法對反光圖像光照補償效果比較

圖9 本文算法實際應用效果對照
圖10將通過網絡模型訓練過程中循環誤差值loss的變化趨勢來比較SN和IN在訓練中對于模型訓練速度、訓練精度等訓練性能指標造成的影響。

圖10 模型訓練收斂速度對比
如圖10所示,在同樣60 000余步的訓練過程中,本文提出的使用SN作為歸一化方式的網絡比原始的以IN為歸一化方式的網絡收斂速度更快、最終誤差更小、震蕩幅度更平穩。這說明,使用SN作為歸一化方式在用CycleGAN進行光照補償的過程中,能降低訓練時間、提高最終模型的效果,是比IN更為優秀的選擇。
本文提出了一種基于經過優化的CycleGAN的光照補償方法,通過一個以SN為歸一化方式替換原本IN歸一化方式的CycleGAN網絡,對光照條件不佳的圖像進行光照補償使其光照均衡。本文方法通過復雜光照、正常光照兩個數據集的對抗訓練,實現了將光照作為一種風格進行遷移的效果,也通過更換歸一化方式解決了原本CycleGAN存在的容易把非光照因素一并進行遷移的問題。本文通過實驗中的圖像對比和亮度、對比度、峰值信噪比的比較證明,本文使用方法在過暗圖像和強反光圖像上的光照補償效果均高于傳統算法如Retinex算法、Gamma校正法等,也大幅優于原本的CycleGAN算法,訓練速度快于該方法。由于本文方法暫時還只能應用于事件、事物類似的數據集,下一步的工作是將該方法泛化,使其針對大部分常見場景都能進行效果較好的光照補償。