張 樂, 張 元*, 韓 燮, 陳佳瑜
(1.中北大學大數(shù)據(jù)學院,太原 030051;2.中國人民銀行太原中心支行,太原 030001)
增強現(xiàn)實技術是一種將虛擬世界疊加到現(xiàn)實世界中的技術,通過該技術可以加深用戶對于現(xiàn)實世界的認知,便于用戶更加形象具體地理解現(xiàn)實世界[1]。增強現(xiàn)實系統(tǒng)主要包括視頻獲取、圖像識別、三維注冊、虛實融合等模塊[2],其中識別和注冊是核心研究內(nèi)容,如文獻[3]中采用人工標識跟蹤定位技術。該技術可以通過圖像模板匹配或編碼特征標識來識別標識信息。圖像模板匹配的方法需要將目標圖像進行校正,然后再與3種光照和4個方向上標準圖像進行逐一匹配,所以該方法的計算量過大,設備要求較高;而另一種編碼特征標識的方法是對圖像內(nèi)部進行解碼來識別標識。文獻[3]中使用海明編碼的方式將每一行編碼的第3位和第5位設置為有效碼,其余3位設置為校驗碼,通過該方法可以有效提高識別效率,但是最多只能標識1 024種標識。以上兩種方式在應用開發(fā)中都需要提前置入標識信息和虛擬信息,導致面對新的應用場景需求,只能重新開發(fā),并且標識的注冊也需要人工注冊,必須在近距離觀察目標物體才能準確地識別標記,光線的強弱、標記被遮擋或短暫移出視野等情況都會導致應用無法識別跟蹤標識和加載模型[4]。文獻[5]中采用自然特征跟蹤定位的方式去識別標識,該方法需要從視頻圖像中提取特征點,然后與提前注冊的特征進行匹配,從而載入合適的虛擬物模型,計算量較大,需要不斷地提取視頻流中的特征點,并且識別效率較低,文獻[5]中識別90%的特征點。以上方法所帶來的問題都極大地限制了增強現(xiàn)實(augmented reality, AR)應用的實用性,影響用戶體驗。
針對以上問題,提出一種免注冊標識的增強現(xiàn)實方法。該方法采用C/S(客戶端-服務端)架構(gòu),以HoloLens作為客戶端,通過凝視、語音和手勢的操作方式進行人機交互[6-7],采集目標信息,使用用戶數(shù)據(jù)報協(xié)議(user datagram protocol, UDP)將信息傳輸給服務端,服務端使用訓練好的卷積神經(jīng)網(wǎng)絡(convolutional neural network,CNN)[8]完成識別分類后,HoloLens根據(jù)分類結(jié)果從服務器動態(tài)加載出虛擬信息,并以HoloLens的空間映射功能替代傳統(tǒng)AR技術中的標識跟蹤功能,從而實現(xiàn)增強現(xiàn)實效果。其中,識別分類功能是采用遷移學習[9]思想,微調(diào)AlexNet[10]模型的參數(shù)實現(xiàn)。該方法相較于之前的增強現(xiàn)實方法,目標信息識別不再局限于特定的標識信息,同時有較高的識別準確率,用戶的活動和操作不再受客觀因素的限制,不需要持續(xù)近距離地觀察目標信息,在加載新的虛擬信息時,只需要將該虛擬信息上傳服務器即可,不用對客戶端重新開發(fā)。

圖2 C/S架構(gòu)設計Fig.2 C/S architecture design
傳統(tǒng)的增強現(xiàn)實識別標識的過程為對圖像進行檢測、計算標識的位置和方向,從而匹配虛擬物體,具體流程如圖1所示。

