汪明章,邢冠宇
(1.四川大學計算機學院,成都 610065;2.四川大學視覺合成圖形圖像技術國防重點學科實驗室,成都 610065)
陰影是一種常見的光照現(xiàn)象,是由于某些遮擋物將光遮擋,從而導致局部表面的顏色和強度發(fā)生變化。陰影分為自陰影和投射陰影:自陰影是由于物體本身的遮擋,導致物體的局部表面顏色和光照強度發(fā)生變化,稱為自陰影;投射陰影是由于一個物體的遮擋,導致另一個物體局部表面發(fā)生顏色和光照強度的變化,稱為投射陰影。一方面,若已知陰影位置,可以求得照明方向[1]、相機參數(shù)[2]和場景幾何[3];另一方面,陰影的存在會降低一些視覺任務的性能,例如語義分割[4]、目標檢測[5]。因此,陰影檢測長期以來一直是計算機研究中的基本問題。
早期的方法是通過顏色空間或者基于光照不變假設等物理模型,使用手工設計的特征,例如顏色[6,7]、光照變化[8,9]等,來檢測和消除陰影;然而在復雜情況下,基于假設的物理模型方法檢測陰影效果不夠好。近年來,基于深度學習的陰影檢測方法[10-12]取得長足進步,比較先進的方法[12]檢測陰影的精度已經(jīng)達到90%,能恢復大多數(shù)陰影。但是目前這些方法仍會把一些黑色物體識別為陰影,因為這些網(wǎng)絡無法分析和理解圖像的全局語義,產(chǎn)生了錯誤的檢測結果。
為了從圖像中學習全局語義,本文設計了一種Ex?tract模塊,完成兩個任為:首先使用一個卷積塊(Conv Block)來轉換通道數(shù),然后分別用一個殘差塊[13](Resid?ual Block)獲取一個同分辨率的輸出A和一個反卷積塊(Deconvolution Block)獲取一個分辨率提升一倍的輸出B。殘差塊的作用是繼續(xù)從低分辨率的圖像中提取局部信息;而反卷積塊的作用是從低分辨率的輸入中提取全局信息。因此,Extract模塊可以從大尺寸圖像中學習細節(jié)信息,從小尺寸圖像中學習全局信息。
傳統(tǒng)方法。早期的工作[8,14]基于光照不變的假設建立了物理模型,這種方法僅僅適用于高質量且滿足假設的圖像,而對于復雜的圖像難以得到好的結果。另一種方法基于陰影圖像的特點,手工設計特征描述符,通過這些描述符去描述圖像區(qū)域,然后將用分類器將圖像區(qū)域分為陰影區(qū)域和非陰影區(qū)域。用于陰影檢測的特征描述符主要有:顏色[15,16]、邊緣[17,18]、紋理[17]等,使用的分類器有決策樹[17,19]和SVM[16,18]等。但是手工制作的特征描述陰影的能力有限,因此基于物理模型的傳統(tǒng)方法在復雜情況下通常會失敗。
近年來,卷積神經(jīng)網(wǎng)絡已經(jīng)被證明是非常強大的工具。一些基于卷積神經(jīng)網(wǎng)絡的陰影檢測方法被提出,其結果優(yōu)于以前的方法。Khan等[10]使用多個CNN來學習超像素和邊緣的特征,并將輸出特征饋送到條件隨機場以檢測陰影。沈等[7]提出了一種深層次的結構化陰影邊緣檢測器,并采用結構化標簽來改善預測陰影圖的局部一致性。維森特等[11]使用帶有噪聲注釋的大型數(shù)據(jù)集訓練了stacked-CNN,使用留一法誤差平方和最小化以恢復陰影標注。
Hosseinzadeh等[20]使用patched-CNN和根據(jù)手工特征計算的陰影先驗圖來檢測陰影。Nguyen等[21]設計了具有靈敏度參數(shù)的scGAN來調(diào)整損失函數(shù)的權重。盡管陰影檢測精度不斷提高,但是現(xiàn)有方法仍可能會將黑色物體誤識別為陰影,并遺漏了不明顯的陰影。
Extract模塊。Extract模塊是本文方法的關鍵模塊,Extract模塊主要完成兩個任務,一是對輸入特征進行卷積,提取細節(jié)信息,得到輸出特征;二是從輸入特征中提取全局信息,得到另一個輸出特征,這個輸出特征作為更大尺寸Extract模塊的輸入特征。Extract模塊的操作包含三個步驟:①先將輸入特征A和輸入特征B在深度方向進行堆疊得到中間特征C,然后對中間特征C進行卷積,得到中間特征D;②對中間特征2使用殘差塊進行卷積得到輸出特征F,輸出特征F作為下一個Extract模塊的輸入;③使用一個反卷積層對中間特征D進行反卷積得到輸出特征E,目的是從小尺度圖像中提取信息,作為更大尺度的輸入特征之一,從而從小尺度圖像中提取全局信息。輸入特征A、輸入特征B和輸出特征F三者的大小相同,通道數(shù)可以不同。輸入特征A可以為空,表示Extract模塊只有一個輸入,此時會跳過堆疊輸入特征A和輸入特征B這個步驟。
Merge模塊。Merge模塊的作用是將兩個輸入堆疊,卷積之后再使用殘差塊卷積。Merge模塊的操作分為三個步驟:①將輸入特征A和輸入特征B在深度方向進行堆疊,得到中間特征C;②對中間特征C進行卷積,得到中間特征D;③對中間特征D進行使用殘差卷積,得到輸出特征E。輸入特征A、輸入特征B、中間特征C、中間特征D和輸出的特征的大小均相同,但A、B和C、D、E的通道數(shù)可能不同。
圖1 Extract模塊示意圖
圖2 Merge模塊示意圖
解碼模塊。解碼模塊在不改變大小的情況下,減少通道數(shù)量至1,輸出陰影的預測圖。解碼模塊的操作分為兩步:①在不減小大小的情況下,對輸入特征A進行卷積,得到通道數(shù)為64的中間特征B;②對中間特征B進行卷積,得到通道數(shù)為1的輸出特征C。
圖3 解碼模塊數(shù)據(jù)流圖
此外,本文網(wǎng)絡中還是用了殘差塊[13],下采樣模塊和上采樣模塊。
此部分介紹本文提出的模型。同一張彩色圖像的四個不同大小(A:512×512、B:256×256、C:128×128、D:64×64)作為網(wǎng)絡輸入,從大尺寸的圖像中提取細節(jié)信息,而從小尺寸圖像學習全局信息;網(wǎng)絡的輸出是四個單通道圖像,分別為(E:256×256、F:128×128、G:64×64、H:256×256),這些輸出和對應尺寸的陰影掩模作為損失函數(shù)的輸入。
在橫向上看,有三條橫向的流,從上到下特征的大小分別為256×256、128×128、64×64,在橫向的流中,提取細節(jié)信息;在縱向上看,有四條向上的流,目的是從小尺寸特征中提取全局信息,作為大尺寸Extract模塊的輸入。因此,本文的網(wǎng)絡既能提取細節(jié)信息,又能提取全局信息,具有良好的檢測陰影能力。
圖4 本文網(wǎng)絡示意圖
網(wǎng)絡使用Extract模塊從小尺寸圖像中提取全局信息。
假設陰影掩模為y,網(wǎng)絡的陰影預測圖為p。則y(i,j)為像素(i,j)的真值,當像素(i,j)是陰影像素時y( i,j)=1,否則y( i ,j)=0;p( i ,j)為陰影像素(i,j)的概率越接近1表示(i,j)越有可能是陰影像素點。那么交叉熵損失函數(shù)L(y,p)為:
從公式(1)可知,當陰影掩膜y和陰影預測圖p越接近時,L(y,p)的值越小。
同一張圖像的陰影掩模會被縮放為圖像D1(256×256)、D2(128×128)、D3(64×64);網(wǎng)絡預測有四個陰影預測圖像E、F、G、H。D1和E、H大小相同,D2和F大小相同、D3和G大小相同。對于不同大小的網(wǎng)絡輸出同時進行監(jiān)督,故總損失函數(shù)Loss為:
ω1~ω4為四個不同大小的損失所在的比例,在本文中均取為1,表示各個尺寸圖像的損失占總損失的比例相同。
數(shù)據(jù)集簡介。在本文中,使用了兩個數(shù)據(jù)集;第一個為SBU[11]陰影數(shù)據(jù)集,是目前最大的公開可用的陰影數(shù)據(jù)集,由4089組原圖-掩模圖像對組成訓練集,638組原圖-掩模組成測試集;第二個數(shù)據(jù)集為UCF[17]數(shù)據(jù)集,由111組原圖-掩模組成訓練集,110組原圖-掩膜組成測試集。本文的模型使用SBU數(shù)據(jù)集的訓練集進行訓練。
網(wǎng)絡實現(xiàn)細節(jié)。卷積模塊由卷積層、批歸一化層和ReLU層組成,其中卷積層的卷積核大小為3×3、步長為1、填充為1。除下采樣模塊中使用的卷積層的卷積核大小為5×5、步長為2、填充為2之外,其他所有模塊中的卷積層的參數(shù)都和卷積模塊中卷積層的參數(shù)相同。
訓練配置。本文網(wǎng)絡使用的優(yōu)化器為Adam,初始學習率lr為1e-5,權重衰減weight_decay為5e-4。學習率隨著訓練輪次epoch調(diào)整,衰減比例γ為0.98,第epoch輪的學習率lrepoch為:
準確率accuracy。TP為預測結果是陰影像素且實際也是陰影像素的像素數(shù)量,TN為預測結果是非陰影像素實際也是非陰影像素的像素數(shù)量,Np為實際陰影像素的數(shù)量,Nn為實際非陰影點的數(shù)量,故準確率定義為:
準確率代表預測正確的像素占所有像素的比例,故準確率是越高越好。
平衡誤差率BER。通常情況下,一張圖像中的陰影像素的數(shù)量遠少于非陰影像素的數(shù)量,故引入第二個評價標準平衡誤差率(Balanced Error Rate,BER),BER的定義為:
平衡誤差率根據(jù)陰影像素和非陰影像素的各自的數(shù)量計算預測正確的比例,再用1去減,故平衡誤差率是越低越好。
本文的對比的陰影檢測方法為:Unary-Pairwise[22]、patched-CNN[20]、stacked-CNN[11]、scGAN[21]。其中第一個方法是使用手工設計的特征,后三個方法是基于深度學習的方法。本文使用的SBU數(shù)據(jù)集中的訓練集來訓練,其他方法使用作者的默認參數(shù)。準確率和平衡誤差率的結果將在表1中給出。圖5是部分陰影圖像使用各種方法的對比結果。
圖5本文方法檢測結果
從表1中可以看出,本文方法的準確率是所有方法中最高的。在SBU數(shù)據(jù)集上,準確率比scGAN的準確率高0.06,BER比scGAN的BER低1.93;在UCF數(shù)據(jù)集上,準確率比scGAN的準確率高出0.07,BER比scGAN的BER低0.73。實驗結果表明,本文的方法取得了較先進的結果。
表1 本文方法MSN和其他陰影檢測方法的對比
本文引入Extract模塊,從小尺寸圖像中提取全局信息,從大圖像中提取細節(jié)信息。多層Extract模塊、殘差模塊、解碼模塊和上采樣模塊等組成了多輸入多輸出的網(wǎng)絡。通過多輪訓練后,在ISTD和UCF數(shù)據(jù)集上準確率都是最高,平衡誤差率都是最低,取得了非常好的結果。