蘇鈺生,王亞飛
北京信息科技大學 信息與通信工程學院,北京 100101
光場作為VR技術的新的解決方案,它將光學和計算機視覺兩個方向銜接,可以實現如視角合成[1]、VR視頻[2]等功能,一直是研究的熱點。光場相機由于其特殊的光學結構,改進了成像方式[3],克服了傳統成像設備只能記錄場景二維信息的局限性,它通過微透鏡陣列實現記錄不同方向的光線的強度,由此使用光場相機拍攝的圖像進行場景深度估計變為可能。
由于光場相機一次曝光可以捕獲多張不同視角的照片,利用這些不同視角的光線信息可以估計出深度[4],目前主流的光場深度估計算法可以分為兩大類:基于匹配的算法和基于EPI的算法。
基于匹配的代表算法有:文獻[5]提出了一種單目立體匹配算法,根據圖像中的幾何透視信息來估計場景深度,該方法將深度估計分成兩個部分,先提取幾何信息用于合成視圖,然后將多視圖進行立體匹配,得出深度信息。文獻[6]基于DispNet[7]利用視差估計深度,其采用雙目立體匹配的思路,使用雙目視頻進行訓練,使用對極幾何約束,利用圖像重建損失訓練網絡產生視差圖。文獻[8]利用相移理論,根據光場相機基線短的特點,構建位移圖像的表達式,得到了一種精度達到亞像素級別的多視角立體匹配方法。光場相機拍攝的照片擁有更多不同的視角,上述利用單目、雙目結合深度學習進行深度估計的方法無法充分利用光場圖像中包含的信息,因此估計結果準確率偏低;而多視角立體匹配需要構建匹配代價并進行多次迭代優化,計算效率無法保證。
也有很多學者利用光場的EPI結構特性進行光場的深度估計:文獻[9]通過構建EPI Patch,結合卷積神經網絡,將水平和豎直兩個方向的EPI Patch作為神經網絡的輸入,通過特征提取和融合,得到對應的初始深度,然后使用變分法,以中心視角的視圖作為先驗結果對初始深度進行優化。文獻[10]也采用兩個方向的EPI Patch結合卷積神經網絡估計出初始深度,然后采用基于能量函數的全局約束優化初始深度。上述兩篇文獻雖然采用卷積神經網絡簡化了初始深度的獲取,但是其經過一次前向傳播(forward propagation)計算僅能得到一個像素點的深度值,獲取完整的深度圖需要多次計算,同時需要進行細化操作(refinement),進一步增加計算量。文獻[11]受到SPO算法[12]的啟發,使用了包含水平、豎直和對角線上的4個方向的EPI Patch,如圖1所示,結合 CAD(Constrained Adaptive Defocus)和 CAE(Constrained Angular Entropy)兩組代價可以得到準確度高的深度圖,但是計算效率低,得到一張完整深度圖需要耗費72 min。
為了解決上述方法中顯露出的精度較低、耗時較長的問題,提出融合兩種深度線索的深度估計方法EPI-RefocusNet。該方法使用的數據集為HCI 4D Light Field Dataset,結合卷積神經網絡,采用多個方向的EPI信息和數字重聚焦的圖像作為CNN的輸入,可實現端到端的深度估計,一次前向傳播計算即可得到一張完整的深度圖,不需要再進行refinement,達到高效準確的深度估計。最終在對比現有算法的實驗結果中表明,EPI-RefocusNet的估計結果在衡量準確性的指標:均方誤差(Mean Squared Error,MSE)和壞像素率(Bad Pixel Ratio,BadPix)上優于其他對比算法,同時在運算時間(runtime)上也取得優勢。

圖1 多個方向的EPI Patch

