多視圖幾何三維重建實戰系列- Cascade-MVSNet


作者:浩南

點擊上方“計算機視覺工坊”,選擇“星標”

干貨第一時間送達

 

MVSNet在2018年提出后,在估計深度圖的應用中取得了非常好的結果。應用CNN於立體匹配的技術也使得傳統的匹配效率整體提高。但是因為使用3D卷積神經網絡進行深度正則化處理,所以即便在比較低的分辨率(900*600)下,也需要比較高的GPU消耗。針對該問題,該團隊在CVPR2019上提出利用循環神經網絡對3D代價體進行切片處理,大幅度減少GPU消耗,使得該網絡框架不僅可以估計更大范圍的場景,且估計精度更高。本篇文章仍將就MVSNet內存消耗大的問題,介紹CVPR2020的一篇文章:Cascade Cost Volume for High-Resolution Multi-View Stereo and Stereo Matching. 該文章沿用MVSNet深度估計的框架,具體創新在於改進Cost Volume的構造方式,使得利用深度學習估計深度時,在較低GPU消耗上估計高分辨率、大場景的深度。1、背景介紹基於深度學習的多視圖立體,例如經典的MVSNet網絡架構,通常會構造一個三維的代價體去回歸場景的深度值,但MVSNet常受限於顯存限制而無法對高分辨率的影像進行深度估計。在MVSNet框架的基礎上,多種方法對顯存增長問題提出了改進方案,上一篇文章我們介紹了R-MVSNet,該方法利用循環神經網絡GRU,對三維代價體進行切片,這樣不僅保留了靠前的深度和紋理信息,也減少了GPU的消耗,深度估計精度和深度估計范圍要優於MVSNet,不同方法的比較結果可通過圖1體現。

圖1 效果比較圖

不同於R-MVSNet,本篇文章(以下簡稱“Cascade-MVSNet”)則仍舊使用了MVSNet網絡框架中的3D卷積神經網絡對深度代價體進行正則化,但不同於其代價體的構造,Cascade-MVSNet利用鏈式代價體構造的策略,先估計較為粗糙的深度值,然后再進一步縮小深度估計范圍,提高深度估計精度,實現了在較小的GPU消耗的條件下,得到較高分辨率和較高精度的深度圖,經過稠密重建后,Cascade-MVSNet的結果也比之前所提到的方法要更為完整(圖2)。

圖2 稠密重建結果比較

2、代價體構造回顧沿用立體匹配的視差估計框架,通常深度學習方法都會構造一個沿深度方向的代價體,例如MVSNet借鑒平面掃描算法的原理,構造由沿不同深度而前視平行的平面組成一個相機椎體,然后每一個相機椎體經過采樣,變成長寬一致的特征體,通過可微分化的單應性變換將不同視角下的特征扭曲到參考視角上,構成代價體。一般來說,代價體的長寬則是由輸入影像分辨率提供的,深度范圍則是通過稀疏重建后的結果提供先驗條件。這樣的構造方式,使得代價體正則化時,三維代價體的內存消耗會以三次指數的速率增長(圖3)。

圖3 代價體構造示意圖

上一篇文章中R-MVSNet使用循環神經網絡,對將代價體沿深度切成不同的深度圖,利用GRU結構進行正則化處理,相比較MVSNet,能減少GPU的消耗。可是循環神經網絡會涉及一個遺忘的過程,導致網絡不能很好地保留像素周圍的紋理信息,所以點雲完整度不能得到很好地保留(圖4)。

圖4 RNN代價體正則化過程


3、Cascade-MVSNet為了解決信息保留和GPU消耗的兩個問題,Cascade-MVSNet提出一種級聯的代價體構造方法,並輸出從粗到細的深度估計值。首先來看其整個網絡的架構(圖5)。

圖5 Cascade網絡框架示意圖

可以看到,整個網絡的結構還是沿襲了MVSNet框架(圖6),還是以多視圖的影像作為輸入,然后經過可微分單應性變換形成不同視角下的特征體,在通過代價體構造,形成一個代價體,之后通過回歸估計深度值。這里不再對MVSNet作更多的贅述,感興趣的朋友可以回顧之前的文章:MVSNet。

圖6 MVSNet深度估計框架

