2019-07-08機(jī)器之心原創(chuàng) 作者:Yuanyuan Li 編輯:Hao Wang 一直以來,研究人員都希望能夠賦予機(jī)器和人類感官一樣的感知,其中就包含視覺。作為人類最重要的感官之一,人類接受到的信息中超過 70% 來源于雙眼。人的眼睛可以感知到 3D 信息,由于雙目視覺的存在,即使面對一張照片也可以比較輕易的從中獲取深度信息。然而,這對計算機(jī)來說卻是一個難點——3D 世界中形狀不同的物體可以在 2 維世界中擁有一模一樣的投影,3D 形狀的估計實際上是一個非適定性問題(ill-posed problem)。傳統(tǒng)研究主要利用各類幾何關(guān)系或者先驗信息,而近年來隨著深度學(xué)習(xí)的流行,對幾何方法的研究似有所忽視。 不久之前,加州大學(xué)伯克利分校馬毅教授也在微博表示,「……沒有任何工具或算法是萬靈藥。至少在三維重建問題上,沒有把幾何關(guān)系條件嚴(yán)格用到位的算法,都是不科學(xué)的—根本談不上可靠和準(zhǔn)確。」 本文試圖對 3D 重建做一個簡單介紹,并對目前流行的兩類方法進(jìn)行探討和對比。 術(shù)語介紹 (Terminology) 3D 重建是指對物體的真實形狀和外觀的獲取過程,其建模方法可以分為主動式(Active method)和被動式(Passive method)。 主動式(Active method): 在主動式方法中,物體的深度信息是給定的——這可以通過使用激光等光源或能量源向物體發(fā)射信號,然后解析返回的信號來獲得——重建主要是利用數(shù)值近似來還原物體的 3D 輪廓。其中幾種主要的方法有:
被動式(Passive method): 被動式方法在 3D 重建過程中不會與被重建物體產(chǎn)生任何「交互」,主要是利用周圍環(huán)境獲取圖像,然后通過對圖像的理解來推理物體的 3D 結(jié)構(gòu)。可以分為三類: 單目視覺法(Monocular stereo vision) 主要使用一臺攝像機(jī)拍攝一張照片來進(jìn)行 3D 重建。其中又分為:
雙目視覺法(Binocular stereo vision) 在這種方法中,圖像是由兩個處在不同位置的相機(jī)同時對物體進(jìn)行拍攝而獲取的,或者由一個相機(jī)不斷移動到不同的視點對物體進(jìn)行拍攝。顯然,這一方法試圖模擬人類利用雙眼感知圖像視差而獲取深度信息的情況。雙目視覺法依賴于圖片像素匹配,可以使用模板比對或者對極幾何法。 立體視覺法(Multi-view stereo,MVS) 立體視覺法最初是由上述兩個研究自然發(fā)展而來的,立體視覺法將多個相機(jī)設(shè)置于視點,或用單目相機(jī)在多個不同的視點拍攝圖像以增加穩(wěn)健性,見圖 1 示例。在發(fā)展的過程中,這一研究領(lǐng)域遇到了許多新的問題——比如,計算量暴增——并演變成一種不同類型的問題。目前這一研究領(lǐng)域十分活躍。 圖 1:使用單目相機(jī)在不同視點拍攝多張照片用于 3D 重建。圖源:Multi-View 3D Reconstruction https://vision.in./research/image-based_3d_reconstruction/multiviewreconstruction 早期的立體視覺研究主要在實驗室環(huán)境中進(jìn)行,所以相機(jī)參數(shù)都是已知的。但隨著研究者越來越多的使用網(wǎng)絡(luò)上下載的照片等非實驗室環(huán)境下獲取的圖像,在重建工作之前必須首先求得相機(jī)位置和 3D 點來估計相機(jī)參數(shù)。 術(shù)語「相機(jī)參數(shù)」是指描述相機(jī)配置的一組值,即,由位置和方向組成的相機(jī)姿勢信息,以及諸如焦距和像素傳感器尺寸的相機(jī)固有屬性。目前有許多不同的方法或「模型」來參數(shù)化這種攝像機(jī)配置,一般最常用的是針孔攝像機(jī)模型。 這些參數(shù)是必須的,因為相機(jī)將拍攝的 3D 世界的物體投影到 2D 圖像上,而現(xiàn)在我們需要用 2D 圖像反推 3D 世界信息。可以說,相機(jī)參數(shù)是確定物體的世界點和圖像點之間相互關(guān)系的幾何模型的參數(shù)。 目前計算攝像機(jī)參數(shù)主要使用的算法是 Structure from Motion(SfM),MVS 發(fā)展成功也在很大程度上依賴于 SfM 的成功。與 SfM 齊名的還有 VSLAM 算法,兩者都依賴于圖片像素匹配以及場景是剛性的假設(shè)。SfM 最常用于計算無序圖像集的相機(jī)模型,通常是離線的,而 VSLAM 專門從視頻流計算攝像機(jī)的位置,通常是實時的。 Structure from Motion 大概在初中的物理課上,我們接觸過小孔成像的原理。以圖 2 為例,我們考慮如何將物體 X 投影到圖像上的 x 點。投影中心是 c——又稱為相機(jī)中心(camera center)——以此為原點可以畫出相機(jī)坐標(biāo)系,則物體 X 的坐標(biāo)為(X,Y,Z)。經(jīng)過相機(jī)中心,并垂直于圖像平面的中心線被稱為主軸(principle axis),也就是圖 2 中的 Z 軸。主軸和相機(jī)平面的交點被稱為 principal point,并成為圖像坐標(biāo)系的原點 p。p 點和相機(jī)中心 c 點的距離為 f,也就是焦距。 圖 2:針孔攝像機(jī)模型。圖源:Richard Hartley and Andrew Zisserman. Multiple view geometry in computer vision. Cambridge university press, 2003. 根據(jù)相似三角形原理(圖 2 右側(cè)),我們可以輕易得出相機(jī)坐標(biāo)系和圖像坐標(biāo)系的關(guān)系:Z/f = Y/y = X/x 整理后可以得到: x = f*X/Z y = f*Y/Z z = f 即點(X,Y,Z)在圖像坐標(biāo)系中對應(yīng)的坐標(biāo)是(fX/Z,fY/Z,f)。這個映射關(guān)系對坐標(biāo) Z 來講是非線形的,我們需要通過擴(kuò)展坐標(biāo)維度對其線性化,從而進(jìn)行矩陣運算: 上式中我們使用的圖像坐標(biāo)系以成像平面的中心為原點,實際上我們一般會使用圖像的一個角——一般是左上角——作為原點,以水平線為 x 軸,垂直線為 y 軸。因此我們需要對成像坐標(biāo)系進(jìn)行縮放和平移,來吻合像素的實際坐標(biāo)。將圖像坐標(biāo)系上的點在 x 和 y 軸方向上分別縮放 m_x 倍和 m_y,在分別平移 p_x 和 p_y 個點,調(diào)整后的矩陣變?yōu)椋?/span> 其中 f_x = f*m_x,f_y=f*m_y,有時也寫作\alpha_x,\alpha_y。 上式中,等式右邊的第一個矩陣就是相機(jī)的內(nèi)參矩陣 K: s 是相機(jī)的 skew parameter,一般都設(shè)置為 0。 接下來,我們需要考慮在上述過程中物體的坐標(biāo)是如何確定的——實際上,它的坐標(biāo)是以相機(jī)為原點計算的。但相機(jī)的位置是可以隨時移動的,物體在相機(jī)坐標(biāo)系中的位置也會隨之移動,我們需要將物體的坐標(biāo)轉(zhuǎn)換到世界坐標(biāo)系中,來獲得穩(wěn)定的坐標(biāo)位置。 圖 3:相機(jī)坐標(biāo)系到世界坐標(biāo)的轉(zhuǎn)換。圖源:Richard Hartley and Andrew Zisserman. Multiple view geometry in computer vision. Cambridge university press, 2003. 同樣,相機(jī)坐標(biāo)系和世界坐標(biāo)系之間的轉(zhuǎn)換可以通過縮放和平移來達(dá)到,寫作: X_cam = RX + t 其中 X_cam 和 X 分別是一點在相機(jī)坐標(biāo)系和世界坐標(biāo)系下的坐標(biāo)表示,R 為 3x3 的旋轉(zhuǎn)矩陣,t 為 3x1 的平移向量。為了統(tǒng)一運算方式,我們將上式也改寫為矩陣形式: 將相機(jī)內(nèi)外參矩陣結(jié)合起來,我們就可以獲得完整的物體從 3D 世界中被投射到 2D 圖像中的坐標(biāo)轉(zhuǎn)換關(guān)系: 完整的相機(jī)矩陣可以總結(jié)為: 相機(jī)外參負(fù)責(zé)世界坐標(biāo)系到相機(jī)坐標(biāo)系的轉(zhuǎn)化,內(nèi)參則負(fù)責(zé)接下來從相機(jī)坐標(biāo)系到 2D 圖像坐標(biāo)系的轉(zhuǎn)換。 SfM 算法可以在給定一組圖像的情況下,直接輸出每張圖像的相機(jī)參數(shù),以及圖像中可見的一組 3D 點,一般被編碼為 tracks。 圖 4:SfM 算法一般流程。圖源:Chippendale, Paul & Tomaselli, Valeria & DAlto, Viviana & Urlini, Giulio & Modena, Carla & Messelodi, Stefano & Mauro Strano, Sebastiano & Alce, Günter & Hermodsson, Klas & Razafimahazo, Mathieu & Michel, Thibaud & Farinella, Giovanni. (2014). Personal Shopping Assistance and Navigator System for Visually Impaired People. 10.1007/978-3-319-16199-0_27. SfM 算法的第一步是從圖片中抽取一系列特征(feature detector),一般使用尺度不變特征轉(zhuǎn)換 (Scale-invariant feature transform 或 SIFT)。SIFT 通過對圖像使用連續(xù)高斯模糊來獲得不同的圖像尺度并在其上尋找可能的關(guān)鍵點,然后舍棄掉其中不明顯的關(guān)鍵點。SIFT 算法檢測到的關(guān)鍵點通常對光線、視角等變化相當(dāng)穩(wěn)健,甚至受視線遮蔽的影響也不大。SIFT 算法的另外一個優(yōu)點就是計算速度非常快,基本可以滿足實時運算。 圖 5:SIFT 算法示例。圖源:維基百科 URL:https://en./wiki/Scale-invariant_feature_transform 確定特征后,一般需要使用 K-D Tree 算法對不同圖像中的特征最近鄰匹配(matching)。匹配完畢后還需要去除重復(fù)匹配和不滿足幾何約束的匹配,否則誤匹配會造成較大的誤差,一般使用采樣一致性算法 RANSC 八點法來計算幾何約束。 圖 6: 特征匹配示例。圖源:CS 6476: Computer Vision Project 2: Local Feature Matching URL:https://www.cc./~hays/compvision/proj2/ 通過篩選的匹配會被合并為 tracks 用于求解相機(jī)參數(shù),估算相機(jī)參數(shù)場景的稀疏結(jié)構(gòu)。 由于算法對估計的相機(jī)模型的準(zhǔn)確性非常敏感,因此通常還需要用 bundle adjustment 優(yōu)化估計結(jié)果,主要思想是將求得的 3D 點反向投影到圖像中,與初始坐標(biāo)進(jìn)行對比并根據(jù)誤差容忍度進(jìn)行刪減,然后重新調(diào)整相機(jī)參數(shù)。 SfM 有它的缺陷,一個最重要的問題就是由于 SfM 依賴于特征可以跨視圖匹配的假設(shè),如果這個假設(shè)不滿足 SfM 就完全無法工作了。比如如果兩張圖片之間的視點差距太大(一張從正面一張從側(cè)面)或者局部被遮擋,建立特征匹配是極其成問題的。此外,SfM 由于要通過捆綁調(diào)整進(jìn)行優(yōu)化,整個算法的運算速度極慢,且速度還會隨著圖像的增加而大幅下降。 深度學(xué)習(xí) 使用深度學(xué)習(xí),研究者實際上希望能夠跳過特征抽取、特征匹配、相機(jī)參數(shù)求解等手動環(huán)節(jié),直接由圖像——有時僅需一張——模擬 3D 物體的形狀。同時,神經(jīng)網(wǎng)絡(luò)應(yīng)該不僅學(xué)習(xí)可視部分的結(jié)構(gòu),同時也能夠推理被遮擋部分的結(jié)構(gòu)。 前面提到,3D 物體的表示方法一般有深度圖 (depth), 點云 (point cloud), 體素 (voxel), 網(wǎng)格 (mesh) 四種。所以深度學(xué)習(xí)也可以依次分為學(xué)習(xí)圖像到深度的表示、圖像到體素的表示等,不過也有研究試圖融合多種表示。由于對輸出數(shù)據(jù)形式有要求,大部分研究使用了 decoder-encoder 結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò),比如 3D-R2N2 網(wǎng)絡(luò) [1](見圖 7)。該網(wǎng)絡(luò)由三個部分組成:2D 卷積神經(jīng)網(wǎng)絡(luò)(2D-CNN)組成的 encoder,3D 卷積 LSTM(3D-LSTM)作為中間架構(gòu),以及 3D 反卷積網(wǎng)絡(luò)(3D-DCNN)組成的 decoder,能夠?qū)⑤斎雸D像轉(zhuǎn)化為 3D 物體的體素表示。 圖 7:3D-R2N2 模型結(jié)構(gòu)。圖源:C. B. Choy, D. Xu, J. Gwak. (2016). 3D-R2N2: A Unified Approach for Single and Multi-view 3D Object Reconstruction. ECCV. 給定來自任意視點的對象的一個或多個圖像,2D-CNN 首先將輸入圖像 x 編碼為低維特征 T(x)。然后,根據(jù)給定的編碼輸入,3D-LSTM)單元選擇性的更新它們的單元狀態(tài)或維持原狀態(tài)。最后,3D-DCNN 解碼 LSTM 單元的隱藏狀態(tài)并生成 3D 概率體素重建。[1] 指出使用基于 LSTM 的網(wǎng)絡(luò)的主要原因是這樣的網(wǎng)絡(luò)可以有效應(yīng)對物體被遮擋的情形,因為網(wǎng)絡(luò)僅更新對應(yīng)于物體可見部分的單元。如果后續(xù)視圖顯示先前被遮擋的部分,且這部分與網(wǎng)絡(luò)預(yù)測不匹配,則網(wǎng)絡(luò)將更新先前被遮擋的部分的 LSTM 狀態(tài),但保留其他部分的狀態(tài)。 但使用體素表示帶來的一個挑戰(zhàn)是模型的計算量會隨著分辨率增高指數(shù)級的增長,如果分辨率限制到了 32*32*3 以下以降低對內(nèi)存的要求則會使得輸出結(jié)果丟失很多細(xì)節(jié)。有些研究通過對輸出空間進(jìn)行分層劃分,以實現(xiàn)計算和存儲效率 [2, 3, 4],其中 Maxim Tatarchenko 等學(xué)者提出的 Octree 網(wǎng)絡(luò) [4] 取得了顯著的分辨率的提高,甚至可以達(dá)到 512^3。 在計算量上,使用神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)深度圖會更有優(yōu)勢。以 D. Eigen 等學(xué)者的研究 [5] 為例,他們可以僅使用卷積層,同時試圖將更高的分辨率顯式的編碼進(jìn)神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)中。 D. Eigen 等學(xué)者提出的神經(jīng)網(wǎng)絡(luò)分為兩部分:全局粗粒度網(wǎng)絡(luò)和局部細(xì)粒度網(wǎng)絡(luò)(見圖 8)。粗粒度網(wǎng)絡(luò)的任務(wù)是使用場景的全局視圖來預(yù)測整個深度圖結(jié)構(gòu)。該網(wǎng)絡(luò)的上層完全連接,因此在其視野中可以包含整個圖像。粗粒度網(wǎng)絡(luò)包含五個卷積和最大池的特征提取層,后面是兩個全連接層。輸入,特征映射和輸出大小也在下圖中給出。與輸入相比,最終輸出會被下采樣 4 倍。細(xì)粒度網(wǎng)絡(luò)會接收到粗粒度網(wǎng)絡(luò)的預(yù)測和輸入圖片,以完成對粗略預(yù)測和局部細(xì)節(jié)的對齊。細(xì)粒度網(wǎng)絡(luò)除了用于連接輸入圖像和粗略預(yù)測的串聯(lián)(concatenation)層以外,只包含卷積層。 圖 8:D. Eigen 等學(xué)者提出的神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu)。圖源:D. Eigen, C. Puhrsch, and R. Fergus. (2014). Depth map prediction from a single image using a multi-scale deep network. NIPS. 這個模型在當(dāng)時取得了 state-of-art,但實際上預(yù)測還是十分粗糙的,有時模型的預(yù)測只能看出物體的大概輪廓。為了進(jìn)一步提高分辨率,D. Eigen 等學(xué)者此后也對模型進(jìn)行過一些改進(jìn)。包括將網(wǎng)絡(luò)從兩部分?jǐn)U展到三部分,從而提高一倍分辨率,但仍然只有輸入圖像分辨率的一半。 將神經(jīng)網(wǎng)絡(luò)應(yīng)用在剩余的兩種數(shù)據(jù)形式——點云和網(wǎng)格——上的話,還要額外面對一個困難:點云和網(wǎng)格不是規(guī)則的幾何數(shù)據(jù)形式,無法直接使用。稍早一點的研究,比如 D. Maturana 和 S. Scherer. Voxne 提出的 Voxnet [6] 以及 Z. Wu 等學(xué)者提出的 3D shapenets [7] 都是先將數(shù)據(jù)轉(zhuǎn)化為體素形式或者圖像表示,然后在體素化的數(shù)據(jù)上進(jìn)行訓(xùn)練。但這會極大的增加計算負(fù)擔(dān),同時還可能模糊數(shù)據(jù)。此后有一些研究試圖令神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)網(wǎng)格的幾何特征,比如 Jonathan Masciy 等學(xué)者提出的 Geodesic convolutional neural networks [8]。 總的來看,如果需要從四種表現(xiàn)形式中選擇一個的話,使用體素的重構(gòu)精度一般是最高的,使用深度圖最容易將重建任務(wù)遷移到深度學(xué)習(xí)上。目前的 state of the art 是由 Stephan R. Richter 和 Stefan Roth 提出的 Matryoshka Networks [9],該網(wǎng)絡(luò)使用由多個嵌套深度圖組成的形狀表示。 損失函數(shù)方面,由于數(shù)據(jù)的形式不一,目前沒有統(tǒng)一使用的損失函數(shù),常用的有 scale-invariant error 和交叉熵等。衡量精度使用的標(biāo)準(zhǔn)則以 RMSE 和 IoU 居多。 幾何方法對比深度學(xué)習(xí)方法 Maxim Tatarchenko 等學(xué)者 [10] 認(rèn)為,實際上目前表現(xiàn)最好的深度學(xué)習(xí)算法實際上學(xué)習(xí)到的是圖像分類,而非圖像重建。他們設(shè)計了幾個簡單的基線算法,一個為 K-means 算法,將訓(xùn)練集中的形狀聚類為 500 個子類別;一個 retrieval 算法將數(shù)據(jù)集中的形狀投射到低維空間中求解和其他形狀的相似度;還有一個最近鄰算法(Oracle NN)根據(jù) IoU,為測試集中的 3D 形狀找到與訓(xùn)練集最接近的形狀。這個方法不能在實踐中應(yīng)用,但可以給出檢索方法應(yīng)對這一任務(wù)所能取得的表現(xiàn)的上限。 在 ShapeNet 數(shù)據(jù)集上的測試顯示,沒有任何一個神經(jīng)網(wǎng)絡(luò)算法可以超過最近鄰算法(Oracle NN)的表現(xiàn),也就是說,測試結(jié)果中 mean IoU 最高甚至還不超過 0.6。 圖 9:模型在測試數(shù)據(jù)上的表現(xiàn)示例。圖源:M. Tatarchenko, S. R. Richter, R. Ranftl, Z. Li, V. Koltun, T. Brox. (2019). What Do Single-view 3D Reconstruction Networks Learn? arXiv:1905.03678v1. 圖 9 給出了幾個模型在一些測試數(shù)據(jù)上的表現(xiàn),可以看到作者設(shè)計的基線模型的表現(xiàn)基本與神經(jīng)網(wǎng)絡(luò)相同。每個樣本右下角的數(shù)字表示 IoU,基線模型通過搜索相似的形狀可以保證整體形狀的正確性,但細(xì)節(jié)可能不正確。 另外一個令人驚訝的發(fā)現(xiàn)是,如果將各個對象類的 IoU 分?jǐn)?shù)的直方圖可視化的話,會發(fā)現(xiàn)神經(jīng)網(wǎng)絡(luò)和兩個基線方法的類內(nèi)分布十分相似。然而,這兩個基線方法本質(zhì)上是圖像識別方法。 作者對 55 個類和所有測試方法的直方圖進(jìn)行了 Kolmogorov-Smirnov 檢驗。該檢驗的原假設(shè)是兩個分布沒有表現(xiàn)出統(tǒng)計學(xué)上的顯著差異。圖 10 中的右側(cè)給出了三個例子,左側(cè)的熱圖(heat map)中的每個單元顯示了統(tǒng)計測試不允許拒絕原假設(shè)的類的數(shù)量,即 p 值大于 0.05。可以看到,絕對大多數(shù)類都不能拒絕深度學(xué)習(xí)方法和兩個基線方法的直方圖分布一樣的原假設(shè)。而最近鄰方法則和其他方法有比較明顯的不同。 圖 10:測試方法的 IoU 直方圖對比及 Kolmogorov-Smirnov 檢驗結(jié)果。圖源:M. Tatarchenko, S. R. Richter, R. Ranftl, Z. Li, V. Koltun, T. Brox. (2019). What Do Single-view 3D Reconstruction Networks Learn? arXiv:1905.03678v1. 即便我們忽略深度學(xué)習(xí)到底在訓(xùn)練中習(xí)得了什么這一問題,而僅關(guān)注神經(jīng)網(wǎng)絡(luò)的重建表現(xiàn),D. Eigen 等學(xué)者的研究 [1] 中所展現(xiàn)出來的結(jié)果也是十分值得討論的。作者使用了 4 種不同類別的高質(zhì)量 CAD 模型,通過手動編輯紋理將其紋理強度增強到低,中和高,并且渲染出了不同視角。比較用的 MVS 算法是 Patch-Match,通過 global SfM 估計相機(jī)位置。重建效果由體素表示,用 IoU 衡量,由于 Patch-Match 生成的 3D 物體是由網(wǎng)格表示的,還需要將其體素化用于比較,最終輸出大小為 32×32×32。 圖 11:測試數(shù)據(jù)示例和比較結(jié)果。圖源:C. B. Choy, D. Xu, J. Gwak. (2016). 3D-R2N2: A Unified Approach for Single and Multi-view 3D Object Reconstruction. ECCV. 上圖第一行給出了使用的測試數(shù)據(jù)的例子,從左到右依此為具有各種視點的圖像和紋理水平從高到低的圖像。測試結(jié)果很有意思——3D-R2N2 和 Patch-Match 算法的優(yōu)缺點幾乎是完全相反的。從上圖 a)中可以看出當(dāng) Patch-Match 方法遇上低紋理水平的物體,預(yù)測精度會大大下降。另一方面,在滿足 Patch-Match 算法的假設(shè)的情況下(物體紋理水平較高),Patch-Match 算法的精度遠(yuǎn)遠(yuǎn)大于 3D-R2N2,即便輸出數(shù)據(jù)的大小僅有 32x32x32。在學(xué)習(xí)深度的神經(jīng)網(wǎng)絡(luò)研究中我們也有看到,神經(jīng)網(wǎng)絡(luò)的預(yù)測還是以輪廓為主,細(xì)節(jié)上面有缺失。作者認(rèn)為這主要是因為訓(xùn)練數(shù)據(jù)有偏置,大部分都是紋理級別較低的數(shù)據(jù),因為實際上 3D-R2N2 在紋理級別增高以后表現(xiàn)下降了。上圖 b)則展示了當(dāng)視點不足的時候,Patch-Match 算法完全無法運行,而 3D-R2N2 則不受這個影響。但 Patch-Match 算法的精度可以隨著視點的增多而得到提升,3D-R2N2 無法重建一樣多的細(xì)節(jié)。 上圖(c)到(h)則給出了分別給定 20,30 和 40 個視點的高紋理飛機(jī)模型時,3D-R2N2 和 Patch-Match 的表現(xiàn)。其中(c-e)是 Patch-Match 的重建結(jié)果,(f-h)是 3D-R2N2 的重建結(jié)果。可以看到 3D-R2N2 的預(yù)測的確差別不大,而 Patch-Match 則從完全無法辨認(rèn)的預(yù)測提升到了流暢、精細(xì)的重建結(jié)果。 筆者看到這一結(jié)果的時候,感覺這幾乎完全是 no free lunch theory 重現(xiàn)。由于深度學(xué)習(xí)算法僅用一張圖像作為輸入,可以使用的信息減少了,在適用性增大的同時帶來的一定是最優(yōu)表現(xiàn)的下降。Yasutaka Furukawa 在他的書中 [11] 也有強調(diào),「An MVS algorithm is only as good as the quality of the input images and camera parameters」。 另外,目前深度學(xué)習(xí)的研究還存在兩個問題——如何衡量模型表現(xiàn)以及使用什么訓(xùn)練數(shù)據(jù)。 前文提到,平均 IoU 通常用作基準(zhǔn)單視圖重建方法的主要量化指標(biāo)。但將其用唯一指標(biāo)可能是有問題的,因為只有 IoU 足夠高時,才能表示預(yù)測形狀的質(zhì)量。低到中等分?jǐn)?shù)表明兩種形狀之間存在顯著差異。例子見下圖。 圖 11:不同生成結(jié)果的 IoU。圖源:M. Tatarchenko, S. R. Richter, R. Ranftl, Z. Li, V. Koltun, T. Brox. (2019). What Do Single-view 3D Reconstruction Networks Learn? arXiv:1905.03678v1. 針對第二個問題,目前深度學(xué)習(xí)使用的訓(xùn)練集主要是 ShapeNet 數(shù)據(jù)集。然而,該數(shù)據(jù)集的測試集中的形狀與訓(xùn)練集中的形狀非常相似。以 ShapeNet 為數(shù)據(jù)集訓(xùn)練出的重建模型可以很輕易的找到捷徑——它只需要從訓(xùn)練集中檢索類似的形狀。在 Maxim Tatarchenko 等學(xué)者的研究中我們也看到了這一現(xiàn)象。 至此,我們已經(jīng)討論了目前常用的一些算法,筆者在表一中對這些算法的各方面表現(xiàn)進(jìn)行了總結(jié)。 未來方向 可以看到,幾何算法和深度學(xué)習(xí)方法的優(yōu)缺點完全不一樣。在條件不允許的時候,用一張圖片恢復(fù) 3D 結(jié)構(gòu)是有價值的;但當(dāng)更多數(shù)據(jù)可獲取的時候,盡可能的利用信息一定是更好地選擇。并且專注于從單張圖像恢復(fù) 3D 結(jié)構(gòu)的深度學(xué)習(xí)研究實際上是假設(shè)單張單目圖像可以檢測到三維信息的,而這從理論上來講應(yīng)該是不可能的,這也是為什么大部分生物都有兩只眼睛。 此外,在產(chǎn)品化上,如何與具體應(yīng)用結(jié)合——比如如何將三維視覺應(yīng)用于 AGV、無人駕駛上——是十分值得探索的。這個過程也一定會帶來更多的挑戰(zhàn),包括但不限于:
面對實際運用算法時的將所處復(fù)雜環(huán)境,幾何算法和深度學(xué)習(xí)方法實際上可以是互補的,并不一定要做二選一的決定。以幾何方法做主導(dǎo),用深度學(xué)習(xí)強大的特征表達(dá)能力來補充幾何方法不適用的情況是一種發(fā)展趨勢。 資源 軟件庫:
教材:
數(shù)據(jù)集:
文本作者為機(jī)器之心分析師 Yuanyuan Li。她幾次轉(zhuǎn)行,本科國際貿(mào)易,研究生轉(zhuǎn)向統(tǒng)計,畢業(yè)后留在歐洲,選擇從事機(jī)械研發(fā)工作,主要負(fù)責(zé)圖像處理,實現(xiàn)計算機(jī)視覺算法的落地。欣賞一切簡單、優(yōu)雅但有效的算法,試圖在深度學(xué)習(xí)的簇?fù)碚吆蛻岩烧咧g找到一個平衡。希望在這里通過分享自己的拙見、思想的碰撞可以拓寬自己的思路。 機(jī)器之心個人主頁:https://www./users/a761197d-cdb9-4c9a-aa48-7a13fcb71f83 參考文獻(xiàn): [1] C. B. Choy, D. Xu, J. Gwak. (2016). 3D-R2N2: A Unified Approach for Single and Multi-view 3D Object Reconstruction. ECCV. [2] C. Hane, S. Tulsiani, and J. Malik. (2017). Hierarchical surface prediction for 3D object reconstruction. 3DV. [3] G. Riegler, A. O. Ulusoy, H. Bischof, and A. Geiger.(2017). OctNetFusion: Learning depth fusion from data. 3DV. [4] M. Tatarchenko, A. Dosovitskiy, and T. Brox. (2017). Octree generating networks: Efficient convolutional architectures for high-resolution 3D outputs. ICCV. [5] D. Eigen, C. Puhrsch, and R. Fergus. (2014). Depth map prediction from a single image using a multi-scale deep network. NIPS. [6] D. Maturana; S. Voxne. (2015). VoxNet: A 3D Convolutional Neural Network for Real-Time Object Recognition. IROS. [7] Z. Wu, S. Song, A. Khosla, F. Yu, L. Zhang, X. Tang and J. Xia. (2015). 3D ShapeNets: A Deep Representation for Volumetric Shape Modeling. CVPR. [8] J. Masci, D. Boscaini, M. M. Bronstein, P. Vandergheynst. (2015). Geodesic convolutional neural networks on Riemannian manifolds. arXiv:1501.06297. [9] S. R. Richter and S. Roth. (2018). Matryoshka networks: Predicting 3D geometry via nested shape layers. CVPR. [10] M. Tatarchenko, S. R. Richter, R. Ranftl, Z. Li, V. Koltun, T. Brox. (2019). What Do Single-view 3D Reconstruction Networks Learn? arXiv:1905.03678v1. [11] Y. Furukawa and C. Hernández. (2015). Multi-View Stereo: A Tutorial. Foundations and Trends? in Computer Graphics and Vision. 9(1-2):1-148. 3D重建:硬派幾何求解vs深度學(xué)習(xí)打天下?Yuanyuan Li 機(jī)器之心 2019-07-08 機(jī)器之心原創(chuàng) 作者:Yuanyuan Li 編輯:Hao Wang 一直以來,研究人員都希望能夠賦予機(jī)器和人類感官一樣的感知,其中就包含視覺。作為人類最重要的感官之一,人類接受到的信息中超過 70% 來源于雙眼。人的眼睛可以感知到 3D 信息,由于雙目視覺的存在,即使面對一張照片也可以比較輕易的從中獲取深度信息。然而,這對計算機(jī)來說卻是一個難點——3D 世界中形狀不同的物體可以在 2 維世界中擁有一模一樣的投影,3D 形狀的估計實際上是一個非適定性問題(ill-posed problem)。傳統(tǒng)研究主要利用各類幾何關(guān)系或者先驗信息,而近年來隨著深度學(xué)習(xí)的流行,對幾何方法的研究似有所忽視。 不久之前,加州大學(xué)伯克利分校馬毅教授也在微博表示,「……沒有任何工具或算法是萬靈藥。至少在三維重建問題上,沒有把幾何關(guān)系條件嚴(yán)格用到位的算法,都是不科學(xué)的—根本談不上可靠和準(zhǔn)確。」 本文試圖對 3D 重建做一個簡單介紹,并對目前流行的兩類方法進(jìn)行探討和對比。 術(shù)語介紹 (Terminology) 3D 重建是指對物體的真實形狀和外觀的獲取過程,其建模方法可以分為主動式(Active method)和被動式(Passive method)。 主動式(Active method): 在主動式方法中,物體的深度信息是給定的——這可以通過使用激光等光源或能量源向物體發(fā)射信號,然后解析返回的信號來獲得——重建主要是利用數(shù)值近似來還原物體的 3D 輪廓。其中幾種主要的方法有:
被動式(Passive method): 被動式方法在 3D 重建過程中不會與被重建物體產(chǎn)生任何「交互」,主要是利用周圍環(huán)境獲取圖像,然后通過對圖像的理解來推理物體的 3D 結(jié)構(gòu)。可以分為三類: 單目視覺法(Monocular stereo vision) 主要使用一臺攝像機(jī)拍攝一張照片來進(jìn)行 3D 重建。其中又分為:
雙目視覺法(Binocular stereo vision) 在這種方法中,圖像是由兩個處在不同位置的相機(jī)同時對物體進(jìn)行拍攝而獲取的,或者由一個相機(jī)不斷移動到不同的視點對物體進(jìn)行拍攝。顯然,這一方法試圖模擬人類利用雙眼感知圖像視差而獲取深度信息的情況。雙目視覺法依賴于圖片像素匹配,可以使用模板比對或者對極幾何法。 立體視覺法(Multi-view stereo,MVS) 立體視覺法最初是由上述兩個研究自然發(fā)展而來的,立體視覺法將多個相機(jī)設(shè)置于視點,或用單目相機(jī)在多個不同的視點拍攝圖像以增加穩(wěn)健性,見圖 1 示例。在發(fā)展的過程中,這一研究領(lǐng)域遇到了許多新的問題——比如,計算量暴增——并演變成一種不同類型的問題。目前這一研究領(lǐng)域十分活躍。 圖 1:使用單目相機(jī)在不同視點拍攝多張照片用于 3D 重建。圖源:Multi-View 3D Reconstruction https://vision.in./research/image-based_3d_reconstruction/multiviewreconstruction 早期的立體視覺研究主要在實驗室環(huán)境中進(jìn)行,所以相機(jī)參數(shù)都是已知的。但隨著研究者越來越多的使用網(wǎng)絡(luò)上下載的照片等非實驗室環(huán)境下獲取的圖像,在重建工作之前必須首先求得相機(jī)位置和 3D 點來估計相機(jī)參數(shù)。 術(shù)語「相機(jī)參數(shù)」是指描述相機(jī)配置的一組值,即,由位置和方向組成的相機(jī)姿勢信息,以及諸如焦距和像素傳感器尺寸的相機(jī)固有屬性。目前有許多不同的方法或「模型」來參數(shù)化這種攝像機(jī)配置,一般最常用的是針孔攝像機(jī)模型。 這些參數(shù)是必須的,因為相機(jī)將拍攝的 3D 世界的物體投影到 2D 圖像上,而現(xiàn)在我們需要用 2D 圖像反推 3D 世界信息。可以說,相機(jī)參數(shù)是確定物體的世界點和圖像點之間相互關(guān)系的幾何模型的參數(shù)。 目前計算攝像機(jī)參數(shù)主要使用的算法是 Structure from Motion(SfM),MVS 發(fā)展成功也在很大程度上依賴于 SfM 的成功。與 SfM 齊名的還有 VSLAM 算法,兩者都依賴于圖片像素匹配以及場景是剛性的假設(shè)。SfM 最常用于計算無序圖像集的相機(jī)模型,通常是離線的,而 VSLAM 專門從視頻流計算攝像機(jī)的位置,通常是實時的。 Structure from Motion 大概在初中的物理課上,我們接觸過小孔成像的原理。以圖 2 為例,我們考慮如何將物體 X 投影到圖像上的 x 點。投影中心是 c——又稱為相機(jī)中心(camera center)——以此為原點可以畫出相機(jī)坐標(biāo)系,則物體 X 的坐標(biāo)為(X,Y,Z)。經(jīng)過相機(jī)中心,并垂直于圖像平面的中心線被稱為主軸(principle axis),也就是圖 2 中的 Z 軸。主軸和相機(jī)平面的交點被稱為 principal point,并成為圖像坐標(biāo)系的原點 p。p 點和相機(jī)中心 c 點的距離為 f,也就是焦距。 圖 2:針孔攝像機(jī)模型。圖源:Richard Hartley and Andrew Zisserman. Multiple view geometry in computer vision. Cambridge university press, 2003. 根據(jù)相似三角形原理(圖 2 右側(cè)),我們可以輕易得出相機(jī)坐標(biāo)系和圖像坐標(biāo)系的關(guān)系:Z/f = Y/y = X/x 整理后可以得到: x = f*X/Z y = f*Y/Z z = f 即點(X,Y,Z)在圖像坐標(biāo)系中對應(yīng)的坐標(biāo)是(fX/Z,fY/Z,f)。這個映射關(guān)系對坐標(biāo) Z 來講是非線形的,我們需要通過擴(kuò)展坐標(biāo)維度對其線性化,從而進(jìn)行矩陣運算: 上式中我們使用的圖像坐標(biāo)系以成像平面的中心為原點,實際上我們一般會使用圖像的一個角——一般是左上角——作為原點,以水平線為 x 軸,垂直線為 y 軸。因此我們需要對成像坐標(biāo)系進(jìn)行縮放和平移,來吻合像素的實際坐標(biāo)。將圖像坐標(biāo)系上的點在 x 和 y 軸方向上分別縮放 m_x 倍和 m_y,在分別平移 p_x 和 p_y 個點,調(diào)整后的矩陣變?yōu)椋?/span> 其中 f_x = f*m_x,f_y=f*m_y,有時也寫作\alpha_x,\alpha_y。 上式中,等式右邊的第一個矩陣就是相機(jī)的內(nèi)參矩陣 K: s 是相機(jī)的 skew parameter,一般都設(shè)置為 0。 接下來,我們需要考慮在上述過程中物體的坐標(biāo)是如何確定的——實際上,它的坐標(biāo)是以相機(jī)為原點計算的。但相機(jī)的位置是可以隨時移動的,物體在相機(jī)坐標(biāo)系中的位置也會隨之移動,我們需要將物體的坐標(biāo)轉(zhuǎn)換到世界坐標(biāo)系中,來獲得穩(wěn)定的坐標(biāo)位置。 圖 3:相機(jī)坐標(biāo)系到世界坐標(biāo)的轉(zhuǎn)換。圖源:Richard Hartley and Andrew Zisserman. Multiple view geometry in computer vision. Cambridge university press, 2003. 同樣,相機(jī)坐標(biāo)系和世界坐標(biāo)系之間的轉(zhuǎn)換可以通過縮放和平移來達(dá)到,寫作: X_cam = RX + t 其中 X_cam 和 X 分別是一點在相機(jī)坐標(biāo)系和世界坐標(biāo)系下的坐標(biāo)表示,R 為 3x3 的旋轉(zhuǎn)矩陣,t 為 3x1 的平移向量。為了統(tǒng)一運算方式,我們將上式也改寫為矩陣形式: 將相機(jī)內(nèi)外參矩陣結(jié)合起來,我們就可以獲得完整的物體從 3D 世界中被投射到 2D 圖像中的坐標(biāo)轉(zhuǎn)換關(guān)系: 完整的相機(jī)矩陣可以總結(jié)為: 相機(jī)外參負(fù)責(zé)世界坐標(biāo)系到相機(jī)坐標(biāo)系的轉(zhuǎn)化,內(nèi)參則負(fù)責(zé)接下來從相機(jī)坐標(biāo)系到 2D 圖像坐標(biāo)系的轉(zhuǎn)換。 SfM 算法可以在給定一組圖像的情況下,直接輸出每張圖像的相機(jī)參數(shù),以及圖像中可見的一組 3D 點,一般被編碼為 tracks。 圖 4:SfM 算法一般流程。圖源:Chippendale, Paul & Tomaselli, Valeria & DAlto, Viviana & Urlini, Giulio & Modena, Carla & Messelodi, Stefano & Mauro Strano, Sebastiano & Alce, Günter & Hermodsson, Klas & Razafimahazo, Mathieu & Michel, Thibaud & Farinella, Giovanni. (2014). Personal Shopping Assistance and Navigator System for Visually Impaired People. 10.1007/978-3-319-16199-0_27. SfM 算法的第一步是從圖片中抽取一系列特征(feature detector),一般使用尺度不變特征轉(zhuǎn)換 (Scale-invariant feature transform 或 SIFT)。SIFT 通過對圖像使用連續(xù)高斯模糊來獲得不同的圖像尺度并在其上尋找可能的關(guān)鍵點,然后舍棄掉其中不明顯的關(guān)鍵點。SIFT 算法檢測到的關(guān)鍵點通常對光線、視角等變化相當(dāng)穩(wěn)健,甚至受視線遮蔽的影響也不大。SIFT 算法的另外一個優(yōu)點就是計算速度非常快,基本可以滿足實時運算。 圖 5:SIFT 算法示例。圖源:維基百科 URL:https://en./wiki/Scale-invariant_feature_transform 確定特征后,一般需要使用 K-D Tree 算法對不同圖像中的特征最近鄰匹配(matching)。匹配完畢后還需要去除重復(fù)匹配和不滿足幾何約束的匹配,否則誤匹配會造成較大的誤差,一般使用采樣一致性算法 RANSC 八點法來計算幾何約束。 圖 6: 特征匹配示例。圖源:CS 6476: Computer Vision Project 2: Local Feature Matching URL:https://www.cc./~hays/compvision/proj2/ 通過篩選的匹配會被合并為 tracks 用于求解相機(jī)參數(shù),估算相機(jī)參數(shù)場景的稀疏結(jié)構(gòu)。 由于算法對估計的相機(jī)模型的準(zhǔn)確性非常敏感,因此通常還需要用 bundle adjustment 優(yōu)化估計結(jié)果,主要思想是將求得的 3D 點反向投影到圖像中,與初始坐標(biāo)進(jìn)行對比并根據(jù)誤差容忍度進(jìn)行刪減,然后重新調(diào)整相機(jī)參數(shù)。 SfM 有它的缺陷,一個最重要的問題就是由于 SfM 依賴于特征可以跨視圖匹配的假設(shè),如果這個假設(shè)不滿足 SfM 就完全無法工作了。比如如果兩張圖片之間的視點差距太大(一張從正面一張從側(cè)面)或者局部被遮擋,建立特征匹配是極其成問題的。此外,SfM 由于要通過捆綁調(diào)整進(jìn)行優(yōu)化,整個算法的運算速度極慢,且速度還會隨著圖像的增加而大幅下降。 深度學(xué)習(xí) 使用深度學(xué)習(xí),研究者實際上希望能夠跳過特征抽取、特征匹配、相機(jī)參數(shù)求解等手動環(huán)節(jié),直接由圖像——有時僅需一張——模擬 3D 物體的形狀。同時,神經(jīng)網(wǎng)絡(luò)應(yīng)該不僅學(xué)習(xí)可視部分的結(jié)構(gòu),同時也能夠推理被遮擋部分的結(jié)構(gòu)。 前面提到,3D 物體的表示方法一般有深度圖 (depth), 點云 (point cloud), 體素 (voxel), 網(wǎng)格 (mesh) 四種。所以深度學(xué)習(xí)也可以依次分為學(xué)習(xí)圖像到深度的表示、圖像到體素的表示等,不過也有研究試圖融合多種表示。由于對輸出數(shù)據(jù)形式有要求,大部分研究使用了 decoder-encoder 結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò),比如 3D-R2N2 網(wǎng)絡(luò) [1](見圖 7)。該網(wǎng)絡(luò)由三個部分組成:2D 卷積神經(jīng)網(wǎng)絡(luò)(2D-CNN)組成的 encoder,3D 卷積 LSTM(3D-LSTM)作為中間架構(gòu),以及 3D 反卷積網(wǎng)絡(luò)(3D-DCNN)組成的 decoder,能夠?qū)⑤斎雸D像轉(zhuǎn)化為 3D 物體的體素表示。 圖 7:3D-R2N2 模型結(jié)構(gòu)。圖源:C. B. Choy, D. Xu, J. Gwak. (2016). 3D-R2N2: A Unified Approach for Single and Multi-view 3D Object Reconstruction. ECCV. 給定來自任意視點的對象的一個或多個圖像,2D-CNN 首先將輸入圖像 x 編碼為低維特征 T(x)。然后,根據(jù)給定的編碼輸入,3D-LSTM)單元選擇性的更新它們的單元狀態(tài)或維持原狀態(tài)。最后,3D-DCNN 解碼 LSTM 單元的隱藏狀態(tài)并生成 3D 概率體素重建。[1] 指出使用基于 LSTM 的網(wǎng)絡(luò)的主要原因是這樣的網(wǎng)絡(luò)可以有效應(yīng)對物體被遮擋的情形,因為網(wǎng)絡(luò)僅更新對應(yīng)于物體可見部分的單元。如果后續(xù)視圖顯示先前被遮擋的部分,且這部分與網(wǎng)絡(luò)預(yù)測不匹配,則網(wǎng)絡(luò)將更新先前被遮擋的部分的 LSTM 狀態(tài),但保留其他部分的狀態(tài)。 但使用體素表示帶來的一個挑戰(zhàn)是模型的計算量會隨著分辨率增高指數(shù)級的增長,如果分辨率限制到了 32*32*3 以下以降低對內(nèi)存的要求則會使得輸出結(jié)果丟失很多細(xì)節(jié)。有些研究通過對輸出空間進(jìn)行分層劃分,以實現(xiàn)計算和存儲效率 [2, 3, 4],其中 Maxim Tatarchenko 等學(xué)者提出的 Octree 網(wǎng)絡(luò) [4] 取得了顯著的分辨率的提高,甚至可以達(dá)到 512^3。 在計算量上,使用神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)深度圖會更有優(yōu)勢。以 D. Eigen 等學(xué)者的研究 [5] 為例,他們可以僅使用卷積層,同時試圖將更高的分辨率顯式的編碼進(jìn)神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)中。 D. Eigen 等學(xué)者提出的神經(jīng)網(wǎng)絡(luò)分為兩部分:全局粗粒度網(wǎng)絡(luò)和局部細(xì)粒度網(wǎng)絡(luò)(見圖 8)。粗粒度網(wǎng)絡(luò)的任務(wù)是使用場景的全局視圖來預(yù)測整個深度圖結(jié)構(gòu)。該網(wǎng)絡(luò)的上層完全連接,因此在其視野中可以包含整個圖像。粗粒度網(wǎng)絡(luò)包含五個卷積和最大池的特征提取層,后面是兩個全連接層。輸入,特征映射和輸出大小也在下圖中給出。與輸入相比,最終輸出會被下采樣 4 倍。細(xì)粒度網(wǎng)絡(luò)會接收到粗粒度網(wǎng)絡(luò)的預(yù)測和輸入圖片,以完成對粗略預(yù)測和局部細(xì)節(jié)的對齊。細(xì)粒度網(wǎng)絡(luò)除了用于連接輸入圖像和粗略預(yù)測的串聯(lián)(concatenation)層以外,只包含卷積層。 圖 8:D. Eigen 等學(xué)者提出的神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu)。圖源:D. Eigen, C. Puhrsch, and R. Fergus. (2014). Depth map prediction from a single image using a multi-scale deep network. NIPS. 這個模型在當(dāng)時取得了 state-of-art,但實際上預(yù)測還是十分粗糙的,有時模型的預(yù)測只能看出物體的大概輪廓。為了進(jìn)一步提高分辨率,D. Eigen 等學(xué)者此后也對模型進(jìn)行過一些改進(jìn)。包括將網(wǎng)絡(luò)從兩部分?jǐn)U展到三部分,從而提高一倍分辨率,但仍然只有輸入圖像分辨率的一半。 將神經(jīng)網(wǎng)絡(luò)應(yīng)用在剩余的兩種數(shù)據(jù)形式——點云和網(wǎng)格——上的話,還要額外面對一個困難:點云和網(wǎng)格不是規(guī)則的幾何數(shù)據(jù)形式,無法直接使用。稍早一點的研究,比如 D. Maturana 和 S. Scherer. Voxne 提出的 Voxnet [6] 以及 Z. Wu 等學(xué)者提出的 3D shapenets [7] 都是先將數(shù)據(jù)轉(zhuǎn)化為體素形式或者圖像表示,然后在體素化的數(shù)據(jù)上進(jìn)行訓(xùn)練。但這會極大的增加計算負(fù)擔(dān),同時還可能模糊數(shù)據(jù)。此后有一些研究試圖令神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)網(wǎng)格的幾何特征,比如 Jonathan Masciy 等學(xué)者提出的 Geodesic convolutional neural networks [8]。 總的來看,如果需要從四種表現(xiàn)形式中選擇一個的話,使用體素的重構(gòu)精度一般是最高的,使用深度圖最容易將重建任務(wù)遷移到深度學(xué)習(xí)上。目前的 state of the art 是由 Stephan R. Richter 和 Stefan Roth 提出的 Matryoshka Networks [9],該網(wǎng)絡(luò)使用由多個嵌套深度圖組成的形狀表示。 損失函數(shù)方面,由于數(shù)據(jù)的形式不一,目前沒有統(tǒng)一使用的損失函數(shù),常用的有 scale-invariant error 和交叉熵等。衡量精度使用的標(biāo)準(zhǔn)則以 RMSE 和 IoU 居多。 幾何方法對比深度學(xué)習(xí)方法 Maxim Tatarchenko 等學(xué)者 [10] 認(rèn)為,實際上目前表現(xiàn)最好的深度學(xué)習(xí)算法實際上學(xué)習(xí)到的是圖像分類,而非圖像重建。他們設(shè)計了幾個簡單的基線算法,一個為 K-means 算法,將訓(xùn)練集中的形狀聚類為 500 個子類別;一個 retrieval 算法將數(shù)據(jù)集中的形狀投射到低維空間中求解和其他形狀的相似度;還有一個最近鄰算法(Oracle NN)根據(jù) IoU,為測試集中的 3D 形狀找到與訓(xùn)練集最接近的形狀。這個方法不能在實踐中應(yīng)用,但可以給出檢索方法應(yīng)對這一任務(wù)所能取得的表現(xiàn)的上限。 在 ShapeNet 數(shù)據(jù)集上的測試顯示,沒有任何一個神經(jīng)網(wǎng)絡(luò)算法可以超過最近鄰算法(Oracle NN)的表現(xiàn),也就是說,測試結(jié)果中 mean IoU 最高甚至還不超過 0.6。 圖 9:模型在測試數(shù)據(jù)上的表現(xiàn)示例。圖源:M. Tatarchenko, S. R. Richter, R. Ranftl, Z. Li, V. Koltun, T. Brox. (2019). What Do Single-view 3D Reconstruction Networks Learn? arXiv:1905.03678v1. 圖 9 給出了幾個模型在一些測試數(shù)據(jù)上的表現(xiàn),可以看到作者設(shè)計的基線模型的表現(xiàn)基本與神經(jīng)網(wǎng)絡(luò)相同。每個樣本右下角的數(shù)字表示 IoU,基線模型通過搜索相似的形狀可以保證整體形狀的正確性,但細(xì)節(jié)可能不正確。 另外一個令人驚訝的發(fā)現(xiàn)是,如果將各個對象類的 IoU 分?jǐn)?shù)的直方圖可視化的話,會發(fā)現(xiàn)神經(jīng)網(wǎng)絡(luò)和兩個基線方法的類內(nèi)分布十分相似。然而,這兩個基線方法本質(zhì)上是圖像識別方法。 作者對 55 個類和所有測試方法的直方圖進(jìn)行了 Kolmogorov-Smirnov 檢驗。該檢驗的原假設(shè)是兩個分布沒有表現(xiàn)出統(tǒng)計學(xué)上的顯著差異。圖 10 中的右側(cè)給出了三個例子,左側(cè)的熱圖(heat map)中的每個單元顯示了統(tǒng)計測試不允許拒絕原假設(shè)的類的數(shù)量,即 p 值大于 0.05。可以看到,絕對大多數(shù)類都不能拒絕深度學(xué)習(xí)方法和兩個基線方法的直方圖分布一樣的原假設(shè)。而最近鄰方法則和其他方法有比較明顯的不同。 圖 10:測試方法的 IoU 直方圖對比及 Kolmogorov-Smirnov 檢驗結(jié)果。圖源:M. Tatarchenko, S. R. Richter, R. Ranftl, Z. Li, V. Koltun, T. Brox. (2019). What Do Single-view 3D Reconstruction Networks Learn? arXiv:1905.03678v1. 即便我們忽略深度學(xué)習(xí)到底在訓(xùn)練中習(xí)得了什么這一問題,而僅關(guān)注神經(jīng)網(wǎng)絡(luò)的重建表現(xiàn),D. Eigen 等學(xué)者的研究 [1] 中所展現(xiàn)出來的結(jié)果也是十分值得討論的。作者使用了 4 種不同類別的高質(zhì)量 CAD 模型,通過手動編輯紋理將其紋理強度增強到低,中和高,并且渲染出了不同視角。比較用的 MVS 算法是 Patch-Match,通過 global SfM 估計相機(jī)位置。重建效果由體素表示,用 IoU 衡量,由于 Patch-Match 生成的 3D 物體是由網(wǎng)格表示的,還需要將其體素化用于比較,最終輸出大小為 32×32×32。 圖 11:測試數(shù)據(jù)示例和比較結(jié)果。圖源:C. B. Choy, D. Xu, J. Gwak. (2016). 3D-R2N2: A Unified Approach for Single and Multi-view 3D Object Reconstruction. ECCV. 上圖第一行給出了使用的測試數(shù)據(jù)的例子,從左到右依此為具有各種視點的圖像和紋理水平從高到低的圖像。測試結(jié)果很有意思——3D-R2N2 和 Patch-Match 算法的優(yōu)缺點幾乎是完全相反的。從上圖 a)中可以看出當(dāng) Patch-Match 方法遇上低紋理水平的物體,預(yù)測精度會大大下降。另一方面,在滿足 Patch-Match 算法的假設(shè)的情況下(物體紋理水平較高),Patch-Match 算法的精度遠(yuǎn)遠(yuǎn)大于 3D-R2N2,即便輸出數(shù)據(jù)的大小僅有 32x32x32。在學(xué)習(xí)深度的神經(jīng)網(wǎng)絡(luò)研究中我們也有看到,神經(jīng)網(wǎng)絡(luò)的預(yù)測還是以輪廓為主,細(xì)節(jié)上面有缺失。作者認(rèn)為這主要是因為訓(xùn)練數(shù)據(jù)有偏置,大部分都是紋理級別較低的數(shù)據(jù),因為實際上 3D-R2N2 在紋理級別增高以后表現(xiàn)下降了。上圖 b)則展示了當(dāng)視點不足的時候,Patch-Match 算法完全無法運行,而 3D-R2N2 則不受這個影響。但 Patch-Match 算法的精度可以隨著視點的增多而得到提升,3D-R2N2 無法重建一樣多的細(xì)節(jié)。 上圖(c)到(h)則給出了分別給定 20,30 和 40 個視點的高紋理飛機(jī)模型時,3D-R2N2 和 Patch-Match 的表現(xiàn)。其中(c-e)是 Patch-Match 的重建結(jié)果,(f-h)是 3D-R2N2 的重建結(jié)果。可以看到 3D-R2N2 的預(yù)測的確差別不大,而 Patch-Match 則從完全無法辨認(rèn)的預(yù)測提升到了流暢、精細(xì)的重建結(jié)果。 筆者看到這一結(jié)果的時候,感覺這幾乎完全是 no free lunch theory 重現(xiàn)。由于深度學(xué)習(xí)算法僅用一張圖像作為輸入,可以使用的信息減少了,在適用性增大的同時帶來的一定是最優(yōu)表現(xiàn)的下降。Yasutaka Furukawa 在他的書中 [11] 也有強調(diào),「An MVS algorithm is only as good as the quality of the input images and camera parameters」。 另外,目前深度學(xué)習(xí)的研究還存在兩個問題——如何衡量模型表現(xiàn)以及使用什么訓(xùn)練數(shù)據(jù)。 前文提到,平均 IoU 通常用作基準(zhǔn)單視圖重建方法的主要量化指標(biāo)。但將其用唯一指標(biāo)可能是有問題的,因為只有 IoU 足夠高時,才能表示預(yù)測形狀的質(zhì)量。低到中等分?jǐn)?shù)表明兩種形狀之間存在顯著差異。例子見下圖。 圖 11:不同生成結(jié)果的 IoU。圖源:M. Tatarchenko, S. R. Richter, R. Ranftl, Z. Li, V. Koltun, T. Brox. (2019). What Do Single-view 3D Reconstruction Networks Learn? arXiv:1905.03678v1. 針對第二個問題,目前深度學(xué)習(xí)使用的訓(xùn)練集主要是 ShapeNet 數(shù)據(jù)集。然而,該數(shù)據(jù)集的測試集中的形狀與訓(xùn)練集中的形狀非常相似。以 ShapeNet 為數(shù)據(jù)集訓(xùn)練出的重建模型可以很輕易的找到捷徑——它只需要從訓(xùn)練集中檢索類似的形狀。在 Maxim Tatarchenko 等學(xué)者的研究中我們也看到了這一現(xiàn)象。 至此,我們已經(jīng)討論了目前常用的一些算法,筆者在表一中對這些算法的各方面表現(xiàn)進(jìn)行了總結(jié)。 未來方向 可以看到,幾何算法和深度學(xué)習(xí)方法的優(yōu)缺點完全不一樣。在條件不允許的時候,用一張圖片恢復(fù) 3D 結(jié)構(gòu)是有價值的;但當(dāng)更多數(shù)據(jù)可獲取的時候,盡可能的利用信息一定是更好地選擇。并且專注于從單張圖像恢復(fù) 3D 結(jié)構(gòu)的深度學(xué)習(xí)研究實際上是假設(shè)單張單目圖像可以檢測到三維信息的,而這從理論上來講應(yīng)該是不可能的,這也是為什么大部分生物都有兩只眼睛。 此外,在產(chǎn)品化上,如何與具體應(yīng)用結(jié)合——比如如何將三維視覺應(yīng)用于 AGV、無人駕駛上——是十分值得探索的。這個過程也一定會帶來更多的挑戰(zhàn),包括但不限于:
面對實際運用算法時的將所處復(fù)雜環(huán)境,幾何算法和深度學(xué)習(xí)方法實際上可以是互補的,并不一定要做二選一的決定。以幾何方法做主導(dǎo),用深度學(xué)習(xí)強大的特征表達(dá)能力來補充幾何方法不適用的情況是一種發(fā)展趨勢。 資源 軟件庫:
教材:
數(shù)據(jù)集:
文本作者為機(jī)器之心分析師 Yuanyuan Li。她幾次轉(zhuǎn)行,本科國際貿(mào)易,研究生轉(zhuǎn)向統(tǒng)計,畢業(yè)后留在歐洲,選擇從事機(jī)械研發(fā)工作,主要負(fù)責(zé)圖像處理,實現(xiàn)計算機(jī)視覺算法的落地。欣賞一切簡單、優(yōu)雅但有效的算法,試圖在深度學(xué)習(xí)的簇?fù)碚吆蛻岩烧咧g找到一個平衡。希望在這里通過分享自己的拙見、思想的碰撞可以拓寬自己的思路。 機(jī)器之心個人主頁:https://www./users/a761197d-cdb9-4c9a-aa48-7a13fcb71f83 參考文獻(xiàn): [1] C. B. Choy, D. Xu, J. Gwak. (2016). 3D-R2N2: A Unified Approach for Single and Multi-view 3D Object Reconstruction. ECCV. [2] C. Hane, S. Tulsiani, and J. Malik. (2017). Hierarchical surface prediction for 3D object reconstruction. 3DV. [3] G. Riegler, A. O. Ulusoy, H. Bischof, and A. Geiger.(2017). OctNetFusion: Learning depth fusion from data. 3DV. [4] M. Tatarchenko, A. Dosovitskiy, and T. Brox. (2017). Octree generating networks: Efficient convolutional architectures for high-resolution 3D outputs. ICCV. [5] D. Eigen, C. Puhrsch, and R. Fergus. (2014). Depth map prediction from a single image using a multi-scale deep network. NIPS. [6] D. Maturana; S. Voxne. (2015). VoxNet: A 3D Convolutional Neural Network for Real-Time Object Recognition. IROS. [7] Z. Wu, S. Song, A. Khosla, F. Yu, L. Zhang, X. Tang and J. Xia. (2015). 3D ShapeNets: A Deep Representation for Volumetric Shape Modeling. CVPR. [8] J. Masci, D. Boscaini, M. M. Bronstein, P. Vandergheynst. (2015). Geodesic convolutional neural networks on Riemannian manifolds. arXiv:1501.06297. [9] S. R. Richter and S. Roth. (2018). Matryoshka networks: Predicting 3D geometry via nested shape layers. CVPR. [10] M. Tatarchenko, S. R. Richter, R. Ranftl, Z. Li, V. Koltun, T. Brox. (2019). What Do Single-view 3D Reconstruction Networks Learn? arXiv:1905.03678v1. [11] Y. Furukawa and C. Hernández. (2015). Multi-View Stereo: A Tutorial. Foundations and Trends? in Computer Graphics and Vision. 9(1-2):1-148. 深度Pro 理論詳解 | 工程實踐 | 產(chǎn)業(yè)分析 | 行研報告 機(jī)器之心最新上線深度內(nèi)容欄目,匯總AI深度好文,詳解理論、工程、產(chǎn)業(yè)與應(yīng)用。這里的每一篇文章,都需要深度閱讀15分鐘。 今日深度推薦 點擊圖片,進(jìn)入小程序深度Pro欄目 PC點擊閱讀原文,訪問官網(wǎng) 更適合深度閱讀 www./insight 每日重要論文、教程、資訊、報告也不想錯過? |
|