圖2 EPN網絡結構
在針對光場圖像進行深度估計的處理方法中,文獻[10]提出的EPI Patch Net(以下簡稱EPN)模型比較具有代表性,與以往的模型設計的區別在于傳統方法將深度估計當做回歸(Regression)問題,而EPN通過分析深度值的范圍,發現深度值主要分布在?4~4,故將深度估計考慮為分類(Classification)問題,將深度值按照0.035為一個區間,分成了229個類。整體CNN網絡模型設計如圖2所示。
網絡輸入為9×13的EPI Patch,是由9張圖像的同一行(列)的13個像素拼接而成,其采用了2個方向的EPI作為輸入,每一層都進過7層2×2卷積,通道數為16,32,…,1 024,最終通過全連接層變成長度為512的向量,再通過Softmax層變成長度為229的向量,對應深度值的229個分類,取概率最高的softmax值對應的分類即作為此次輸入EPI Patch中心點的深度值。經過多次迭代得到完整的深度圖,以此作為初始深度圖,并通過具有全局約束的后處理來細化CNN輸出的初始深度圖,提升精度。
但是,實際的深度值并非是完全是離散的,并且該模型針對一個場景僅使用2個方向的EPI信息,即17張圖片,并未充分利用全部的圖片,因此該模型還有很多可改進的空間。
為了實現更準確的深度估計,EPI-RefocusNet結合兩種深度線索進行特征提取和融合,即將EPI和重聚焦圖像中包含的深度信息提取,其中EPI提供視差線索,重聚焦圖像提供散焦線索,利用這兩條深度線索合成深度圖像,整體的算法的流程如圖3所示。本章將深度線索的構建、網絡模型的結構設計、數據擴容和模型訓練這幾個方面來介紹EPI-RefocusNet進行深度估計的方法。

圖3 EPI-RefocusNet算法流程
光場相機可以捕獲多個視角的光線信息,即可以記錄光線的方向與強度,從而使針對光場圖像的深度信息估計成為可能,利用這些不同視角下拍攝的2D圖像提取深度線索,建立深度線索與深度圖之間的關系映射,即可完成深度估計。
EPI-RefocusNet使用的數據集是HCI 4D光場標準數據集,該數據集是參考標準全光相機的參數進行設計制作的,包含20個計算機合成的光場場景的RGB平面圖像以及其對應的視差圖與深度圖,如圖4所示。該數據集提供的圖像的分辨率為512×512,共有9×9個視角的不同RGB圖像。
為了更加充分利用這些圖片中包含的深度信息,EPI-RefocusNet采用兩種深度線索,分別為視差線索和散焦線索,通過卷積神經網絡進行特征提取與融合,建立深度圖與深度線索間的映射關系,完成深度估計。采用兩種深度線索對比單一線索在實行效率上略有犧牲,但是在計算誤差上具有優勢,如圖5所示。

圖4 HCI數據集的2個場景

圖5 對比單一線索
可以看出采用兩種深度線索的EPI-RefocusNet在速度和準確度之間做了較好的權衡,在保證計算速度的前提下,提高了估計的精度。
3.1.1 視差線索的構建
通過光場的EPI結構可以很容易獲得視差信息,視差的形成是同一點在不同視角下的相對位置存在偏差,由于光場相機的基線較短,同一點在不同視角的位置差異很小,將某一行的所有視角的同一行像素堆疊在一起即可形成光場特有的EPI結構,通過計算EPI結構中的同一點構成的斜線斜率,即可得出該點的深度值,如圖6所示。
傳統方法采用EPI-Patch[9-10]作為CNN的輸入數據,每次只能輸出一個點的深度值,若需要得到完成的深度圖,需要多次計算得到圖中每一個點的深度值,執行時間會大幅增加,或者采用n個輸入,n為深度圖的像素點數,將n個點的EPI-Patch同時輸入到網絡中,這樣設計的網絡參數量太大,執行成本會大幅提高。RGB EPI Volume[13]的提出,提高了計算效率,由于其將不同視角的分量分別作為不同的通道疊加在一塊,構成一個3維矩陣,通過卷積神經網絡可以進行跨通道計算,一次就可輸出完整的深度圖。為了進一步壓縮計算量,EPIRefocusNet采用單色的EPI Volume作為網絡輸入,對于深度估計來說,RGB信息較冗余,因為單色EPI和彩色EPI的斜線均清晰可見,如圖7所示,且單色EPI相對彩色EPI少了兩個通道的計算量,設計網絡時也可減少參數量,故采用單色的EPI作為網絡的輸入。