圖1 傳統(tǒng)AR流程Fig.1 Traditional AR process
采用C/S架構(gòu),通過UDP進行信息傳輸,客戶端負責人機交互、信息采集以及虛擬模型的動態(tài)加載,服務端提供信息分類的功能,從而實現(xiàn)增強現(xiàn)實的效果。C/S架構(gòu)設計如圖2所示。
以高性能計算機作為服務端負責識別標識信息,不僅可以減少客戶端的運算量,還可以使分類更加準確。此外,客戶端本身無法攜帶大量的虛擬模型,而服務端不僅可以存儲虛擬模型以供客戶端加載,還可以在不更新客戶端的情況下,編輯新的虛擬模型和添加操作響應事件來適應新的場景需求。
HoloLens是一款無需線纜,可以完全獨立使用的頭戴式增強現(xiàn)實眼鏡。HoloLens自身支持凝視識別、手勢識別以及語音識別的操作方式,其與傳統(tǒng)增強現(xiàn)實設備最大的不同在于,HoloLens所搭載的全息處理單元(holoLens processing unit,HPU)是微軟為其量身定制的一款實時處理空間映射的專用芯片,可以將真實環(huán)境與虛擬對象相疊加,給用戶帶來一個感官效果真實的全新環(huán)境。
HoloLens通過其配置的慣性測量單元(inertial measurement unit,IMU)、環(huán)境攝像頭和深度攝像頭來實時采集用戶周圍的環(huán)境信息,并結(jié)合即時定位和地圖重建(simultaneous localization and mapping,SLAM)算法和HPU處理器采集的信息進行實時處理,將虛擬信息合理映射,實現(xiàn)增強現(xiàn)實的效果。
HoloLens應用的開發(fā)主要由4部分組成,分別是信息采集、信息傳輸、人機交互以及模型動態(tài)加載。客戶端使用Unity3D引擎作為核心開發(fā)平臺,并使用與Unity3D引擎集成的HoloToolKit軟件開發(fā)工具包(SDK)。HoloToolKit SDK中集成了負責交互設計的基本類庫,其中語音識別、凝視識別和手勢識別負責實現(xiàn)用戶與系統(tǒng)、用戶與全息對象模型之間自然而簡潔的交互,空間映射功能則負責虛擬物體與物理世界之間的交互。
1.1.1 信息采集
信息采集是利用HoloLens對目標進行拍照,將拍攝結(jié)果以Jpg的格式保存,因為Unity3D引擎并不支持直接訪問Jpg格式的圖片,而是將其轉(zhuǎn)換為Sprite格式,并加載至UI載體上進行顯示。
1.1.2 信息傳輸
信息傳輸是通過UDP對圖文信息進行傳輸,UDP具備傳輸速度快、報頭短以及廣播和多播的特點,但與此同時UDP可靠性較差。根據(jù)其單次可傳輸?shù)淖畲笞止?jié)數(shù)將傳輸?shù)男畔⑦M行預處理,在發(fā)送端根據(jù)文件絕對路徑去獲取圖片,然后對圖片進行數(shù)據(jù)轉(zhuǎn)碼、數(shù)據(jù)切割以及添加報頭信息的操作,報頭信息中添加文件類型、文件數(shù)據(jù)長度、數(shù)據(jù)分組數(shù)以及數(shù)據(jù)編號,接收端根據(jù)數(shù)據(jù)報頭信息完成數(shù)據(jù)解碼和重組,并校驗是否有空數(shù)據(jù),若有丟包,將校驗信息回傳并申請發(fā)送端對丟包信息根據(jù)報頭數(shù)據(jù)編號重新發(fā)送。報頭信息如圖3所示。

圖3 報頭信息Fig.3 Header information
1.1.3 人機交互
(1) 凝視識別是基于眼動追蹤技術實現(xiàn)的,這種方法是用戶和應用程序之間交互的最快方法,也是用戶交互輸入的第一種形式,用于跟蹤和選定全息對象。凝視識別主要是依據(jù)用戶頭部的位置和方向發(fā)射Unity3D引擎的物理光線,在與全息對象碰撞后,得到碰撞結(jié)果的反饋,包括碰撞點的位置和碰撞對象的信息,從而實現(xiàn)場景中全息對象的跟蹤和選定。系統(tǒng)可以通過凝視識別實現(xiàn)虛擬物體的選定和移動。
(2) 手勢識別是識別并跟蹤用戶手的位置和狀態(tài)的同時捕獲輸入手勢,系統(tǒng)自動觸發(fā)相應的反饋,從而操縱場景中的虛擬對象。系統(tǒng)識別3種手勢:Air-tap(食指在空中點擊)、Navigation gesture(食指與拇指相碰掌心向前,手向左或向右平移)和Bloom(手掌心朝上,手虛握拳,張開手掌)。
(3) 語音識別是用戶以語音的方法與全息對象交互。語音識別是通過在應用程序中設置關鍵字和相應的反饋行為而實現(xiàn)的。當用戶說出關鍵字時,響應預設的反饋行為。系統(tǒng)中,語音識別和手勢識別的具體操作指令及響應行為如表1所示。

