三維網格精簡算法java版_ISMAR 2020 | 商湯提出手機端實時單目三維重建系統

0599087f8796b63c2dd366646be70efc.png

導讀:商湯研究院和浙江大學CAD&CG國家重點實驗室合作研發了一個手機端實時單目三維重建系統Mobile3DRecon。與現有的基于RGBD的在線三維重建或離線生成表面網格的系統不同,該系統結合前端位姿跟蹤結果,允許用戶使用單目攝像頭在線重建場景表面網格。

在深度估計方面,提出結合多視圖半全局匹配算法和深度神經網絡優化后處理過程魯棒地估計場景深度。在表面網格生成過程,本文提出的在線網格生成算法可以實時增量地融合關鍵幀深度到稠密網格中,從而重建場景表面。通過定性和定量的實驗驗證,所研制的單目三維重建系統能夠正確處理虛擬物體與真實場景之間的遮擋和碰撞,在手機端實現逼真的AR效果和交互。

論文名稱: Mobile3DRecon: Real-time Monocular 3D Reconstruction on a Mobile Phone

論文地址:

Mobile3DRecon: Real-time Monocular 3D Reconstruction on a Mobile Phone?ieeexplore.ieee.org

Oral slides:

https://www.youtube.com/watch?v=W95Vs4REUGM?www.youtube.com

問題和挑戰

遮擋和碰撞檢測一直是AR行業面對的一大難題,其技術難點在于需要實時獲取場景的三維表面信息,從而使虛擬物體和真實環境能融為一體。

當前已有的實時場景重建系統通常需要RGB-D或Lidar攝像頭的支持(如KinectFusion, InfiniTAM, ElasticFusion, BundleFusion等),然而受硬件的限制目前市面上大部分的手機無法使用該功能;

另一類重建系統雖然可以根據單目RGB攝像頭計算深度,從而重建場景表面(如MonoFusion, MobileFusion, CHISEL等),但是需要較大的計算時間和內存開銷,大多僅能在PC或高端的移動平臺上實時運行。

針對上述問題,本文提出了一個手機端實時單目三維重建系統Mobile3Drecon,該工作的主要貢獻在于:

  1. 提出一種基于多視圖關鍵幀的深度估計方法,能夠在手機端高效獲取較高精度的場景深度,同時能夠一定程度上容忍SLAM位姿偏差和弱紋理場景的影響;
  2. 提出一種快速有效的增量式網格生成方法,該方法可以融合關鍵幀深度從而實時增量地重建場景表面網格,同時支持場景動態物體的移除,在中端的手機平臺上實時運行;
  3. 搭建了一套完整的基于單目RGB的實時三維重建系統,該系統在中端手機平臺上可以達到125ms每關鍵幀,獲取的表面網格精度可以達到厘米級,基于該系統可以在手機端實現逼真的AR效果和交互,如圖1所示。

41f08f3bde8293a7fd2cdd97e7b15839.png
圖1:Mobile3DRecon系統在小米8手機上實時重建室內辦公室場景并實現虛實遮擋和碰撞效果

方法介紹

本系統框架如圖2所示。移動設備獲取的RGB圖像和IMU信息經過前端視覺慣性SLAM系統后可以實時得到關鍵幀的6自由度位姿,該位姿經過后端全局優化后進入深度估計模塊,對于新增的每個關鍵幀,首先基于多視圖半全局匹配方法計算關鍵幀初始深度圖,然后采用置信度和深度神經網絡優化深度圖噪聲,優化后的深度圖輸入增量式網格生成模塊后實時構建場景表面稠密網格。

通過實時6自由度位姿估計和場景表面網格構建,Mobile3DRecon系統支持用戶在手機端實現真實的AR遮擋和碰撞效果。下面分別介紹系統的單目深度估計和增量式網格構建兩個主要功能模塊。

1927d40e59b714beb5e7048e1b86dd40.png
圖2:系統框架圖

1. 單目深度估計

動機

傳統基于多視圖立體匹配的深度估計算法通常需要較強的GPU算力來滿足實時計算的要求,而輕量的算法又難以獲得精確完整的深度圖結果。盡管一些基于深度神經網絡的深度估計算法在公開數據集上表現出了較好的效果,然而在實際應用過程中受場景弱紋理和SLAM位姿偏差的影響較大,手機平臺算力的影響也使其難以在移動端部署。

