陳 芳
(蘇州信息職業(yè)技術學院計算機科學與技術系,江蘇 蘇州 215000)
許多計算機視覺問題都采用顏色一致性處理作為預處理步驟,以確保在不同光照條件下記錄的場景中物體的顏色不會發(fā)生變化[1]。貝葉斯法[2]以反射率和光源的變異性建模為隨機變量,根據(jù)圖像強度的后驗分布估計光源。文獻[3]訓練1個圖像分類器對室內(nèi)和室外圖像進行分類,并提出了不同的試驗框架來選擇各類別的最佳算法。文獻[4]使用圖像的內(nèi)在與低級別屬性為給定圖像選擇最佳算法。文獻[5]利用威布爾參數(shù)化訓練了1種基于混合高斯的最大似然分類器,從而為特定圖像選擇出性能最好的顏色一致性方法。文獻[6]采用高水平視覺信息從1組可能的光源中選擇最佳光源。文獻[7]研究如何自動檢測出具有固有顏色的物體。文獻[8]采用圖像中的表面信息,通過無監(jiān)督學習的方法解決了訓練圖像中每個訓練表面的合適模型的顏色一致性問題。
本文采用卷積神經(jīng)網(wǎng)絡(convolutional neural network,CNN)對圖像進行自動白平衡調(diào)整,使得場景光源的學習和預測在局部區(qū)域塊上進行。以前的方法通常是在整個圖像上積累特征,以估計整體光源的統(tǒng)計數(shù)據(jù),只有少數(shù)幾種方法顯示了估計空間變化的光源的能力。相比之下,本文方法可以估計小塊的光源。試驗結果表明,本文方法在標準的RAW圖像數(shù)據(jù)集上取得了較好的效果。
本文提出的使用深度學習進行光源估計的框架為:首先,對每張彩色圖像進行非重疊采樣,以得到一些圖像塊;然后,通過直方圖拉伸對每個圖像塊進行對比度歸一化。本文使用CNN估計每個圖像塊的光源,并結合圖像塊的“整體打分”獲得整張圖像的光源估計。
為了實行camera圖像的色彩一致性算法,本文提出了1個5層網(wǎng)絡的淺層架構。它是1個32×32×3、32×32×240、4×4×240、40、3結構。網(wǎng)絡輸入為經(jīng)過對比度歸一化的32×32圖像塊。第一層是卷積層,使用240個卷積核對輸入進行濾波。每個核的空間大小為1×1×3。步長為1個像素。此卷積層首先生成240個大小為32×32的特征圖,然后使用8×8 大小濾波器和步長為8個像素的下采樣層進行最大池化操作,得到的結果是將每個特征圖削減為4×4 大小的特征圖。隨后,卷積層被重塑為3 840×1(4×4×240)的向量。此后,卷積層全連接1個40×1大小的向量。最后的輸出層是1個簡單的線性回歸,輸出三維光源照度估計值。
為了在不同的光照條件下具有魯棒性,本文對所有提取到的圖像塊皆進行了對比度歸一化。在不同的對比度增強技術中,本文選擇了全局直方圖拉伸。這是因為全局直方圖拉伸不會改變3個顏色通道的相對貢獻權重。此外,由于色彩一致性是基于全局開展的,神經(jīng)網(wǎng)絡有更加明確的優(yōu)化方向。這有利于算法的收斂。
卷積層將對比度歸一化后的圖像塊與240個濾波器進行卷積。每個濾波器對應生成1個特征圖。本文在每個特征圖上應用最大池化來減少濾波器的響應,使其下降到1個更低的維數(shù)。與目標識別場景中的下采樣層通常傾向于在較小的鄰域上執(zhí)行不同,即使在場景光源是空間變化的情況下,其也是局部同質(zhì)的,即1個32×32大小的圖像塊中所有位置都傾向于擁有相同的光源。這也啟發(fā)了本文使用更大的池化核。
與雙曲正切函數(shù)和Sigmoid函數(shù)相比,修正線性單元(rectified linear unit,ReLU)在獲得幾乎相同性能的同時能使網(wǎng)絡的訓練速度快幾倍。因此,本文在全連接層中使用ReLU。此外,ReLU增加了神經(jīng)網(wǎng)絡的非線性映射與擬合的能力,使得模型可以更好地學習到適合色彩一致性的參數(shù)。更重要的是,相比于前2個激活函數(shù),ReLU避免了網(wǎng)絡可能存在的、因梯度消失而導致的神經(jīng)元滅活現(xiàn)象。
除了設計并學習1個專門針對顏色一致性問題的CNN,本文還研究了經(jīng)過預訓練的CNN是如何處理這些問題的。為此,本文使用文獻[9]所描述的AlexNet網(wǎng)絡輸入227×227 RGB圖像,通過5個卷積層和2個全連接層前向傳播來得到1個4 096維的特征向量。本文通過提取最后1層隱含層的激活值來獲得特征,將提取的特征作為支持向量回歸 (support vector regression,SVR)[10]的輸入來估計每張圖像的光源顏色。在試驗結果中,本文將這種方法稱為AlexNet+SVR。
為了測試算法的性能,本文使用帶有明確顏色標準的RAW圖像數(shù)據(jù)集[2]。該數(shù)據(jù)集是以sRGB格式提供的,但是文獻[3]對其進行了重新處理,以獲得具有更高動態(tài)范圍(14 bits)的線性圖像數(shù)據(jù)。該數(shù)據(jù)集是用高質(zhì)量的數(shù)碼單反相機以RAW格式拍攝的,因此不需要任何顏色校正。該數(shù)據(jù)集是使用佳能5D和佳能1D單反相機采集的,共包含568幅圖像。每個場景下皆包含色彩檢驗色卡(macheth color checker,MCC)。這樣能準確估計每張圖像的實際光源強度。
一般而言,評價圖像增強的性能主要有2種度量指標,分別為結構相似性(structural similarity,SSIM)與峰值信噪比(peak signal-to-noise ratio,PSNR)。為了與其他方法進行對比,本文選取了反余弦誤差函數(shù):
(1)
式中:α1×3為真實的光源RGB強度向量分布;β1×3為估計得到的光源RGB分布。
為了證明算法的有效性,本文與一些其他的算法進行了關于白平衡的對比。由于數(shù)據(jù)集的每幅圖像只包含1個MCC,因此只能基于均勻光照的假設來比較相互之間全局顏色的一致性性能。對基于假設的場景光源糾正法而言,在估計光源光照時,唯一已知的信息是傳感器對輸入圖像的響應(即RAW圖)。因此,圖像白平衡從這種角度來看屬于1個欠定問題[1]。此時需要進行進一步的假設。常見的是假設場景中始終有1個均勻光源,即p(w,h)=C。其中,C為常數(shù)。基于這項假設,后續(xù)許多方法都能以實例化式開展:
(2)
式中:n為導數(shù)的階數(shù);m為閔可夫斯基范數(shù);Iδ(w,h)=I(w,h)?Gδ(w,h)為圖像經(jīng)過參數(shù)為δ的高斯濾波之后的結果;k通常為了歸一化而取值2。
(n,m,δ)的不同取值對應于不同的自動白平衡算法。其中,每種算法的提出又基于不同的假設。例如,(n,m,δ)=(0,1,0)對應于灰度世界算法。此算法假設圖像中平均下來的所有點的RGB分量相等,即R=G=B。因此,光源的顏色可根據(jù)圖像顏色通道中的平均顏色與灰度之間的偏移量來估計。(n,m,δ)=(0,∞,0)對應于白塊算法。此算法假設場景中總是有1個白塊,并且每個顏色分量通道的最大值是由光源在該白塊上的反射引起的,以此來估計光源顏色。(n,m,δ)=(1,0,0)對應于灰邊算法。此算法假設邊緣的平均色度為灰色,而光源顏色可以通過估計圖像顏色通道中邊緣的平均顏色與灰色的偏移量來求得。色域映射方法假設對于給定的光源,人們只能觀察到有限的色域。該方法具有1個初始階段。在此階段可選擇1個標準光源,并在該標準光源下可以觀察到盡可能多的圖像表面時計算標準色域。該方法給定1幅光源未知的輸入圖像,計算其色域,并且當映射可以被應用于輸入圖像的色域時光照可以被估計,從而得到一個完全在標準色域內(nèi)的色域,并產(chǎn)生最終的場景。此外,在已知相機的光譜靈敏度函數(shù)的情況下,利用相關方法也可得到相應的顏色。本文有7個對比算法是通過改變式(2)中的(n,m,δ)變量得到的,并且它們皆為廣泛使用的顏色一致性算法。不同算法的參數(shù)如表1所示。
表1 不同算法的參數(shù)
表1中的放羊算法,對每幅圖像的光源顏色皆給出相同的估計[(n,m,δ)=(1,1,1)],從而假設圖像已經(jīng)達到了白平衡。此算法從某種角度看也屬于基于假設的場景光源糾正法。
試驗環(huán)境為Python+Pytorch+Cuda+Cudnn+Linux,顯卡為Nvidia Titan RTX,總推理時間為54 ms/幀。本文使用遷移學習的方法。為了快速收斂,本文在參考Alexnet先驗信息的情況下通過消融試驗進行了網(wǎng)絡參數(shù)的設置。試驗設置層數(shù)為5、學習率為1×10-3、Batch(數(shù)據(jù)輪次)為32、Epoch(數(shù)據(jù)批次)為30、Dropout率為0.5。
試驗在RAW格式的圖像中提取的32×32隨機色塊上訓練CNN。相機圖像的大小已調(diào)整為max(w,h)=1 200。本文使用3折交叉驗證方法訓練網(wǎng)絡,即數(shù)據(jù)集中三等分,分別用于訓練、驗證和測試。為了進行訓練,本文為每個圖像塊皆分配了與其所屬圖像對應的光源真實標簽。在測試時,通過合并預測得到的每個圖像塊的光源強度,為每個圖像生成單個光源估計。與在給定數(shù)據(jù)集上使用整個圖像相比,使用圖像塊作為輸入使得試驗擁有大量的訓練樣本,能更好地進行學習,同時也避免了過擬合。使用的損失函數(shù)為歐幾里得損失函數(shù)。而一旦估計到了場景光源顏色p,則圖像中的每個像素可以通過文獻[11]中的模型進行矯正。
不同算法的性能比較如表2所示。
表2 不同算法的性能比較
由表2可知不同算法在RAW圖像集上得到的反余弦誤差的最小值(Min)、第10百分位數(shù)(Prc10-th)、中值(Med)、平均值(Avg)、第90百分位數(shù)(Prc90-th)和最大值(Max)。表2中,序號1~8為基于假設的場景光源糾正法,序號9~12為基于統(tǒng)計學習的算法,序號14~17為所提方法的不同變體。在數(shù)據(jù)集[9]上預先訓練的深度CNN加上SVR(即序號13的AlexNet+SVR)已經(jīng)能夠超過大多數(shù)基于假設的場景光源糾正法和一些基于統(tǒng)計學習的算法。就中值誤差而言,所提方法優(yōu)于一半以上的其他算法。本文方法(平均池化)和本文方法(中值池化)是通過在整個圖像上對基于圖像塊的光源估計的方法進行池化而獲得的結果。本文考慮了2種非常簡單的池化策略,即平均池化和中值池化。就中值誤差而言,這2種算法的表現(xiàn)都優(yōu)于大多數(shù)先進的算法,平均池化的最大誤差僅比基于統(tǒng)計學習的最佳算法差0.3%。表2中的最后一行是采用中值池化和反余弦誤差損失并經(jīng)過微調(diào)的CNN??梢钥吹?它在中值誤差、平均值誤差和最大值誤差均達到了在對比方法中的最佳性能。值得注意的是,這些最佳結果都是在本文算法上同時達到的,而之前算法的最優(yōu)解分布于不同的算法當中。這進一步佐證了本文算法的有效性。試驗結果對比如圖1所示。
圖1 試驗結果對比
為了比較本文算法在不同網(wǎng)絡層數(shù)和不同Batch大小下對性能的影響,不同網(wǎng)絡層數(shù)和Batch大小對中值誤差的影響如表3所示。
表3 不同網(wǎng)絡層數(shù)和Batch大小對中值誤差的影響
由表3可知,5層網(wǎng)絡和Batch大小為32時誤差最低。這也是本文網(wǎng)絡選擇參數(shù)的緣由。網(wǎng)絡收斂情況如圖2所示。
圖2 網(wǎng)絡收斂情況
訓練結果顯示,隨著Epoch的不斷增加,損失值迅速減少,經(jīng)過30個Epoch后,基本可以實現(xiàn)網(wǎng)絡的收斂。此時,訓練完成。
在不同色溫光源下的傳感器成像不具有類似于人眼的白平衡特性,使得圖像顏色跟隨環(huán)境光而改變。因此,本文提出了基于CNN的camera圖像色彩一致性算法,以準確預測環(huán)境光源。所使用的深度主干網(wǎng)絡由2個卷積層、1個池化層和2個全連接層組成,以圖像塊為輸入,而非之前常用的手工特征。在提出的網(wǎng)絡架構中,本文將特征學習和回歸集成到1個端到端的優(yōu)化過程中,并使得場景光源的學習和預測在局部塊區(qū)域上進行,可得到1個更有效的場景光照估計模型。在不同光源場景下的圖像集上進行的初步試驗證明了提出的camera圖像色彩一致性算法的有效性。