表1 操作指令及響應
(4) 空間映射可以將虛擬世界與現(xiàn)實世界相疊加。其實現(xiàn)包括兩個步驟:第1步通過使用HoloLens配備的深度攝像頭和環(huán)境感知攝像頭,掃描用戶周圍的環(huán)境數(shù)據(jù)和內(nèi)置三角測量,以實現(xiàn)現(xiàn)實世界的模型化和數(shù)字化;第2步實時計算數(shù)字物理空間是否可以放置虛擬全息對象。系統(tǒng)通過空間映射與凝視識別配合,實現(xiàn)將虛擬物體移動至用戶凝視的現(xiàn)實世界中。借助空間映射,虛擬模型的空間位置不再受標識信息在現(xiàn)實世界中位置的約束。
1.1.4 模型的動態(tài)加載
模型的動態(tài)加載是HoloLens通過訪問服務器加載虛擬模型來實現(xiàn)的。日常生活中物體的種類成千上萬,在增強現(xiàn)實應用程序中很難將所有的物體提前置入;而HoloLens與高性能的計算機相比,其渲染能力、內(nèi)存和性能都十分有限,所以HoloLens也不能攜帶大量的模型以供加載。針對該問題采用了從服務器上動態(tài)加載模型的方法,通過Unity3D引擎,將虛擬模型以及腳本打包為AssetBundle的壓縮包,上傳至服務器,而HoloLens根據(jù)服務端識別后的結(jié)果,訪問服務器下載對應模型的AssetBundle壓縮包并解壓,從而實現(xiàn)模型的動態(tài)加載。
服務端主要負責對接收到的信息識別分類以及提供虛擬模型。根據(jù)已有的裝甲類模型包括坦克、裝甲車以及殲擊車等識別分類,并使用Apache搭建服務器,將已有的虛擬模型上傳至服務器上。
采用深度學習技術中的卷積神經(jīng)網(wǎng)絡完成識別分類的任務。卷積神經(jīng)網(wǎng)絡是多層的有監(jiān)督的神經(jīng)網(wǎng)絡,通過前向傳播和反向傳播的方式不斷調(diào)整連接權值,并且相鄰層神經(jīng)元之間采用部分連接,通過局部感知和權值共享的方式降低網(wǎng)絡結(jié)構(gòu)復雜度。但與此同時,卷積神經(jīng)網(wǎng)絡訓練需要大量的訓練樣本、訓練時間長以及二次學習困難,所以采用遷移學習對傳統(tǒng)網(wǎng)絡模型進行遷移學習訓練。
遷移學習是將源領域?qū)W習得到的模型應用到目標領域中去,其數(shù)學定義為一個域D由一個特征空間X和特征空間上的概率分布P(X)組成,即D={X,P(X)},其中X=x1,x2,x3,…,xn。而一個任務T由一個標簽空間以及一個條件概率分布P(Y|X)組成,其中T={Y,P(Y|X)}。所以遷移學習可以理解為給定一個源域DS(source domain)和源任務TS(source task)以及目標域DT(target domain)和目標任務TT(target task),在DS≠DT或TS≠TD的情況下,具備DS和DT的信息時,學習得到目標域DT中的條件概率分布為P(YT|XT)。
根據(jù)源域DS、源任務TS、目標域DT和目標任務TT的相同、相似或不同的情況,遷移學習的基本方法可以分為4種,分別是:
(1)基于樣本的遷移學習(instance based transfer learning)是依賴一定的權重生成規(guī)則,對數(shù)據(jù)樣本進行重用,提高源域中與目標域相同或相似的樣本權重。
(2)基于模型的遷移學習(parameter/model based transfer learning)通過尋找源域與目標域中共享的參數(shù)信息,將源域訓練好的模型應用到目標域,再使用目標域樣本數(shù)據(jù)對模型中的參數(shù)進行微調(diào)(Fine-tune)。
(3)基于特征的遷移學習(feature based transfer learning)是將源域和目標域的數(shù)據(jù)特征變換為統(tǒng)一的特征空間,以特征變換的方式來減少源域和目標域之間的差距,從而進行分類識別任務。
(4)基于關系的遷移學習(relation based transfer learning)需要尋找源域和目標域樣本之間的關系,根據(jù)挖掘出的不同領域之間關系的相似性,實現(xiàn)遷移學習。
應用背景不僅要求所選的卷積神經(jīng)網(wǎng)絡遷移訓練的時間短,還要求該網(wǎng)絡可以高效完成多種分類任務。常見的卷積神經(jīng)網(wǎng)絡中AlexNet網(wǎng)絡層數(shù)較少,可以極大減少遷移學習訓練的時間,而且該網(wǎng)絡識別精度高,在圖像分類方面取得了顯著效果,所以,選用AlexNet網(wǎng)絡進行遷移學習訓練。由于AlexNet網(wǎng)絡模型的源領域分類數(shù)量較大,因此使用基于模型的遷移學習方法進行訓練。
AlexNet網(wǎng)絡模型共8層結(jié)構(gòu),分別是5個卷積層以及與其相對應的池化層和3個全連接層,采用重疊池化的方法提升精度,不容易產(chǎn)生過擬合。同時可以提升特征的豐富度,結(jié)合Dropout和Data Augmentation(數(shù)據(jù)擴充)方法避免過擬合。此外,AlexNet網(wǎng)絡中采用ReLU作為激活函數(shù),成功地解決了Sigmoid激活函數(shù)在網(wǎng)絡較深時產(chǎn)生的梯度彌散問題,并且提出局部響應歸一化(local response normalization,LRN),增加了網(wǎng)絡模型的泛化能力。
良好的樣本數(shù)據(jù)集是分類識別研究的基礎。通過互聯(lián)網(wǎng)途徑收集了15類坦克及裝甲車圖像樣本,經(jīng)過整理和標注后,得到共計1 444張圖像樣本,樣本種類及數(shù)量分布如圖4所示。為了減輕和避免模型訓練時出現(xiàn)過擬合現(xiàn)象,減小由于各類樣本數(shù)據(jù)數(shù)量分布不均勻所帶來的識別效果的影響,將樣本圖像按數(shù)量比例進行旋轉(zhuǎn)90°、旋轉(zhuǎn)180°、水平鏡像和豎直鏡像操作擴充數(shù)據(jù)集,如圖5所示。經(jīng)過擴充后,數(shù)據(jù)集總數(shù)量達到9 012張,最終制作為用于坦克裝甲識別的數(shù)據(jù)集。