鑒于此,本文期望結合輕量化的深度神經網絡和快速的多視圖半全局匹配算法實現場景深度計算,考慮到手機平臺算力、SLAM位姿偏差和弱紋理場景的影響,本文希望多視圖半全局匹配方法在保證深度估計泛化能力的同時,能夠融合多幀信息提升對位姿偏差和弱紋理區域的容忍度,通過結合深度神經網絡能夠有效改善位姿偏差和弱紋理產生的深度噪聲,從而得到精確、完整的深度圖結果。

方法:

本文提出的單目深度估計算法主要包含三個部分:

  1. 多視圖立體匹配算法,用于計算初始深度圖
  2. 置信度去噪算法,用于去除初始深度圖噪聲
  3. 基于深度神經網絡的深度圖優化算法,用于改善深度圖質量

具體方式如下

① 步驟:多視圖深度估計

42650510b2ee5508885d5fe3f507573c.png

85ede3bbe0838ae3418880b6deb07ab2.png

② 步驟:置信度噪聲剔除

71dccf7f1ec10314678e6d6771c05674.png

3b73317a0eafc4042873359b7e5d805b.png
圖3:單目深度估計結果

③ 步驟:基于深度神經網絡的深度圖優化

去除深度圖噪聲后,本文使用一個輕量的深度神經網絡優化深度圖,網絡結構如圖4所示,包含了多任務網絡和深度優化網絡兩個部分。

13745c64e15073b1d5e7be1b71f9996e.png
圖4:深度圖優化神經網絡結構

03ffa372e4ca43ec153e42e54e0f241b.png

網絡第二個階段的輸入為原始深度圖和一階段的深度圖噪聲預測結果,使用U-Net殘差深度優化網絡優化原始輸入的深度,得到更高質量的深度輸出。本文使用Demon數據集[2]訓練上述網絡,然后使用手機采集的帶TOF深度的3700組序列影像微調該網絡。圖5所示為帶有一定位姿偏差的圖像,第二列為置信度剔除噪聲后的深度圖,最后一列為經過深度優化網絡后的深度圖結果,可以看出深度圖僅存在少量的空間噪聲。

58deb042e8964d68dfdd4ad55f57cd83.png
圖5:基于深度神經網絡的深度圖優化

2. 增量式網格生成

動機

在線網格重建的難點在于如何在保證較好重建效果和重建規模的前提下,能夠實時在線地重建場景三維表面信息。傳統基于TSDF融合的方法雖然能夠在線融合深度圖,TSDF的更新通常需要在GPU平臺上才能達到實時,受平臺算力的影響該過程很難在一些中低端的手機上實時應用。

此外,現有的表面網格生成的算法(如Marching Cubes[4])是離線的,難以實現在線增量式表面網格生成和更新。鑒于此,本文希望能夠實現一種適合手機端AR應用的實時增量式在線網格生成算法,通過構建一種快速的基于空間索引的voxel hash機制,并對傳統的Marching Cubes算法進行改進,使其能夠在線增量地擴展場景網格表面,從而重建場景三維信息。同時,考慮到空間中的動態物體可能會對AR遮擋和碰撞效果產生影響,因此本文希望增量式網格生成算法能夠快速有效地剔除空間動態物體。

方法:

本文的增量式網格生成方法主要包含三個部分:

  1. 可擴展的哈希函數,用于建立空間體素的索引機制
  2. 體素融合與動態物體移除,用于將計算的深度圖融合到體素中,同時移除不在當前場景的動態物體
  3. 增量式網格更新用于快速提取體素塊的網格面片,從而重建場景三維信息

具體方式如下

可擴展的哈希函數

f751766d51f815a9faf84c5971f1c471.png

0d72598adb51a33a5987a044b7bed82a.png
圖6:可擴展哈希索引示意圖

② 體素的融合與動態物體移除

對于輸入的每個關鍵幀深度圖,通過將深度值投影到三維的體素塊中,從而判斷是否需要分配新的體素塊,如果需要則將體素塊的TSDF和權值信息插入到索引表中,否則按照下式(7)更新當前體素塊體素的TSDF值和權重。

2a84f4c3565a0ae8139050e5ae20ad06.png

為了處理動態物體產生的網格,本文將可見的體素投影到當前幀深度上進行可視性檢查,如果發現與當前深度存在差異,則更改體素的TSDF值。通過這種方式可以使移出場景的動態物體產生的網格被逐漸消除。如圖7展示了增量式網格構建過程中動態物體移除的過程。

328a382d85878a65beb47e161afc6740.png
圖7:動態物體移除示意圖

③ 增量式網格更新

