余思雨 齊 林 李逸文 帖 云
(鄭州大學信息工程學院 河南 鄭州 450001)
近幾年增強現(xiàn)實技術(shù)(Augmented Reality,AR)由于硬件門檻顯著降低、資本逐漸聚焦和政府政策支持等因素而逐漸興起,成為移動互聯(lián)網(wǎng)向人工智能時代演變的發(fā)展重點。除了幾何一致性的要求外,大多數(shù)AR應用中越來越注重真實和虛擬對象之間的視覺一致性,這可以使增強現(xiàn)實效果更加逼真[1]。然而各種復雜的戶外環(huán)境始終是AR應用場景不斷拓展所面臨的一個挑戰(zhàn)[2]。水面是生活中不可缺少的景觀,在這樣的場景下改善增強現(xiàn)實效果可以極大地豐富用戶體驗并進一步拓寬AR的應用領(lǐng)域。
同時定位與地圖構(gòu)建(SLAM)被認為是傳統(tǒng)AR跟蹤方法的一個很好的替代方法,因為它避免了先驗信息的必要性[3]。將語義與現(xiàn)實環(huán)境中的真實物體相關(guān)聯(lián)也已經(jīng)成為一個流行的研究領(lǐng)域。Sünderhauf等[4]利用深度學習目標檢測方法SSD與ORB-SLAM2相結(jié)合,輸出帶有語義信息的語義地圖,但場景中的動態(tài)物體會影響SLAM定位和建圖。Zhong等[5]通過目標檢測去除動態(tài)點,由于目標檢測方法無法達到實時,因此只在關(guān)鍵幀進行檢測以保證目標檢測線程和SLAM線程同步,然后通過特征匹配和擴展影響區(qū)域的形式進行運動概率的傳播,并在SLAM過程中去除動態(tài)點的影響,只利用靜態(tài)點進行追蹤。Kaneko等[6]注意到了天空對SLAM精度的影響,采用DeepLab v2[7]與單目ORB-SLAM[8]相結(jié)合,通過語義分割得到天空和動態(tài)物體的掩膜,使ORB特征點的提取范圍在掩膜之外分布即天空和動態(tài)物體上無ORB特征點。對于大多數(shù)基于特征的單目SLAM系統(tǒng),水面的反射將導致視覺誤差,而且它無法區(qū)分特征點是在真實物體上還是在反射上,所以需要語義信息的輔助[9]。因此檢測出水面區(qū)域是十分有必要的。趙一兵等[10]針對靜態(tài)水面特征呈現(xiàn)出的較高亮度、較低飽和度以及平滑的紋理特征,提出將飽和度亮度比值顏色特征和從灰度共生矩陣中提取的紋理特征融合的野外水體障礙物檢測方法。此類方法受環(huán)境條件影響較大,面對不同水域、不同天氣條件不具有普適性。另一類方法采用對稱檢測的方法[11-13],通過邊緣檢測,再把實物與倒影進行鏡像匹配計算對稱軸,從而檢測出倒影。此類方法在物體與水面倒影完全對稱時的效果較好,但是不適合在視頻中應用于全景圖片??傮w來說,相關(guān)研究還處于起步階段,對傳統(tǒng)檢測方法來說水面的形態(tài)顏色等特征多變、由于波動紋理復雜并且水面由于物理光學特性會發(fā)生反射而產(chǎn)生倒影等不確定因素,水面檢測始終是一個難題。隨著深度學習的發(fā)展,語義分割的結(jié)果得到了極大的改善。
本文提出一個基于深度學習進行語義分割驅(qū)動SLAM在水面場景下進行增強現(xiàn)實的方法。深度學習模型采用ICNET[14],用于實時的語義分割,提供水面的分割標簽圖傳入ORB-SLAM2系統(tǒng)[15]的前端,語義指導SLAM對地圖中不同區(qū)域的特征點進行分類,在實際的空間中將SLAM三維立體信息與語義標簽結(jié)合起來,從而可以在不同類別的物體上進行增強現(xiàn)實。最后根據(jù)水面的反射特性,增添虛擬物體相應的倒影,改善虛實一致性,使物體水面上的增強現(xiàn)實效果更加逼真。結(jié)果表明,該系統(tǒng)使用單個GPU加速實時性達每秒27幀以上,滿足增強現(xiàn)實實時性的要求,且水面檢測率達87%,滿足基本要求,最終增強現(xiàn)實效果也得到了提升。
由于增強現(xiàn)實實時性的要求,傳統(tǒng)方法對水面的檢測大多基于單幅圖片,且速度難以達到實時性要求。目前深度學習中的卷積神經(jīng)網(wǎng)絡(luò)(CNN)使用最為廣泛,相比傳統(tǒng)方法表現(xiàn)出強大的特征提取能力。目標為語義分割的CNN網(wǎng)絡(luò)模型中,ICNet、ENet[16]、SegNet[17]均達到實時性的要求,但就Cityscapes[18]數(shù)據(jù)集上的分割精度來看,ICNet遠遠高于其他兩種模型[14]。因此選用ICNet網(wǎng)絡(luò)模型,在TensorFlow框架下進行訓練。
ICNet在PSPNet[19]模型基礎(chǔ)上繼續(xù)使用金字塔池化模塊,之后引入級聯(lián)特征融合模塊,并使用三個分支進行特征融合形式的訓練,實現(xiàn)快速且高質(zhì)量的分割模型,該模型結(jié)構(gòu)如圖1所示。
圖1 ICNet網(wǎng)絡(luò)模型結(jié)構(gòu)
系統(tǒng)需要輸入連續(xù)視頻幀,目前有關(guān)水場景的動態(tài)視頻的數(shù)據(jù)集很難搜集,因此人工采集了城市內(nèi)一些常見的水場景,例如校園、公園等。數(shù)據(jù)集內(nèi)含40段視頻,每段時長在1~2分鐘之間。每段視頻通過抽幀的方式選取不同角度的場景進行標注,共1 000幅。數(shù)據(jù)采集過程如下:
1) 拍攝階段。選擇光線良好的有水面的室外場景,手持imx498攝像頭,以步行的運動方式,緩慢平移或旋轉(zhuǎn)以拍攝周圍環(huán)境的視頻,盡量保證視頻無模糊、少抖動。
2) 標注階段。對選出的圖片集進行人工像素級的標注,統(tǒng)一使用labelme多邊形標注工具,將水面區(qū)域標注為1,背景(其他區(qū)域)標注為0。
將標注好的圖片集打亂順序,選擇前800幅作為訓練集,后200幅作為測試集。測試集用于檢驗模型的泛化能力,對模型語義分割的性能進行評價。由于本實驗僅將圖片標注為水域和背景兩類,而且數(shù)據(jù)集相對較少,因此引入遷移學習的概念,在對數(shù)據(jù)集進行訓練時,采用ICNet在Cityscapes上的預訓練模型。
提出的語義SLAM系統(tǒng)如圖2所示。在ORB-SLAM2原有的基礎(chǔ)上增添了語義分割線程和語義驅(qū)動下的增強現(xiàn)實模塊。將原視頻幀和經(jīng)過深度學習語義分割后得到的標簽圖送入SLAM的前端作為輸入。標簽圖中水中的像素點亮度值為1,背景中的像素點亮度值為0。進入追蹤線程對原視頻幀提取ORB特征點。根據(jù)相鄰幀間特征點的匹配進行姿態(tài)估計或通過全局重定位來初始化位姿。然后跟蹤已經(jīng)重建的局部地圖進一步優(yōu)化位姿,根據(jù)規(guī)則確定新的關(guān)鍵幀。在局部地圖構(gòu)建的過程中,將地圖點進行分類,根據(jù)地圖點對應的已緩存入追蹤線程的ORB特征點在標簽圖中的同位置的像素值賦予不同類別的標簽,再使用局部捆集調(diào)整(Local BA)進行優(yōu)化。最后再對插入的關(guān)鍵幀進行篩選,去除冗余的關(guān)鍵幀。閉環(huán)檢測線程分為閉環(huán)檢測和閉環(huán)矯正兩個過程,通過這兩個過程對SLAM整體建圖進行圖優(yōu)化。
圖2 系統(tǒng)架構(gòu)圖
光照一致是增強現(xiàn)實研究中實現(xiàn)虛實融合的一個重要方面。光照一致性主要關(guān)注真實場景中的光照對虛擬對象的作用,包括明暗、反射、陰影等。在水面反射的場景下,虛擬物體受到戶外復雜環(huán)境光的作用下應該在水面產(chǎn)生反射。這個反射的顏色同時受到水體顏色和虛擬物體本身顏色的影響。
得到帶標簽的3D地圖后,系統(tǒng)圖選擇標簽為1(水域)的地圖點,并采用隨機采樣一致(RANSAC)算法進行平面的擬合[20]。該算法假設(shè)平面模型的方程為Ax+By+Cz+D=0,每次從標簽為1的地圖點中隨機選取三個點,計算由這三個點構(gòu)成的平面模型,然后按照給定的閾值去擬合其他點,重復該過程直至達到最大迭代次數(shù),選取包含最多點對應的平面模型作為最優(yōu)估計。該平面作為放置3D模型的平面,顯示出3D模型放置在水面的效果。
水面反射遵循鏡面反射原理。成像原理遵循光的反射定律。倒影具有與真實物體相同的大小,且它們對應點的連線垂直于反射面,且真實物體到反射面的距離與倒影到反射面的距離相等。因此,為達到虛實一致性,將3D模型在關(guān)于平面對稱的位置生成等大的倒影。
光線在水面上發(fā)生反射的同時也產(chǎn)生折射。部分光線在水面上發(fā)生反射并進入人的眼睛,但部分光線被折射到水中,人眼無法看到。因此,倒影的亮度比岸上的景色更暗。事實上,由于水中存在懸浮物質(zhì),水的顏色會發(fā)生變化。因此需要提取水面上無反射區(qū)域的顏色。
利用深度學習語義分割出來的水域范圍,將其中水面無反射區(qū)域和倒影區(qū)分開。在室外水面無反射區(qū)域其實是反射了天空,由于天空總是具有高亮度、低飽和度的特征,因此這部分水的亮度也很高,飽和度很低[21]。而倒影區(qū)域一般亮度較低且因反射了周圍建筑或樹木同時也具有較高的飽和度。因此,首先需要將原圖片由RGB轉(zhuǎn)化為HSV顏色空間。HSV空間中,H代表色調(diào),范圍為0~360,用以描述顏色;S代表飽和度,可以被視為光譜顏色和白光的混合比,并且值的范圍為0~1;V代表亮度,范圍為0~1。RGB與HSV的轉(zhuǎn)換關(guān)系如下:
(1)
(2)
(3)
(4)
式中:R、G、B分別代表RGB顏色空間中的像素值,并且范圍被歸一化為R,G,B∈[0,1]。通過轉(zhuǎn)換,H∈[0,2π],S∈[0,1],V∈[0,1]。
然后統(tǒng)計水域范圍內(nèi)高亮度低飽和度區(qū)域像素的平均R、G、B值。
采用Darker混色模型[22],將水面無反射區(qū)域的平均RGB值作為源色,將3D模型本身的顏色作為目標色,選取兩色中較暗的顏色作為結(jié)果色。也就是說,選出RGB對應通道中的較低值?;焐?guī)則如下:
Cs=(Rs,Gs,Bs)
(5)
Cd=(Rd,Gd,Bd)
(6)
Cr=min(Cs,Cd)
(7)
Ar=1
(8)
式中:Rs、Gs、Bs分別是水面無反射區(qū)域的平均RGB值;Rd、Gd、Bd分別是3D模型的RGB值;Cr是結(jié)果色,作為3D模型倒影的顏色;Ar代表透明度。
使用Ubuntu 14.04操作系統(tǒng),CPU為四線程Intel Core i5- 4590,GPU為單個Nvidia K2200。ICNet網(wǎng)絡(luò)訓練使用TensorFlow框架,開發(fā)工具是Python 2.7+Anaconda。基于ORB-SLAM2改進的系統(tǒng)的開發(fā)工具是C++,使用Pangolin(一個對OpenGL進行封裝的輕量級圖形/視頻顯示庫)實現(xiàn)可視化界面。
在實際應用中,實時性能是評估增強現(xiàn)實系統(tǒng)的關(guān)鍵指標。實驗統(tǒng)計了一些主要模塊處理一幅圖片(尺寸為960×540)所需的時間,結(jié)果如表1所示。
表1 各部分模塊時間統(tǒng)計表
系統(tǒng)運行時主要線程包含語義分割、視覺里程計、建立稀疏三維語義地圖以及增強現(xiàn)實模塊(三維圖形渲染使用Intel Core i5-4590集成顯卡),總體處理一幅視頻幀的平均時間為58.4 ms。視頻幀在可視化界面顯示的幀率為每秒34幀。增強現(xiàn)實模塊包含平面擬合以及3D模型的渲染等主要部分。實驗表明系統(tǒng)運行耗時主要集中在3D模型渲染過程,其運行速率與GPU固件圖形渲染能力有關(guān),以NVIDIA k2200顯卡為例幀率可達每秒27幀以上。
圖3展示了本文數(shù)據(jù)集中的一段視頻傳入所改進系統(tǒng)后經(jīng)過語義分割線程分割后得到的分割結(jié)果圖。分割精度經(jīng)測試集測試結(jié)果為87%,滿足要求。將原視頻幀與圖3中分割結(jié)果圖一同送入SLAM系統(tǒng)后所建語義地圖如圖4所示。語義地圖中點分為水和背景,用了兩種顏色(灰度表示)進行區(qū)別。
圖3 融合語義信息的SLAM建圖示例
圖4 SLAM語義地圖
圖5展示了實驗過程中的增強現(xiàn)實效果與原ORB-SLAM2系統(tǒng)的增強顯示效果的對比。圖5中:(a)是原始視頻幀。(b)是原ORB-SLAM2系統(tǒng),未融入語義信息,僅使用RANSAC算法進行平面擬合后插入3D模型的效果??梢钥闯?,擬合的平面是隨機的,虛擬物體大多懸浮在半空中而且水面中無相應的倒影,顯得不真實。(c)使用了改進的系統(tǒng),融合了語義信息,3D模型安放在水面,但無倒影,仍有懸浮感。(d)是使用改進的系統(tǒng)并完善了對3D模型在水面下倒影的渲染,消除了虛擬物體在真實場景的懸浮感。倒影的顏色隨光線和水體的顏色會發(fā)生相應的變化,也使增強現(xiàn)實效果更加逼真。
圖5 實驗過程及效果對比圖
本文將深度學習語義分割的信息與SLAM追蹤及建圖過程相融合,使機器能夠理解高級的語義信息,也使所建SLAM地圖更有意義。結(jié)合現(xiàn)實場景中的物理規(guī)則,可以在水面上實現(xiàn)更好的增強現(xiàn)實效果,這些在原來僅有特征點組成的無意義的地圖中是不可能實現(xiàn)的。本文所提出的系統(tǒng)流程合理且各部分算法簡單、計算復雜度低,可以滿足增強現(xiàn)實的實時性要求。未來可以將其移植到移動設(shè)備上進一步豐富戶外場景中的增強現(xiàn)實體驗。本文的不足之處在于未考慮水面懸浮物與3D模型倒影之間的遮擋關(guān)系,為進一步增強真實感,可以對此展開下一步的研究工作。