圖4 樣本種類及數(shù)量分布Fig.4 Sample type and quantity

圖5 樣本擴充Fig.5 Sample expansion
在擴充后的數(shù)據(jù)集上進行訓練,從不同類別中各隨機挑選75%的樣本數(shù)據(jù)為訓練數(shù)據(jù)集,其余25%的樣本數(shù)據(jù)作為測試數(shù)據(jù)集,迭代次數(shù)為100,進行訓練。訓練參數(shù)如表2所示,訓練過程如下。
(1)AlexNet網(wǎng)絡模型在ImageNet的數(shù)據(jù)集上進行預訓練,通過該步驟將AlexNet網(wǎng)絡模型的參數(shù)初始化。
(2)由于AlexNet網(wǎng)絡模型的最后3層被配置為1 000個分類,所以將最后3層全連接層進行重新訓練以適應新的分類,通過該步驟保留新的全連接層的參數(shù),來適應新數(shù)據(jù)集的分類類別。
(3)將(1)中的前5層卷積層和其相應的池化層、激活函數(shù)以及模型參數(shù)與(2)中的全連接層及其參數(shù)相結(jié)合,進行微調(diào)從而完成模型的訓練。
表2中,Softmax函數(shù)對網(wǎng)絡最終的輸出x1,x2,x3,…,xn進行歸一化處理,使得到的值范圍都在(0,1)之間,并且和為1,類似于概率分布,若某個類別的概率最大,則將樣本歸為該類別的可能性也就最高。網(wǎng)絡結(jié)構(gòu)如圖6所示。

表2 訓練參數(shù)

圖6 網(wǎng)絡結(jié)構(gòu)Fig.6 Network structure
通過損失值、過擬合比率以及測試數(shù)據(jù)分類的準確率來評判模型訓練的效果。其中,測試數(shù)據(jù)分類的準確率定義為

(1)
式(1)中:ValidationExactQuantity表示測試數(shù)據(jù)分類結(jié)果正確的數(shù)量;ValidationTotalQuantity表示測試數(shù)據(jù)的總數(shù)量。測試數(shù)據(jù)分類的準確率越高,表示網(wǎng)絡模型分類的效果越好。
Softmax的交叉熵損失函數(shù)為

(2)
過擬合比率定義為

(3)
式(3)中:TrainAcc表示訓練數(shù)據(jù)準確率;ValAcc為式(1)中測試數(shù)據(jù)準確率,TrainAcc定義為

(4)
式(4)中:TrainExactQuantity為訓練數(shù)據(jù)分類結(jié)果正確的數(shù)量;TrainTotalQuantity為訓練數(shù)據(jù)的總數(shù)量。通常來說,過擬合比率越接近于1,表示網(wǎng)絡模型的泛化能力越好。
網(wǎng)絡模型通過遷移學習訓練,其訓練集和測試集的準確率如圖7所示,訓練集和測試集的損失值如圖8所示。

圖7 訓練集和測試集的準確率變化曲線Fig.7 Accuracy curve of training set and test set

圖8 訓練集和測試集的損失值變化曲線Fig.8 Loss value curve of training set and test set
由圖7可看出,采用遷移學習方法訓練的網(wǎng)絡模型收斂較快,在27次迭代時,訓練數(shù)據(jù)中模型分類的準確率可以達到90%,經(jīng)過100次迭代后,訓練數(shù)據(jù)中模型分類的準確率可以提升至100%,隨后使用測試集對網(wǎng)絡模型的泛化能力進行測試,最終測試的準確率平均值為97.86%,而且模型的過擬合比率基本穩(wěn)定在1.03左右,表明訓練的網(wǎng)絡模型具備良好的泛化能力。
將HoloLens連接Wifi,與服務端根據(jù)IP地址以及端口號實現(xiàn)信息傳輸,開始測試系統(tǒng)功能。HoloLens第一視角運行圖如圖9所示,用戶通過語音或?qū)D9中的Take、Show、Load和Send按鈕進行Air-Tap手勢操作,實現(xiàn)不同的功能。圖9中按鈕下方的圖片是HoloLens對顯示器中的一張ZTZ99式坦克拍照的結(jié)果,“發(fā)送完成”為發(fā)送任務的狀態(tài),圖中Send按鈕上的光圈為光標,以此判斷用戶視線是否與全息模型發(fā)生碰撞。

圖9 HoloLens第一視角運行圖Fig.9 HoloLens first perspective operation diagram
為了檢驗訓練好的卷積神經(jīng)網(wǎng)絡模型的泛化能力,使用HoloLens對顯示器中另一張99式坦克的圖片進行拍照,原圖如圖10(b)所示,而圖9中HoloLens拍攝的圖片和圖10(a)中原圖對比,HoloLens所拍圖片可以保留原圖的所有特征。圖11所示為服務端接收到HoloLens端發(fā)送的圖片并顯示,圖9中HoloLens拍攝的圖片與圖11中服務器接收到的圖片相對比,采用的傳輸方法可以有效地解決丟包問題。圖12所示為分類結(jié)果,由圖12可看出,遷移訓練的模型不僅可以準確對目標進行分類,且不局限于某一特定的標識圖,而本次訓練時間僅為80 min左右,訓練出的模型可以對15類坦克標識進行識別分類,相較于傳統(tǒng)AR開發(fā)的標識信息提前注冊和只能識別注冊的標識,效率更高。