3a2df4ec09a28f49b9c0c9d955b20f99.png

ac88444ed1daf356dece8782d9970871.png
圖8:三個關鍵幀的增量式網格更新示意圖

實驗結果

本文使用OPPO R17 Pro手機采集帶有真實場景深度的5組數據,用于從定性和定量兩個方面對比Mobile3DRecon與一些SOTA方法的效果, 其中ground truth為OPPO R17 Pro獲取的與單目相機對齊的TOF深度。圖9和圖10所示為室外樓梯場景分別使用REMODE、DPSNet、MVDepthNet以及本文方法生成深度圖和mesh網格,可以看出本文方法生成的深度圖細節更加明顯,在此基礎上生成的網格質量優于其它幾種方法。

4fafa0fc570f0b851d14867792b3b4a6.png
圖9:本文的單目深度估計與其他方法的結果比較

f4f1166993f6facf1c82299e70a9fa5a.png
圖10:本文方法最終融合的表面網格與其他方法的結果比較

為了定量評價本文方法和REMODE、DPSNet、MVDepthNet生成的深度圖和網格的精度,本文對比了5個場景下幾種方法的實驗結果,如表1所示。

分別統計了幾種方法的深度和網格與真值深度(ToF)和真值網格在公共有效區域的RMSE和MAE精度,可以看出Mobile3DRecon方法不論是在深度圖還是網格質量上都要優于其它的一些SOTA方法,深度圖和網格精度可以達到厘米級。其余4個場景重建的網格結果如圖11所示。

表1:Mobile3DRecon系統重建五個由OPPO R17 Pro采集的實驗場景的精度評估,每個場景給出了本文的方法和其他方法的深度和網格的RMSE和MAE誤差,以ToF深度作為真值。

5421e2a3ea703ac09a023e6c5a71f274.png

c84264e25feb1c74c75d9c48b6c7874a.png
圖11:四個由OPPO R17 Pro采集的實驗場景用本文方法生成的表面網格結果

本文在OPPO R17 Pro和小米8兩個中端手機平臺上測試了Mobile3DRecon各個過程的耗時,如下表所示。Mobile3DRecon在小米8(高通驍龍845)平臺上基本可以達到OPPO R17 Pro(高通驍龍710)兩倍的運行速度,然而即使是在性能較弱的OPPO R17 Pro手機上,本系統基于關鍵幀深度估計和增量式網格構建的過程仍然可以滿足每秒5關鍵幀的運行幀率,從而達到實時的效果。

表2:Mobile3DRecon系統每個關鍵幀各步驟的詳細耗時情況,分別在OPPO R17 Pro和小米8兩個手機平臺上統計。

aad9f79491732e3dea0b4aec0cd6e8da.png

圖12展示了Mobile3DRecon系統集成到移動端Unity的運行效果,可以看出在OPPO R17 Pro和小米8手機上該系統能夠通過精確重建場景表面網格使得虛擬物體的放置不局限于平面結構,同時室內樓梯和打印機場景的示例也展示了虛擬球與真實場景產生的正確遮擋和碰撞交互效果。

656c94a49debeb59b1c12677fcefe2f5.png
圖12:Mobile3DRecon在手機平臺上的AR應用

結語

本文提出了一個實時的單目三維重建系統,該系統允許用戶在一些中端的手機平臺上使用單目攝像頭提供在線網格生成功能。與現有的基于點云或TSDF的在線重建方法不同,Mobile3DRecon系統可以根據單目攝像頭圖像魯棒地估計場景深度,同時將估計的關鍵幀深度實時增量地融合到稠密網格表面。

本文在兩個中端手機平臺上驗證了Mobile3DRecon系統的重建結果,通過定量和定性的實驗驗證了所提出的實時單目三維重建系統的有效性。

Mobile3DRecon系統能夠正確處理虛擬物體與真實場景之間的遮擋和碰撞,從而達到逼真的AR效果。

References

[1] A. Drory, C, et al. Semi-global matching: A principled derivation in terms of message passing. In German Conference on Pattern Recognition, pp. 43–53. Springer, 2014.

[2] Ummenhofer B, Zhou H, Uhrig J, et al. Demon: Depth and Motion Network for Learning Monocular Stereo. In CVPR, 2017.

[3] Matthias Nie?ner, Michael Zollh?fer, Izadi S , et al. Real-time 3D Reconstruction at Scale using Voxel Hashing. ACM Transactions on Graphics (TOG), 2013.