此篇文章不同的是:整個網絡利用級聯式代價體的構造策略。首先,原始輸入影像,利用特征金字塔網絡先對原始影像進行降采樣,降低特征體的分辨率,使得可以擁有較為精確的深度估計范圍。通過初始的MVSNet框架估計出低分辨率下的深度圖后,進入下一階段。下一階段開始時,先進行上采樣,然后以上一層的深度估計范圍作為參考,確定改成的深度估計范圍和深度估計間隔。最后輸出一個較高分辨率的深度圖。如圖7,根據稀疏重建給予的先驗深度范圍,第一階段的深度估計范圍將包含整個場景。所以,會和低分辨率影像建立一個體量較小的代價體(圖5)。在之后的階段中,深度估計范圍會進一步縮小。

圖7 不同階段的深度估計范圍變化

除了深度估計范圍的縮小,深度估計間隔也會進一步縮小,越小的深度估計間隔代表着越精細的深度估計精度。在第k個階段,假設當前的深度估計范圍Rk和深度平面估計間隔Ik,所以對應的深度估計平面數可以計算。當該階段的圖像分辨率固定后,一個更大的深度估計范圍會產生更為精確的深度估計結果,但同時也會提升GPU的消耗。同時根據特征金字塔網絡的特點,在級聯式代價體構造過程中,每個階段將按照上一階段的兩倍數量,即在每個階段的圖像的分辨率分別是之前的兩倍。4、Loss的設置Cascade-MVSNet仍舊是監督學習下的網絡結構,同時,因為仍舊沿用MVSNet的網絡架構,所以Loss的構造和MVSNet的loss構造形式類似,不同的是,Cascade-MVSNet使用的是級聯式的學習策略,所以Loss構造定義為:

其中,Lk指的是第k個階段的總Loss,λk則表示當前階段的權重。一般來說,分辨率越高,設置的權重越大。

5、Cascade-MVSNet實戰操作
首先,再次感謝Yaoyao(香港科技大學)給出已經預處理好的數據,感謝Alibaba集團提供的開源代碼。因為Cascade-MVSNet的深度估計框架沿用MVSNet,所以其輸入和MVSNet要求一致,這里不再重復說明,詳細數據處理內容,請大家回顧實戰系列-MVSNet。

1)環境配置參考Alibaba的github主頁中的installation,即可完成環境配置。(https://github.com/alibaba/cascade-stereo)

2)深度估計環境配置結束后,需要打開CasMVSNet文件夾(圖8),整個cascade-stereo包含多視圖立體和雙目立體,本篇文章只關注多視圖立體方面的應用。所以進入CasMVNSet的文件夾。

圖8 CasMVSNet目錄

具體的配置這里不再重復,Github上的README.md介紹已經十分詳盡。運行之后可以得到的結果如下:·Scan10 數據庫

                   a)原圖                             b) 深度圖                       c) 深度置信度圖圖

9 深度圖估計結果

圖10 稠密重建結果

3)具體分析代碼分析:Github上提供了一個shell的腳本,在終端直接運行即可,以下對代碼進行簡要介紹:

 

1 #!/usr/bin/env bashTESTPATH="data/DTU/dtu_test_all"TESTLIST="lists/dtu/test.txt"CKPT_FILE=$1python test.py --dataset=general_eval --batch_size=1 --testpath=$TESTPATH --testlist=$TESTLIST --loadckpt $CKPT_FILE ${@:2}

 

上述bash中,需要首先設置Test圖片的位置,這里設置為下載好的數據集即可,TestList表示設置需要對那幾個數據進行深度處理和重建,例如,我想對10,15,24號數據集重建,那Testlist中只要包含scan10, scan15, scan24即可。CKPT_FILE是訓練好的網絡的地址,通過官網可以下載預訓練的模型。在test.py中,主要有幾個flag需要注意,代碼如下:

parser.add_argument('--max_h', type=int, default=864, help='testing max h')parser.add_argument('--max_w', type=int, default=1152, help='testing max w')parser.add_argument('--filter_method', type=str, default='normal', choices=["gipuma", "normal"], help="filter method")parser.add_argument('--fusibile_exe_path', type=str, default='../fusibile/fusibile')parser.add_argument('--prob_threshold', type=float, default='0.9')parser.add_argument('--num_consistent', type=float, default='4')

注意,可以改變測試分辨率的大小,但需要為32的倍數,且最好保證為16:9的長寬比例。其次,使用gipuma進行稠密重建時,需要預下載fusion這個庫,這個在https://github.com/YoYo000/fusibile可以下載,然后在終端輸入:

Mkdir buildCd buildCmake ..Make