圖10 ZTZ99式坦克原圖Fig.10 ZTZ99 tank original picture

圖11 服務端接收圖片F(xiàn)ig.11 The server receives the picture

圖12 分類結(jié)果Fig.12 Classification result
服務端將圖12中的分類結(jié)果發(fā)送給HoloLens端,HoloLens根據(jù)“99式坦克”的關鍵字,從服務器中獲取到該坦克模型,圖13所示為HoloLens加載模型的第一視角。HoloLens加載的模型初始位置在用戶視線前端2 m處,可以通過凝視識別選定模型,并結(jié)合手勢與模型進行交互。

圖13 HoloLens加載模型Fig.13 HoloLens loading model

圖14 HoloLens空間映射圖Fig.14 HoloLens space map
圖14所示為HoloLens開啟空間映射,其中的三角面片為HoloLens的空間映射對周圍環(huán)境進行掃描,并在現(xiàn)實空間的物體表面生成三角面片,而全息模型可以放在任何一個掃描到的位置上。

圖15 HoloLens操作全息模型第一視角圖Fig.15 HoloLens operation holographic model first perspective
圖15所示為HoloLens操作全息模型的第一視角,通過手勢Air-Tap選定全息模型、空間映射掃描地形并結(jié)合凝視識別來選定位置,將全息模型放置在地上和桌面上,并使用手勢Navigation Gesture控制全息模型順時針旋轉(zhuǎn)90°。圖16所示為傳統(tǒng)AR開發(fā)效果圖。

圖16 傳統(tǒng)AR效果圖Fig.16 Traditional AR renderings
由圖16可以看出,傳統(tǒng)AR應用中模型的顯示必須借助特定的標識信息,而更換標識信息、標識信息受到外界環(huán)境干擾或無法一直跟蹤標識都會導致AR應用無法加載模型。由圖15可以看出,本文方法中全息模型不需要依賴標識而顯示,所以不會受到外界環(huán)境的影響和目標信息的限制,用戶可以在任意角度和位置觀察全息模型或與模型交互,而結(jié)合空間映射功能,也可以使全息模型更加準確、合理地與現(xiàn)實世界相結(jié)合。客戶端負責采集信息,而服務端通過訓練好的卷積神經(jīng)網(wǎng)絡模型識別分類所采集的信息,客戶端根據(jù)分類的結(jié)果從服務器動態(tài)加載模型,所以系統(tǒng)可以在不更新客戶端,只需要對服務端的卷積神經(jīng)網(wǎng)絡模型重新訓練,客戶端便可以從服務器加載新的模型,從而更好地適應各種場景需求。
針對傳統(tǒng)增強現(xiàn)實對新場景適應性差、對標識依賴高以及開發(fā)要求高的問題,提出一種免注冊標識的增強現(xiàn)實方法,經(jīng)測試得到以下結(jié)論。
(1)將虛擬物體模型上傳服務端并由客戶端動態(tài)加載,在降低客戶端應用所需的內(nèi)存的同時,還可以在不更新客戶端的情況下實現(xiàn)多種模型的加載以及交互。
(2)使用遷移學習訓練的卷積神經(jīng)網(wǎng)絡取代人工標識和自然特征識別進行識別,訓練時間短,識別分類精度高、速度快,其較高的泛化能力使得識別對象也不再局限于特定標識。
(3)采用空間映射的方法替代標識跟蹤,可以擺脫標識的實際位置限制,使虛擬信息可以更加準確、合理地與現(xiàn)實世界相結(jié)合。
(4)在人機交互方面,以方便快捷的手勢、語音和凝視的方式與模型進行交互,用戶操作舒適自然。