[4] W. E. Lorensen and H. E. Cline. Marching cubes: A high resolution 3D surface construction algorithm. ACM SIGGRAPH Computer Graphics, 21(4):163–169, 1987.

[5] P. Ondruska, P. Kohli, and S. Izadi. MobileFusion: Real-time volumetric surface reconstruction and dense tracking on mobile phones. IEEE Transactions on Visualization and Computer Graphics, 21(11):1–1.

[6] Y. Yao, Z. Luo, S. Li, T. Fang, and L. Quan. MVSNet: Depth inference for unstructured multi-view stereo. In ECCV, pp. 767–783, 2018.

[7] S. Im, H.-G. Jeon, S. Lin, and I. S. Kweon. Dpsnet: End-to-end deep plane sweep stereo. In International Conference on Learning Representations, 2019.

論文作者

楊幸彬、周立陽、姜翰青、唐中樑、王元博、鮑虎軍、章國鋒

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535051.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535051.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535051.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【分類匯總】idea快捷鍵、idea配置、常用插件

寫在前面 千萬別看目錄很長就感覺本篇博客很絮叨繁瑣,里面多是配置的講解貼了很多的圖片方便大家了解,配置成功一次之后就可以一直使用了。 快捷鍵的使用建議大家先看,后續敲代碼的時候刻意的使用快捷鍵,相信經過兩三天的使用就可…

win10設置默認輸入法_個性化設置技巧

個性化設置技巧子墨居士前言本次內容主要是win10系統自帶的功能,不是用第三方軟件優化桌面的情況下,讓自己的電腦桌面能更美觀、更舒服。系統自身的個性化設置主要是下圖中的幾個。鼠標右擊->個性化設置。 第三方軟件的效果會更好,畢竟是專…

什么叫組網_家庭wifi,如何組網最合適

wifi信號通過電磁波在空中傳播的,屬于微波通信的一種,因為微波本身及發射功率的限制,導致wifi的穿透能力比較差,北方比較厚的承重強,鐵門、家具等對都會對wifi信號有較強的削弱作用。穿過的障礙物越多,這種…

java輸入輸出、數組初始化

💡涉及的知識點速通🛫 關于輸入輸出你都知道啥?🛫 關于控制路程都需要注意啥?🛫 關于數組的問題你能答對幾道?🪂 數組初始化的小細節你都知道嗎?🪂 這些Arrays的常見API你都掌握了嗎?&#…

linux rm 命令刪除文件恢復_Linux之恢復誤刪除文件

前言每當我們在生產環境服務器上執行rm命令時,總是提心吊膽的,因為一不小心執行了誤刪,然后就要準備跑路了,畢竟人不是機器,更何況機器也有 bug。那么如果真的刪除了不該刪除的文件,比如數據庫、日志或執行…

ac2100 反彈shell無法粘貼_記一次突破反彈shell

背景某天閑著無聊,小伙伴發來一個某網站,說只能執行命令,不能反彈shell。測試對著目標站點一頓測試。發現確實存在shiro反序列化,并且存在可以利用的gadget。利用發現確實可以執行命令,但是我們執行反彈的時候。反彈不…

java三大特征 重載與重寫的區別

💡涉及的知識點速通🛫 OOP的三大特征都是什么?🪂 什么是封裝?🪂 什么是繼承?🪂 什么是多態?🛫 關于構造器你都知道什么?🛫 關于類的源文件都需要知道什么?🛫 重載和重寫都是什…

發生身份驗證錯誤_Python MySQL8.0 錯誤

Python MySQL8.0 錯誤:authentication plugin calling_sha2_password is not supported.Python3 進行到 python3 mysql(mysql-connector),然后安裝mysql-8.0.16,照著示例程序運行 python,遇到這個大大的問題:authentic…

vue 獲取當前元素的父元素_react獲取觸發元素的屬性 e.target.dataset

我的react項目中一個應用場景就是在點擊一個元素的時候想要獲取到這個元素的屬性。代碼如下&#xff1a;renderyear()>{return(<div><div data-value"年初">年初</div> </div>);}//點擊標簽的時候觸發的函數 TagClick(e)>{console.log…

為什么要學Redis(NoSQL數據庫)

各位小伙伴們大家好&#xff0c;歡迎來到這個小扎扎的Redis 6專欄&#xff0c;在這個系列專欄中我對B站尚硅谷的Redis教程進行一個總結&#xff0c;鑒于 看到就是學到、學到就是賺到 精神&#xff0c;這波依然是血賺 ┗|&#xff40;O′|┛ &#x1f4a1;Redis知識點速覽&…