之后將 --fusibile_exe_path的地址設置為可執行文件所在的地方。第三個要注意的flag是—prob_threshold,這個表示gipuma算法中利用置信度過濾深度圖的閾值,如圖11)所示,如果當前像素的置信度較高(c-上部),則說明當前像素的深度估計比較准確,若置信度較低,則說明當前像素上,深度估計有多個峰值,不能確定哪一個是最優深度,也表示當前像素估計的深度不准。因此,利用該閾值對深度圖進行過濾,在稠密重建的時候,置信度較低的像素就不進行深度融合。

圖11 置信度解釋示意圖[2]

結果分析:通過輸出多個中間結果,對Cascade結果進行分析,首先是跑分結果,通過表1可得,利用Cascade的代價圖構造方式在精度和完整度上都比之前的方法更優,比傳統方法提升了近15個點,比R-MVSNet方法提升了近10個點。

表1 跑分比較結果表

其次,從深度圖估計結果看(圖12),深度圖較為平滑、完整,且估計精度比較高,估計錯誤的大多數是背景或者白色無紋理地區。通過對當前深度圖的點雲映射(圖13),當前網絡在原圖視角下可以保持較高的分辨率,當在meshlab中旋轉視角,可以看到當前視角估計出來的稠密點雲效果完整,主體部分基本正確,背景部分存在偏差是正常的體現,在整體融合的時候可以濾除掉。

圖12 scan15深度估計結果

圖13 單圖恢復點雲結果更多結果:

圖14 深度估計結果

圖15 稠密重建結果


以上結果均由筆者親自試驗,效果能達到論文中描述的水平,且GPU消耗基本在7GB以內,可行性比較高。

6、總結
Cascade-MVSNet是一種利用級聯式代價體構造,解決MVSNet在深度估計過程中的GPU消耗過大問題、點雲完整度不高的深度學習方法。通過實驗,該方法在現有的MVSNet框架下,能以較小的GPU消耗,得到較高精度的深度估計結果,同時也能保留較高的完整度。MVS的深度學習實戰系列到目前為止就先告一段落,本系列我們首先回顧了MVS的傳統原理和傳統方法,並介紹了COLMAP等軟件的具體操作,之后,介紹了MVSNet、R-MVSNet和Cascade-MVSNet三個深度學習框架和三維重建的pipeline,希望大家通過本系列的分享,加深對MVS三維重建的理解。附錄開源數據集下載鏈接:在公眾號計算機視覺工坊」,后台回復mvsnet,即可直接下載。我們需要下載的是用於測試的數據集,所以打開百度雲鏈接時,點擊 “mvsnet”,再點擊“preprocessed_inputs”,下載其中的“dtu.zip”和“tankandtemples.zip”即可(圖16)。

圖16 開源數據集下載

感謝香港科技大學姚遙開源的數據集鏈接。

本文僅做學術分享,如有侵權,請聯系刪文。

下載1在「計算機視覺工坊」公眾號后台回復:深度學習,即可下載深度學習算法、3D深度學習、深度學習框架、目標檢測、GAN等相關內容近30本pdf書籍。
下載2在「計算機視覺工坊」公眾號后台回復:計算機視覺,即可下載計算機視覺相關17本pdf書籍,包含計算機視覺算法、Python視覺實戰、Opencv3.0學習等。
下載3在「計算機視覺工坊」公眾號后台回復:SLAM,即可下載獨家SLAM相關視頻課程,包含視覺SLAM、激光SLAM精品課程。

重磅!計算機視覺工坊-學習交流群已成立

掃碼添加小助手微信,可申請加入3D視覺工坊-學術論文寫作與投稿 微信交流群,旨在交流頂會、頂刊、SCI、EI等寫作與投稿事宜。

同時也可申請加入我們的細分方向交流群,目前主要有3D視覺CV&深度學習SLAM三維重建點雲后處理自動駕駛、CV入門、三維測量、VR/AR、3D人臉識別、醫療影像、缺陷檢測、行人重識別、目標跟蹤、視覺產品落地、視覺競賽、車牌識別、硬件選型、學術交流、求職交流等微信群,請掃描下面微信號加群,備注:”研究方向+學校/公司+昵稱“,例如:”3D視覺 + 上海交大 + 靜靜“。請按照格式備注,否則不予通過。添加成功后會根據研究方向邀請進去相關微信群。原創投稿也請聯系。

▲長按加微信群或投稿

▲長按關注公眾號

覺得有用,麻煩給個贊和在看~  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM