蘇鈺生,王亞飛,李學華
北京信息科技大學 信息與通信工程學院,北京100101
傳統(tǒng)的成像設備與系統(tǒng)只能記錄場景的二維平面信息,丟失了場景深度信息,如今在VR(Virtual Reality)技術的發(fā)展和應用中,傳統(tǒng)設備存在著明顯的局限性。光場相機的誕生,改變了成像方式,能夠收集和記錄光的強度和光的方向,這使得通過光場圖像來估計場景深度信息成為可能[1]。
傳統(tǒng)方法,比如立體匹配[2](stereo matching)結合隨機場理論[3]和PCA[4],得到的深度圖(depth maps)精度較低,已經無法滿足對準確度和速度的需要。目前比較常用的算法主要分為兩類:基于優(yōu)化的算法和基于深度學習的算法。
基于優(yōu)化的代表方法有:文獻[5]根據相移理論提出了一種達到亞像素精度的多視角立體匹配方法,該算法克服了微透鏡鏡頭畸變,且改善了傳統(tǒng)匹配算法的準確度。基于EPI的深度估計方法不同于匹配的方式,它通過分析光場數(shù)據的結構,從而進行深度估計。只需要計算EPI 中的斜線斜率即可計算出對應點的深度。文獻[6]采用了結構化張量來計算EPI中的斜率,得到初始視差圖,并且使用全變差去噪濾波器來精細化視差圖。還有考慮融合及散焦的深度估計方法[7],根據光場剪切原理,通過衡量像素在不同焦點堆棧處的“模糊度”來得到對應深度。這些傳統(tǒng)的估計方法都無可避免地在算法性能和計算速度上進行折中,對于準確度和效率無法同時保證。
也有學者采用深度學習的方法進行光場的深度估計,文獻[8]采用了EPI patch作為神經網絡的輸入,利用雙輸入流卷積神經網絡提取特征,計算得到對應的深度信息,然后采用變分法,以中心視圖作為先驗結果優(yōu)化初始深度信息。文獻[9]也采用雙流網絡估計初始深度,通過基于能量函數(shù)的全局約束細化初始深度。雖然兩篇文獻采用了基于深度學習的方法,但是其執(zhí)行一次前向傳播運算只能得到一個像素的深度信息,要獲取一張完整的深度圖需要計算多次,并且都使用了細化處理(refinement),計算變得更加耗時。文獻[10]采用RGB EPI Volume 作為輸入,設計了一種U 型網絡直接輸出深度信息,計算較快。但是由于只考慮一個方向上的EPI,使得估計結果的準確度不高。
為了解決上述算法中暴露出的精度低、耗時長的問題,提出了基于EPI-DenseNet進行光場深度估計。該方法采用HCI 4D光場標準數(shù)據集,利用多個方向的EPI信息作為神經網絡的輸入,實現(xiàn)端到端的深度信息估計,一次計算即可得到完整的深度圖,無需進行后處理等耗時操作,可實現(xiàn)快速準確的深度估計。并且該方法使用了密集連接的結構,解決了網絡隨著層數(shù)增加而出現(xiàn)梯度消失的問題。同時提出了適用于光場圖像結構的數(shù)據增強方法,如隨機灰度化,顯著提升了訓練數(shù)據的數(shù)量,加快了EPI-DenseNet的訓練,改善了網絡性能,提高了算法的魯棒性。最終,通過對比實驗,EPI-DenseNet在均方誤差(Mean Squared Error,MSE)、不良像素率(Bad Pixel ratio,BadPixel)以及運算時間(runtime)上都取得良好結果。
自ResNet 提出以后,卷積神經網絡的深度不斷加深,ResNet 的變種網絡層出不窮,性能也不斷提升。CVPR2017提出的DenseNet[11]是一種具有密集連接的卷積神經網絡,在該網絡中,任意兩層之間都有直接的連接,即每一層的輸入都是前面所有層輸出的并集,而該層所學習的特征圖也會被直接轉遞給其后面所有層作為輸入。這種做法可以緩解由于網絡層數(shù)增多在訓練時引起的梯度消失的問題,加強特征傳播,鼓勵特征復用,并且極大地減少了參數(shù)量。
圖1為DenseNet的一個Dense Block示意圖,與ResNet中的BottleNeck 基本一致:BN-ReLU-Conv(1×1)-BNReLU-Conv(3×3),一個DenseNet 由多個Dense Block組成,每一個Dense Block 之間的層稱為transition layers,由BN-Conv(1×1)-averagePooling(2×2)構成。在圖像分類任務上,使用3 個數(shù)據集:CIFAR、SVHN 和ImageNet進行測試,DenseNet-100的測試誤差為22.3%,已經優(yōu)于ResNet-1001 的測試誤差22.71%,并且后者的參數(shù)量為10.2×106,而前者只有0.8×106,可見DenseNet結構設計的優(yōu)越性以及其優(yōu)秀的特征抽取能力。
圖1 Dense Block結構
本章將從模型結構設計,輸入數(shù)據預處理,數(shù)據增強和訓練細節(jié)來介紹EPI-DenseNet 進行光場深度估計的方法。
設計一種端到端的深度全卷積網絡[12]EPI-DenseNet,以光場的EPI 結構作為輸入,以視差圖(Disparity map)作為標簽(label)訓練網絡。為了獲得更加準確的估計結果,考慮使用水平、豎直和對角線4 個方向上的EPI Volume通過4條輸入分支輸入到網絡的4個流中,完成低階特征的提取,再將提取的特征融合,由網絡的后半部分繼續(xù)進行高階特征抽取,最后轉化為視差圖,完整結構如圖2所示。
前半部分采用的“Conv Block 1”結構如圖3所示,考慮到視差圖精度需求較高(像素級甚至是亞像素級),因此卷積核大小不宜過大,而EPI估計深度需要計算同一點在不同視角下的位移量,即需要跨通道搜索同一點,1×1 的卷積核由于其尺寸太小,無法感知點的位移量,因此,使用2×2的卷積核,步長為1,這樣設置就可以測量±4的視差,并且全部使用valid-padding以加快訓練速度。BN表示批歸一化層(Batch Normalization),其作用是將批處理(mini-batch)輸入的數(shù)據X:{X1,X2,…,Xm}的分布通過平移伸縮變?yōu)榫禐?,方差為1 的正態(tài)分布,歸一化處理的計算式為:
圖2 EPI-DenseNet結構
圖3 Conv Block 1結構
其中,Xi表示批歸一化層的輸入數(shù)據,μ 為輸入數(shù)據的均值,δ 是輸入數(shù)據的標準差。歸一化的目的是為了縮小輸入空間,從而降低調參難度,加快網絡的訓練速度,由于目前訓練網絡常用的方法是批量隨機梯度下降(mini-batch stochastic gradient descent),歸一化可以防止梯度爆炸或梯度消失,從而加快網絡收斂。激活函數(shù)采用線性整流函數(shù)(Rectified Linear Unit,ReLU),其表達式為:
ReLU 函數(shù)相比較其他激活函數(shù),在隨機梯度下降過程中能快速收斂,在計算機視覺領域運用廣泛。
圖2 后半部分在低階特征融合之后,設計了一種“Dense Block”來提取高階特征,其采用shortcuts 連接結構(Concatenate),使淺層和深層的特征可以更自由地組合,對于第l 層的輸出來說,其輸出Xl=Hl([X0,X1,…,Xl-1]),即網絡的每一層輸出都是之前層的組合,讓網絡去學習它們之間的組合方式,使得網絡模型能充分利用每一層提取到的特征,提升魯棒性,并且在訓練深層的網絡時可以減少梯度消失可能性,提升收斂速度,如圖4所示,這是由于在傳統(tǒng)網絡執(zhí)行反向傳播時,輸出層的梯度在不斷向前傳遞時,梯度值逐漸減小,若網絡層數(shù)較深,梯度傳遞到淺層時由于太小使得淺層網絡參數(shù)無法得到很好的訓練,在ResNet提出后,使用殘差學習可以有效方便地傳遞梯度,如圖5 所示,此時梯度計算式為:
圖4 改進的Dense Block結構
圖5 殘差學習
對比傳統(tǒng)的卷積神經網絡,采用這種設計在網絡深度相同時,需要訓練的參數(shù)的數(shù)量會減少很多,從而使得網絡訓練難度較低,同時計算所需資源也會降低。
“Dense Block”中的特征提取采用了“BN-ReLUConv”的結構,如圖6(a)所示。其中卷積核大小依然是2×2,步長為1,考慮到要將特征進行連接,特征的尺寸應該保持一致,故采用same-padding保證每一級特征的尺寸不變。為了將所有組合在一起的特征再進行壓縮融合,使用了一種“Transition”的結構,如圖6(b)所示,“Transition”中使用卷積核為1×1,步長為1,其目的是在保留特征形狀不變的情況下,降低特征維度,壓縮通道,通過非線性的激活函數(shù)可以為輸入的特征添加非線性變換。與原始的DenseNet不同,EPI-DenseNet沒有采用池化層(pooling)進行降采樣,這是為了滿足對不同分辨率的光場圖像均可以進行深度估計。
圖6 Dense Block組成
通過采用Dense Block,網絡的參數(shù)可以得到大幅減少,對比不采用密集連接的常規(guī)CNN(卷積層數(shù)相同,通道數(shù)相同),參數(shù)量對比如表1。
表1 參數(shù)量對比
從表1 中可以看出,EPI-DenseNet 的參數(shù)量遠少于常規(guī)CNN,則其訓練難度較低,且由于參數(shù)量較少,所需的計算資源也較低,具備一定優(yōu)勢,執(zhí)行耗時對比如表2所示,可以看出EPI-DenseNet在效率上比常規(guī)網絡高。
表2 對比常規(guī)CNN執(zhí)行時間s
EPI-DenseNet最終將EPI特征轉化為一張高精度的視差圖,根據光場成像原理中視差與深度之間的幾何關系,可以通過以下公式快速計算深度值:
其中,f 為相機焦距,Z 為P 點的深度值,Δx 表示P點在不同視角下的位移量(視差),Δu 為相機鏡頭陣列的基線長度。
使用的數(shù)據集為HCI 4D標準光場數(shù)據集,數(shù)據集提供共計20個人工合成的光場場景的RGB圖像以及其對應的視差圖和深度圖,如圖7 所示,其中16 個作為訓練集用于算法模型的訓練,4個作為驗證集用于驗證模型的泛化能力,每個場景的物體、紋理均不相同。該數(shù)據集是基于標準全光相機設備參數(shù)進行設計合成的,因此其光場圖像具有基線較短,分辨率較低的特點。該數(shù)據集所提供的圖像分辨率為512×512,有9×9 個不同視角的RGB圖像。
圖7 HCI 4D光場數(shù)據集
與文獻[10]采用RGB EPI Volume 作為輸入不同,對于視差以及深度信息來說,對顏色信息是不明感的,因為采用EPI 進行深度估計時,不論是彩色的EPI 還是灰度化的EPI,其極線的斜率均是可以準確求出的,因此,為了降低網絡對數(shù)據的計算量,對于RGB圖首先進行灰度化處理,將RGB值壓縮為灰度值,其操作為:
式中,R(i,j),G(i,j),B(i,j)為(i,j)像素點的三種顏色通道的分量。然后將得到的灰度圖按照圖8中左側箭頭所示順序堆疊,得到一個512×512×9的EPI Volume,表示9張分辨率為512×512的灰度圖的疊加,以此作為一個輸入流。EPI-DenseNet使用了4個方向上的EPI Volume,如圖1 左側所示,采用多個方向的EPI 可以利用更多的視差信息,用于提高網絡估計的準確性。
圖8 水平方向EPI Volume輸入
采用深度學習的方法要求訓練集必須具備一定大的規(guī)模,但是原始訓練集只提供了16個場景,遠遠無法滿足深度學習的要求,因此,除了對數(shù)據做基本的預處理操作,還需要進行數(shù)據增強的操作,以達到訓練卷積神經網絡對數(shù)據的需求。
結合文獻[13]中針對單目深度估計提出的一系列數(shù)據增強的方法,考慮到HCI 4D光場數(shù)據集擁有多張不同視角的圖片,擁有更多的深度線索,并且目前網絡規(guī)模較大,需要大量訓練數(shù)據,因此采取了如表3 的數(shù)據增強方式來擴充訓練數(shù)據,以達到網絡可以訓練的基本要求。
表3 數(shù)據增強表
隨機灰度化采用的方式如下:
其中wR,wG,wB分別為RGB 三通道的權重,這三個數(shù)值是隨機生成的,且滿足以下條件:
使用無隨機灰度化訓練網絡作為對比,當兩個網絡收斂到同一水平時,在測試集上的4 個場景預測,計算不良像素率,結果如表4 所示,采用隨機灰度化會顯著提高模型的泛化能力,而無隨機灰度化的網絡訓練結果出現(xiàn)了過擬合問題,導致在測試集上表現(xiàn)不佳。
表4 隨機灰度化對BadPixel的影響 %
此實驗采用的數(shù)據增強方式是表1 中各種方式的隨機組合,因此,將原始訓練集可以擴容到滿足EPIDenseNet訓練的需求。
需要注意的是,在圖像旋轉之后,灰度圖的疊加順序和輸入網絡的順序也要相應地改變,如圖9,例如:旋轉90°,此時豎直方向上的圖像疊加之后需要輸入到網絡的水平方向的輸入流中;旋轉180°,此時豎直方向上的所有圖像的疊加順序也要對應地變化。
圖9 圖像旋轉后的調整
由于EPI-DenseNet是全卷積神經網絡的結構,沒有池化層(pooling),因此,可以接受任意大小的輸入圖像,不用要求訓練圖像和測試圖像具有相同的尺寸。如果將512×512 的圖像直接輸入網絡,由于像素過多,會無法訓練,因此采用25×25 的隨機裁剪圖像進行網絡訓練,再用512×512的圖像進行驗證。
在使用512×512的圖像作為輸入時,網絡前半部分采用尺寸為2×2的卷積核進行卷積,步長為1,沒有采用padding,因此其特征提取過程中的特征圖尺寸會減少,而后半部分的采用2×2卷積核,步長為1,并且使用padding來維持特征圖尺寸不變,最終網絡輸出的視差圖尺寸為506×506。
在部分場景中,存在鏡面反射的區(qū)域,對于訓練網絡會產生不良影響,因此在訓練時將這部分區(qū)域去除,以保證網絡訓練的準確。
網絡訓練采用的損失函數(shù)(loss function)是平均絕對誤差(mean absolute error),表達式如下:
其中,yi表示真實值,表示估計值,m 為視差圖的像素點數(shù)。
訓練使用的是小批量隨機梯度下降,批次大?。╞atch-size)設為16,優(yōu)化器(optimizer)采用RMSprop,初始學習率為10-4。
訓練的機器CPU 為E5-2650 v4,GPU 為NVIDIA TITAN V,采用Tensorflow 為訓練后端,Keras 搭建網絡,訓練時間大約1~2天即可得到良好的結果。
訓練每完成一次迭代(iteration),就采用512×512分辨率的圖像作為驗證集(validation set)驗證訓練結果,評價的標準為均方誤差和不良像素比率(bad pixel ratio)。均方誤差用于描述估計結果的平滑度,均方誤差越小,表示結果越好。均方誤差的計算式如下:
當一個像素點的估計結果與實際數(shù)據相差超過一定閾值時,這個估計得到的像素點就是不良像素,不良像素的數(shù)量占總像素數(shù)的比重則稱為不良像素比率,不良像素比率用于描述估計結果的準確度,其值越小表示估計準確度越高。其計算式為:
式中,t 表示閾值,這里采用的閾值為t=0.07。
最終實驗的迭代過程如圖10、11。
圖10 MSE隨迭代下降
圖11 BadPixel隨迭代下降
如圖10 和圖11,EPI-DenseNet 在訓練時,隨著網絡訓練次數(shù)的增加,均方誤差和不良像素率在不斷下降,說明EPI-DenseNet的網絡結構較好,能夠很快速地收斂。
本章主要介紹采用文中算法模型得到的深度估計信息結果,并且與其他深度估計算法在同一個測試場景中的結果進行比較。
采用的測試集為HCI 4D 光場標準數(shù)據集中的test分類下的4 個不同場景Cotton、Dino、Sideboard、Boxes,其場景的復雜從左到右依次增大,Cotton場景中是一個雕像,場景較簡單,估計難度較低;Dino場景增加了許多多邊形邊緣信息以及陰影的干擾,估計難度有所提高;而Sideboard在墻體部分使用了復雜的紋理,且在書架的部分由于書本高度不齊,其邊緣信息較為復雜;Boxes場景中在鏤空的盒子中裝有書本,對書本進行了部分遮擋,估計難度較高。這4個場景的中心視角視圖如圖12所示。
圖12 測試場景
將測試集的圖像數(shù)據進行預處理之后,輸入已經訓練收斂的EPI-DenseNet 中,預測得到的視差圖,與其他文獻結果對比,最終對比結果如圖13所示。
圖13 實驗結果對比
從圖中可以看出,在左側兩個場景Cotton 和Dino中,EPI-DenseNet 估計結果準確,圖形邊緣處也較為平滑,在復雜場景Sideboard 和Boxes 中,邊緣處的鋸齒相對較少,對于Boxes中網格遮擋情況的估計結果也好于圖13(c)、(d)。
本節(jié)將EPI-DenseNet 與現(xiàn)有的文獻算法進行性能比較,計算估計結果的均方誤差和不良像素率。文獻算法分為基于深度學習的和非基于深度學習的,算法比較結果如表5所示。
表5 實驗結果對比
由此可見,EPI-DenseNet在4個測試場景中,均取得了比較良好的成績,說明本文算法估計結果平滑,并且準確度比較高。其中LF[5]、EPI1[14]和BSL[15]是基于匹配或稀疏編碼的方式進行的光場深度信息估計,EPIDenseNet 在MSE 和BadPixel 指標中均優(yōu)于這三種算法。由此,可以說明采用基于深度學習的方式也可以獲取精度較高的深度信息。對比常規(guī)CNN,由于層數(shù)較多,參數(shù)量較大,訓練耗時較長,在精度上表現(xiàn)不佳。
在計算效率上,匹配算法需要進行大量的計算,且很多情況下要對匹配結果加入精細化后處理,計算時間會大大增加;而EPI-DenseNet只需進行一次前向傳播計算即可得到完整的深度圖,計算效率得到了很大的提高,具體比較結果如表6所示。
表6 計算時間對比s
可以看出,在所有測試場景中,EPI-DenseNet 在計算效率上體現(xiàn)出了巨大的優(yōu)勢,計算速度遠超其他算法,對比常規(guī)CNN,在精度上取得了更好的結果。綜上所述,EPI-DenseNet在計算精度和時間上做了很好的權衡,在保證了計算結果準確的前提下,大幅減少了計算所需時間。因此,可以說明本文算法是有效且快速的。
本文采用深度卷積神經網路進行光場深度信息估計,通過隨機灰度化等數(shù)據增強方法有效地擴充了訓練數(shù)據,使得網絡模型可以正確地學習光場的EPI結構,提取所需特征轉化為深度信息,并且采用了密集連接型的結構來減少網絡參數(shù),節(jié)省了計算資源。最終,對比其他文獻算法,EPI-DenseNet在光場圖像深度估計的準確率和精度上顯示出了優(yōu)勢,在計算效率上也有很大提高。