圖6 EPI的形成

圖7 單色EPI對比彩色EPI
為了進一步提升計算效率,充分利用卷積神經網絡的特征提取能力,EPI-RefocusNet采用EPI Volume作為輸入,通過一次前向傳播計算即可得出深度值。EPI Volume結構的形成如圖8所示,將所需視角的圖片通過加權平均法轉換為灰度圖,即Gray=0.299×R+0.578×G+0.144×B,其中R、G、B為彩色圖的三個顏色通道的分量;然后將所有灰度圖按照通道圖8中左側箭頭的所示順序進行通道堆疊,得到一個512×512×9的矩陣,即9張分辨率為512×512的灰度圖堆疊形成的EPI Volume。EPI-RefocusNet采用4個方向的EPI Volume作為CNN輸入進行訓練,盡可能充分利用數據集中包含的視差信息,以保證估計結果的準確性。

圖8 一個方向的EPI Volume形成
3.1.2 散焦線索構建
光場相機可以對拍攝好的照片進行重聚焦,其原理可由雙平面法進行說明,如圖9所示,L(u,v,s,t)表示光場的一個采樣,其中L表示光線強度,(u,v)和(s,t)分別為光線和兩個平面的交點坐標。在4維坐標(u,v,s,t)空間中,一條光線對應光場的一個采樣點。在光場相機中,這兩個平面分別對應主鏡頭與微透鏡陣列面。

圖9 雙平面法
為了方便說明,將光場簡化為二維情形。用微透鏡陣列像面中的坐標(x,y)表示光線的分布位置,則主鏡頭面坐標(u,v)就反映了光線的傳輸方向,像面上的像素接受來自整個鏡頭面的光線進行積分,則像面(x,y)處的光照度為:

如圖10所示,重聚焦的過程是將采集到的光場重新投影到新的像面上進行積分。在上式中L(u,v,s,t)為采集到的光場,u和s分別表示鏡頭面和微透鏡陣列面,兩個平面之間的距離為l。重聚焦的平面為s',與平面u之間的距離為l'=α?l,則s'面所成的像等于u,S之間光場L的積分:

此時,像面處的光場積分表示為:


圖10 重聚焦原理
由于場景中每個物體所處深度不同,對于相同孔徑的主鏡頭而言,其聚焦面也不同,重聚焦可以獲知各個深度處所對應的聚焦像,物體越接近確定的焦平面,其成像散焦量越低,也就越清晰,反之散焦量越高,也就越模糊,由此可見,通過衡量像素在不同焦棧處的“模糊度”(散焦量),也可以得到對應的深度。
通過改變α的取值,即可確定不同的聚焦面S',EPI-RefocusNet采用設置α∈[0.2,2),共生成了10張重聚焦圖片,如圖11所示,同樣采用灰度化和通道疊加,形成尺寸為512×512×10的Refocus Volume,作為神經網絡的第5條輸入。
EPI-RefocusNet模型采用端到端的全卷積網絡設計以接受任意尺寸的圖像輸入,采用光場的EPI Volume結構和Refocus Volume作為網絡輸入,以深度圖(depth map)作為ground truth同時feed給EPI-RefocusNet網絡進行訓練。如圖12所示,模型共有5條輸入支路,其中4條支路輸入數據為不同方向的EPI數據,分別取0°、90°、45°和?45°方向的EPI;另一條支路的輸入數據為重聚焦的圖片。EPI-RefocusNet的前半部分在各自支路提取低階特征,隨后將低階特征圖(feature map)通過通道拼接(concatenate)合并為一條主路,完成將EPI和Defocus低階特征的融合,然后在EPI-RefocusNet的后半部分將合并的低階特征進一步抽取高級特征,最終將所有特征轉換為深度圖。
EPI-RefocusNet的5條支路部分采用了3個“Conv Block”,其結構如圖13所示。為了使EPI-RefocusNet估計的結果達到像素級甚至亞像素級,卷積核的尺寸設置為2×2大小,步長為1,卷積核個數為70,這樣就能測量±4的視差,如果設置成1×1的卷積,則無法感受通道中的視差和散焦信息,而如果使用3×3的卷積會造成EPI-RefocusNet參數過多,網絡訓練難度也會大大增加,同時由于同一物體的不同視角的視圖上的位置偏移量(視差)很小,所以不需要尺寸過大的卷積核。為了加快網絡訓練速度,所有的卷積層都采用valid-padding,同時網絡采用批量隨機梯度下降(mini-batch stochastic gradient descent)進行訓練,這里引入Batch Normalization層(以下簡稱BN層),其計算式為:

公式(5)和公式(6)分別在計算BN層的輸入xi的均值與方差,公式(7)將輸入歸一化,式中的ε是為了防止方差為0導致無法計算而引入的一個數值很小的數,其值為10?6;公式(8)將歸一化后的x?i進行縮放平移,得到BN層的最終輸出yi,式中的γ和β為卷積神經網絡需要訓練的超參數。BN層將數據歸一化后再進行線性變換以改善數據分布,同時其線性變化是學習的。采用BN層可以減輕過擬合,并且由于將輸入數據歸一化,可以減輕對初始化權重的依賴,權重不會過高或者過低,改善梯度的傳播,并且使數據分布在激活函數的非飽和區域,可以在一定程度上解決梯度消失的問題,同時容許較高的學習率,可以提高訓練的速度,如今在圖像研究領域也在逐漸替代dropout。

圖12 EPI-RefocusNet結構

圖13 Conv Block結構
輸入數據通過Conv2D和ReLU的計算式為:

其中W為卷積核的權重,f(x)表示激活函數(activation function),b為偏置項,是可由網絡學習的超參數。此處選擇的激活函數為ReLU(Rectified Linear Unit),則輸出數據變為:

ReLU函數在深度學習的圖像研究領域中應用廣泛,由于其在x正半軸上的梯度始終為1,可有效地傳遞梯度,在一定程度上避免了梯度爆炸和梯度消失問題。將BN層置于Conv2D和ReLU之間,可以改變卷積層輸出結果的分布,使其落在激活函數的有效區域內,大大提高了神經元的活躍性,使得整體計算成本降低。
EPI-RefocusNet在經過低階特征提取之后,將5條支路的特征圖進行通道合并,此時通道數變成350,完成將EPI Volume和Refocus Volume的低階特征融合,再經過8個Conv Block繼續提取高階特征,最終通過一個Block,如圖14所示,采用“Conv2D-ReLU-Conv2D”的結構,第一個卷積核通道數為350,最后一個卷積核通道數為1,將特征圖通道壓縮,完成高階特征融合,輸出一張深度圖(depth map)。

圖14 最后一個Block
使用卷積神經網絡進行計算機視覺研究,要求訓練數據必須充足,而HCI 4D光場數據集只提供了20組場景,劃分為訓練集的場景僅16組,無法滿足訓練網絡至收斂的要求。因此,除了對輸入數據進行基本的預處理,在訓練階段還需對數據進行擴容操作,使網絡可以正常訓練,達到準確估計深度信息的程度。
文獻[14]使用CNN進行深度估計的時候也進行了數據擴容,但是該方法針對的是單目視覺的深度估計,而HCI數據集擁有9×9個視角,包含更多視差的信息,并且EPI-RefocusNet擁有7 875 911個參數,需要訓練的參數有7 868 911個,需要大量數據用于訓練,因此采取了如表1中的數據擴容方法,得到了足夠多的訓練數據。