centos常用命令_二、Docker鏡像是什么?Docker常用命令

科技奇聞 關注讓你我共同進步文章來源&#xff1a;CSDN作者&#xff1a;IronmanJayDocker常用命令1.幫助命令docker version #查看版本號docker info #顯示Docker系統信息&#xff0c;包括鏡像和容器數docker --help #查看Docker有哪些命令…

實現定時中斷_無線傳感器網絡實驗報告(二)Timer定時應用實驗

實驗二&#xff1a; Timer定時應用實驗2.1實驗目的1. 認識并了解 CC2530 定時器&#xff1b; 2. 學習定時器的基本配置與應用&#xff1b; 3. 在 ZigBee 模塊上運行定時器程序。2.2實驗原理根據數據手冊可知 CC2530 總共有 4 個定時器&#xff0c;但是定時器 2 被系統占用&…

詳析java中的關鍵字和權限修飾

&#x1f4a1;涉及的知識點速通&#x1f6eb; 關于關鍵字你都知道什么?&#x1fa82; this和super關鍵字&#x1fa82; instanceof關鍵字&#x1fa82; static關鍵字&#x1fa82; final關鍵字&#x1f6eb; 權限修飾符的作用范圍知多少?各位小伙伴們大家好&#xff0c;歡迎來…

JQ 全選后獲取選中的值_Filecoin如何創建賬戶錢包并獲取FIL測試幣

昨天"猩動力節點"加入了fielcoin的測試網絡&#xff0c;對用戶或者礦工來說&#xff0c;如何獲取代幣&#xff0c;創建錢包保護好自己的資產&#xff0c;每一個用戶來說都很關心。下面我們一起來學習如何創建賬戶錢包&#xff0c;并獲取FIL 測試代幣。在創建賬戶錢包…

Redis中 字符串的常用命令

各位小伙伴們大家好&#xff0c;歡迎來到這個小扎扎的Redis 6專欄&#xff0c;在這個系列專欄中我對B站尚硅谷的Redis教程進行一個總結&#xff0c;鑒于 看到就是學到、學到就是賺到 精神&#xff0c;這波依然是血賺 ┗|&#xff40;O′|┛ &#x1f4a1;Redis知識點速覽&…

mac wmware 無網絡_無線網絡中常用的技術名詞

1、LAN&#xff1a;即局域網&#xff1a;是路由和主機組成的內部局域網&#xff0c;一般為有線網絡。2、WAN&#xff1a;即廣域網&#xff1a;是外部一個更大的局域網。3、WLAN(Wireless LAN&#xff0c;即無線局域網)&#xff1a;前面我們說過LAN是局域網&#xff0c;其實大多…

python界面開發webview_python在webview和activity混合頁面下怎么定位

展開全部 genymotion 模擬器&#xff1a;android 5.0.0 python 2.7 appium 1.4.16.1 1、app原生元素定位&#xff08;常用&#xff09; driver.find_element_by_id(“resourse-id”32313133353236313431303231363533e59b9ee7ad9431333363393662) driver.find_element_by_name(“…

androidstudio build tools安裝_Android Studio4.0 安裝及配置

本來打算十一月份寫的&#xff0c;結果。。。就在我備注原來的文章的時候&#xff0c;硬盤壞了。。。所以重新配置環境。。。換硬盤&#xff0c;。。。壞的太突然以至于數據都沒有備份。。。。建議大家在參考教程安裝之前先大致瀏覽一遍&#xff0c;這樣安裝的時候就會大致知道…

Redis 五大數據類型的常用命令——列表、集合、哈希、有序集合

各位小伙伴們大家好&#xff0c;歡迎來到這個小扎扎的Redis 6專欄&#xff0c;在這個系列專欄中我對B站尚硅谷的Redis教程進行一個總結&#xff0c;鑒于 看到就是學到、學到就是賺到 精神&#xff0c;這波依然是血賺 ┗|&#xff40;O′|┛ &#x1f4a1;Redis知識點速覽&…

python工程師面試寶典_2019年,Python工程師必考的6個面試題,Python面試題No5

第1題&#xff1a;Python里面如何實現tuple和list的轉換&#xff1f; 函數tuple(seq)可以把所有可迭代的(iterable)序列轉換成一個tuple, 元素不變&#xff0c;排序也不變 list轉為tuple&#xff1a; temp_list [1,2,3,4,5] 將temp_list進行強制轉換&#xff1a;tuple(temp_li…