表1 數據擴容方法
數據擴容主要分為兩大類方法,即變形(Transform)和顏色變換(Color Correction),其中圖像變形對光場圖像有廣泛的應用,如縮放是對原圖進行降采樣,以縮放為50%大小為例:將原圖的所有像素按照步長為2進行采樣,即每間隔1行進行一次采樣,然后將所有采樣的行與列的像素進行拼接,即得到原圖尺寸一半的圖像。針對光場圖像,就縮放而言,其特殊點在于對應的深度圖除了尺寸要縮放為50%以外,深度值也需要減少為50%,這是因為光場圖像產生的縮放和平移會影響其保存的場景中的空間幾何信息,將光場圖像縮放s倍,相當于將光場相機靠近了s倍。
隨機灰度化采用的方式為將灰度化過程中的R、G、B三個通道分量的權重進行隨機生成,滿足以下三個條件:

由于現實環境拍照時的光線條件是不一樣的,這將導致灰度化后圖片的灰度值也不一樣,采用隨機灰度化進行數據擴容是為了降低CNN對光照環境的依賴,提高模型的泛化能力。
使用表1中的各種方法隨機組合,最終將數據量擴充到滿足網絡訓練要求的程度,完成了EPI-RefocusNet的訓練。
EPI-RefocusNet是一種全卷積神經網絡,沒有使用池化層(pooling)進行降采樣,因此對輸入網絡的圖片尺寸沒有強制要求,可以采用小尺寸的圖片進行網絡訓練,再使用大尺寸的圖片進行交叉驗證(cross validation)。如果直接將尺寸為512×512的圖片輸入網絡訓練,由于尺寸太大,訓練批次大小(batch size)必須調小,這樣會造成訓練緩慢,甚至無法完成訓練,因此在訓練時,網絡輸入采用尺寸為25×25的擴容后的數據,訓練完成后,再使用尺寸為512×512的圖像進行驗證。
當輸入圖像尺寸為512×512時,網絡使用的卷積核大小為2×2,步長為1,使用valid padding,因此輸出的特征圖尺寸為減少1,EPI-RefocusNet共有22層卷積,則此時網絡最終輸出的深度圖尺寸為490×490。
在部分場景中,如圖15中箭頭指向的框中區域,其存在鏡面反射區域,對于網絡訓練會產生不良的影響,因此在訓練時需將這部分去除,以保證網絡可以正確地訓練。

圖15 鏡面反射區域
文獻[15]中對比了不同的損失函數(loss function)對網絡訓練結果的影響,EPI-RefocusNet訓練選擇的損失函數為平均絕對誤差(Mean Absolute Error,MAE),其計算式為:

式中,yi為第i個像素的ground truth深度值,y?i為第i個像素的估計深度值,m表示深度圖的像素點數量。
訓練方法使用小批量隨機梯度下降,batch-size為16,優化器(optimizer)使用的是RMSprop,初始學習率(learning rate)為10?4。
運行程序的機器配置采用雙路E5-2650 v4,GPU為Nvidia Titan V,訓練后端框架為Tensorflow,采用Keras進行網絡模型的搭建。訓練大約2~3天即可獲取良好的結果。
在訓練過程中,每迭代完一次,就使用512×512尺寸的圖像和對應深度圖進行交叉校驗,評估訓練結果的指標為MSE和BadPix,計算式如下:

如果一個像素點的估計結果與ground truth相差超過t時,該像素點為壞像素點,壞像素點的數目占估計結果所有像素點的數目的比重就是BadPix,參考HCI官方的測試指標,這里t取值為0.07。
整個訓練過程中,MSE和BadPix的變化情況如圖16和圖17,從圖中可以看出,EPI-RefocusNet在訓練過程中,MSE和BadPix總體趨勢為逐漸減少,說明網絡結構設計是合理的,并且采用的數據擴容是有效的。由于EPI-RefocusNet采用視差和散焦兩種深度線索,在僅使用視差無法完成準確估計的場景下,如遮擋場景和物體邊緣,這些部分在不同視角下的位置變化較大,可能無法構成一條EPI中的直線,則無法準確求出對應深度,使用另一條視差線索即可完成此種場景下的深度估計。在此后的對比實驗結果中,雙線索的EPI-RefocusNet在準確率指標MSE和BadPixel上也體現了這一特點。

圖16 訓練過程MSE變化

圖17 訓練過程BadPix變化
本章主要將EPI-RefocusNet和其他算法進行對比實驗,并將所有的實驗結果進行對比分析。實驗使用的測試集為HCI中的4個測試場景:Cotton、Dino、Sideboard和Boxes,如圖18所示,其場景復雜度依次增大。Cotton中包含一個雕像,場景相對簡單,估計難度較低;Dino場景中增加了更多立體幾何和光影的干擾,提高了估計難度;Sideboard場景使用了復雜的墻體紋理,并且書架部分由于書本高度不齊,邊緣信息較為復雜;Boxes場景使用一個鏤空盒子進行遮擋,估計難度較高。

圖18 測試場景
將測試集圖像進行數據預處理之后,輸入到訓練完成的EPI-RefocuNet中,得到估計的深度圖,與其他文獻對比結果如圖19。

圖19 對比結果
從對比圖可以看出EPI-RefocusNet估計結果比較準確,整體圖像也比較平滑,沒有出現估計明顯錯誤的大片區域。左側兩個場景Cotton和Dino中,圖形相對簡單,EPI-RefocusNet表現相對較好;在右側兩個稍復雜的場景中,EPI-RefocusNet在復雜多邊形場景和遮擋情況表現尚可。
采用MSE、BadPix和Runtime這三項指標對EPIRefocusNet和其他算法進行性能比較,對比結果如表2和表3,其中MSE和BadPix用于評價算法的準確性,Runtime用于評價算法的執行效率。
由表2可知,EPI-RefocusNet在測試場景中取得了良好的成績,說明其估計結果準確,且相對平滑。EPN[10]采用結合EPI和CNN的方式進行深度估計,SPO-MO[11]、SPO[12]和CAE[16]均是采用EPI作為深度估計的線索,通過構建不同的匹配代價的方法進行深度估計。EPIRefocusNet在MSE和BadPix指標上均優于這4種算法,說明采用兩種深度線索結合CNN的深度估計方法是有效的。
在計算效率上,EPN[10]一次計算僅能得出一個像素點的深度,SPO-MO[11]、SPO[12]和 CAE[16]同樣需要多次迭代求解,因此為了得到高精度的深度圖需要耗費大量時間,而EPI-RefocusNet一次計算就可得出完整的深度圖,計算調率明顯提高,具體結果如表3。
可以看出,在測試場景中,EPI-RefocusNet在計算效率上明顯領先其他算法,并且在準確度上也取得了良好的結果,因此EPI-RefocusNet在計算精度和運行時間上做了良好的權衡,在保證估計結果準確的前提下,大大提高了計算效率,因此可以說明EPI-RefocusNet是快速并且有效的。

表2 實驗結果準確性對比

表3 運行時間對比 s
本文采用卷積神經網絡融合兩種深度線索進行針對光場圖像的深度信息估計,通過縮放、顏色變換等數據擴容手段擴充了大量有效的訓練數據,使得網絡可以順利地訓練收斂,且具備良好的泛化能力,最終,通過與其他主流算法進行對比實驗,EPI-RefocusNet在針對光場圖像的深度估計中體現出了估計精度和準確率高且執行速度快的特點。