深度學(xué)習(xí)立體匹配之 MC-CNN中兩種結(jié)構(gòu):MC-CNN-fst和MC-CNN-acrt。這兩個算法由Zbontar和LeCun共同研發(fā),分別代表了速度與精度的平衡。MC-CNN-fst關(guān)注于快速處理,而MC-CNN-acrt則更注重匹配精度。這兩種算法為深度學(xué)習(xí)立體匹配技術(shù)的發(fā)展奠定了基礎(chǔ),而從效果上看他們明顯超過了當(dāng)時很多優(yōu)秀的立體匹配算法,成為了SOTA。我們先看看當(dāng)前的學(xué)習(xí)地圖:
學(xué)習(xí)進度地圖 那么在本篇文章中,我將更深入地探討基于深度學(xué)習(xí)的立體匹配算法,涉及一系列有趣的網(wǎng)絡(luò)結(jié)構(gòu)和變種。我會帶你首先回顧這兩個算法的基本架構(gòu),然后討論如何通過網(wǎng)絡(luò)變種、訓(xùn)練策略、正則化和視差估計等技巧來進一步提升它們的性能。這篇文章旨在幫助大家全面地了解深度學(xué)習(xí)立體匹配算法的發(fā)展現(xiàn)狀和研究趨勢。今天的文章大量參考引用了參考文獻[1],再次對作者表示敬意! 1. 基本網(wǎng)絡(luò)結(jié)構(gòu)回顧
1.1 網(wǎng)絡(luò)架構(gòu)回顧
下面是我上次提到的Zbontar和LeCun[2][3]提出的兩種算法的架構(gòu)圖,這是是深度學(xué)習(xí)立體匹配領(lǐng)域最基礎(chǔ)的結(jié)構(gòu)。其中一個被作者命名為MC-CNN-fst,另外一個則命名為MC-CNN-acrt,其后綴fst和acrt分別代表fast和accurate,顧名思義MC-CNN-fst追求的是計算效率,而MC-CNN-acrt追求的則是準(zhǔn)確性。
MC-CNN的兩種架構(gòu) 我們可以利用下圖來描述它們的共同點,它們都是由左右兩條分支組成了特征提取的網(wǎng)絡(luò),提取出來的特征圖都會進入到?jīng)Q策模塊,該模塊負(fù)責(zé)計算出左右兩個Patch對應(yīng)的兩個特征圖之間的相似度,所以整個網(wǎng)絡(luò)分為特征提取和分類決策這兩部分。
基本網(wǎng)絡(luò)構(gòu)成 它們的不同點是:
特征提取網(wǎng)絡(luò)不同。除開層數(shù)等信息之外,fast結(jié)構(gòu)還在特征提取網(wǎng)絡(luò)的尾部添加了歸一化層,用于對特征圖進行歸一化。
分類決策部分不同,fast結(jié)構(gòu)中,特征圖在每個分支中已經(jīng)進行了歸一化。所以分支決策部分直接是計算兩個歸一化的特征圖的點積,及余弦相似度。而在accurate架構(gòu)中,特征圖首先在通道維度連接在一起,然后經(jīng)過多個全連接層,再通過Sigmoid函數(shù)得到最后的相似度得分
這種架構(gòu)可以快速判斷左右兩幅圖中取出的兩個Patch是否相似,結(jié)構(gòu)也很簡單,所以很多學(xué)者采用了這種架構(gòu),并進行了改進,我在下一節(jié)會談到各種改進方向。
1.2 相似度計算
在特征提取之后,特征被送入上層模塊進行相似度的計算。相似度計算是立體匹配算法的核心部分,可以分為兩大類:手動相似度計算和決策網(wǎng)絡(luò)。
1.2.1 手動相似度計算
手動相似度計算無需訓(xùn)練,它直接通過一些預(yù)先定義好的距離度量方法計算特征之間的相似性。常見的手動相似度計算方法包括L2距離、余弦距離、歸一化的相關(guān)度或歸一化內(nèi)積等。這些方法的優(yōu)勢在于可以通過卷積操作實現(xiàn),提高計算效率,并且無需訓(xùn)練。然而,它們可能無法充分適應(yīng)不同的數(shù)據(jù)集特性,導(dǎo)致匹配精度受到限制。MC-CNN-fst算法就是采用的這種方式
快速架構(gòu)采用余弦相似度
1.2.2 采用神經(jīng)網(wǎng)絡(luò)計算相似度
與手動相似度計算相比,用于決策的神經(jīng)網(wǎng)絡(luò)需要訓(xùn)練,但可以提供更準(zhǔn)確的相似度計算結(jié)果。決策網(wǎng)絡(luò)可以采用1x1卷積、全卷積層實現(xiàn),或通過卷積層與全連接層的組合實現(xiàn)。決策網(wǎng)絡(luò)與特征提取模塊聯(lián)合訓(xùn)練,從而學(xué)習(xí)到更適應(yīng)當(dāng)前數(shù)據(jù)集的相似度計算方式, MC-CNN-acrt就是典型代表
準(zhǔn)確架構(gòu)采用Sigmoid結(jié)果 全連接層實現(xiàn)的方法包括Han等人[4]的全連接層+SoftMax,Zagoruyko和Komodakis[5]的方法,以及Zbontar等人[3]提出的MC-CNN-acrt網(wǎng)絡(luò)。在這些方法中,特征提取分支的特征圖的結(jié)合方式有兩種:一種是在通道層面連接[4][5][3],另一種是通過類似Mean Pooling等方式連接[5],這樣可以處理任意多個Patch的相似度,而不用改變網(wǎng)絡(luò)結(jié)構(gòu)。
決策網(wǎng)絡(luò)的優(yōu)點是相似度計算結(jié)果更加適配當(dāng)前的數(shù)據(jù)集,因此匹配精度更高,但相應(yīng)地計算速度會更慢。因此,在實際應(yīng)用中,需要根據(jù)具體問題和場景權(quán)衡決策網(wǎng)絡(luò)與手動相似度計算方法的選擇。
2. 網(wǎng)絡(luò)的變種
在上面結(jié)構(gòu)的基礎(chǔ)上,很多學(xué)者研究了各種改進和提升的方法,這一節(jié)我們就來談?wù)劯鞣N改進
2.1 引入Max-pooling操作處理大視差和大尺度Patch
回顧一下最簡單的立體匹配代價計算公式:
SAD代價計算公式 我們看到整個計算的時間復(fù)雜度是O(WHSD),其中W/H是圖像的長寬,S是支持窗的尺寸,D則是視差值的范圍。所以支持窗越大,計算復(fù)雜度越高。對應(yīng)到我們的深度學(xué)習(xí)架構(gòu)中,特征圖越大,計算復(fù)雜度越高。對應(yīng)到我們深度學(xué)習(xí)的方法里面,則是特征圖越大,計算復(fù)雜度越高,視差范圍越大,計算復(fù)雜度越高。所以為了解決原始MC-CNN在處理大視差和大尺寸Patch時的效率問題,Zagoruyko和Komodakis[37]以及Han等人[4]在每層后面都添加了max-pooling和下采樣操作。這樣做的目的是使網(wǎng)絡(luò)能夠適應(yīng)更大的Patch尺寸和視角變化。通過這種方式,增強的架構(gòu)能夠在保持較高匹配精度的同時提高處理速度,因為這樣得到的特征圖尺寸更小,如下圖所示:
加入Max Pooling前后對比
2.2 引入SPP模塊增強網(wǎng)絡(luò)結(jié)構(gòu)應(yīng)對不同尺度輸入時的靈活性
另一個重要的改進是在特征計算分支的末端加入了空間金字塔池化(SPP)模塊。SPP模塊可以輸入任意尺寸的特征Patch,輸出固定尺寸的特征圖(如圖2-c所示)。SPP的Pooling尺寸根據(jù)輸入尺寸而改變,這樣使得不同尺寸的輸入可以得到相同尺寸的輸出。這樣當(dāng)輸入的Patch尺寸改變時,網(wǎng)絡(luò)結(jié)構(gòu)不用改變。這一點對于處理不同尺寸的圖像數(shù)據(jù)具有重要意義,使得這個架構(gòu)更具靈活性。
加入SPP前后對比
2.3 使用ResNet使得網(wǎng)絡(luò)可以更深
這一點我想很多讀者都不陌生,ResNet已經(jīng)廣泛應(yīng)用在各種領(lǐng)域的神經(jīng)網(wǎng)絡(luò)里面了,所以盡管最初時,類似MC-CNN這樣的算法還沒有采用殘差網(wǎng)絡(luò)結(jié)構(gòu),后續(xù)的算法幾乎都加入了這個結(jié)構(gòu)。比如Shaked and Wolf [6]就使用了ResNet,構(gòu)建了如下的網(wǎng)絡(luò)結(jié)構(gòu),這里淺紅色標(biāo)注的部分就是典型的殘差模塊,這使得我們可以訓(xùn)練非常深的網(wǎng)絡(luò),從而捕捉到圖像中更高層次的特征:
采用ResNet加深網(wǎng)絡(luò)
2.4 使用空洞卷積或SPP得到更大的感受野
我在70. 三維重建5-立體匹配1,立體匹配算法總體理解中講過,在重復(fù)紋理、無紋理區(qū)域我們是希望盡量采用大尺寸的支持窗來來提升信噪比和像素之間的區(qū)分度。
不同尺度的支持窗 對應(yīng)到我們深度學(xué)習(xí)的算法中,則是我們在某些時候需要更大的感受野。擴大感受野的方法有多種,比如增大輸入Patch的尺寸、或是使用更大的卷積核再配合帶有更大步長的池化操作降低尺寸。前者會導(dǎo)致計算復(fù)雜度上升,后者則會導(dǎo)致特征圖的分辨率降低使得細(xì)節(jié)丟失。所以就有了兩種更好的方式
2.4.1 使用空洞卷積來提升感受野尺寸
第一種方法是使用空洞卷積——顧名思義,空洞卷積的卷積核是有空洞的,這樣使得我們可以有更大的感受野,但是計算量卻不改變,這種技巧后來被用到了很多領(lǐng)域。
空洞卷積 下圖是普通卷積(左)和空洞卷積(右)的對比:
2.4.2 使用SPP來提升感受野尺寸
我們上面見過引入SPP模塊可以使得網(wǎng)絡(luò)可以靈活應(yīng)對不同尺寸的輸入,而其中一個重要的應(yīng)用就是利用SPP模塊來擴大感受野。比如Park et al. [11]提出了一種叫做FW-CNN的網(wǎng)絡(luò)架構(gòu),其中引入了一個簡稱為4P的模塊,即所謂Per-pixel Pyramid Pooling - 逐像素的金字塔池化操作。 我們之前講過,如果采用更大的卷積核,加上更大步長的小尺寸的池化操作,可以擴大感受野——但這樣會導(dǎo)致丟失原始特征圖中的細(xì)節(jié)信息。如果換成更大尺寸的池化操作,但步長設(shè)置為1呢,這樣當(dāng)然也可以有更大的感受野——但同樣也會丟失圖像的細(xì)節(jié)。于是,這里的4P操作就對每個像素同時采用多種不同尺寸的池化窗口,并將輸出連接以創(chuàng)建新的特征圖。生成的特征圖包含了從粗到細(xì)的尺度信息:
4P操作可以加入到網(wǎng)絡(luò)的不同位置,在FW-CNN中,4P模塊的位置如下所示:
FW-CNN的這種方式雖然擴大了感受野,但是4P模塊需要和全連接層一樣,每個視差層級計算一次,所以計算量比較大。因此,Ye et al. [7]等提出了一種改進的方式,把SPP放到每個特征計算分支的末尾,并且采用多尺度的SPP,既降低了計算量,又能有較大的感受野。
2.5 使用多尺度特征得到更好的結(jié)果 前面的方法都是采用一種尺寸的輸入Patch,但在基礎(chǔ)架構(gòu)的基礎(chǔ)上,還可以擴展到學(xué)習(xí)多尺度的Patch的特征,進一步提升效果,比如Zagoruyko和Komodakis[5]中提到了一種架構(gòu)如下:
這里有兩種輸入,第一種是從輸入的Patch中心裁剪32x32的區(qū)域送入網(wǎng)絡(luò),第二種是將輸入的64x64的Patch縮小為32x32送入網(wǎng)絡(luò)。因此前者比后者的解析力更高。這樣網(wǎng)絡(luò)在單次前向推理后就可以提取到不同尺度和解析力的特征,效果也就更好,效率也較高。Chen et al. [8]等提出了一種類似的結(jié)構(gòu),只不過兩組流各自做各自的特征提取和分類決策,決策的結(jié)果再通過投票整合到一起,作為最后的輸出。
2.6 改變網(wǎng)絡(luò)結(jié)構(gòu),得到更高的效率
2.6.1 一次性計算所有視差層級的代價
前面我們講的方法在分類決策時,每個像素需要n_d次通過決策模塊來計算代價,其中nd是視差層次的數(shù)量。如果我們的決策模塊采用的是相關(guān)計算(類似內(nèi)積計算),那么可以利用到相關(guān)性天然的高度并行性來大大減少前向傳播次數(shù)。例如,Luo等人[9] 就提出了下面這樣的結(jié)構(gòu),這里左圖的Patch尺寸不變,但右圖會采用更大尺寸的Patch,這樣一次性最大可以把所有可能得右圖Patch的特征全部提取出來,然后通過并行的相關(guān)性計算一次性把該像素所有可能的代價計算出來。在這個網(wǎng)絡(luò)中,左圖的特征是64維的,而右圖提到的特征則是nd x 64維的。
并行相關(guān)度計算提升效率
2.6.2 一次性提取特征
我們之前展示的結(jié)構(gòu)的輸入都是兩個Patch,而非整個圖像。在Zagoruyko和Komodakis[5]中提到,實際上可以通過輸入兩個圖像,一次性提取左右兩個視圖的特征圖,不需要逐Patch的計算,也不需要每個視差層級計算一次
2.6.3 對整幅圖計算代價,而非逐Patch計算
另外,在Zagoruyko和Komodakis[5]還提到,可以通過將決策網(wǎng)絡(luò)中的全連接層改為1x1卷積操作,這樣就可以對整幅圖計算代價,而不是對Patch計算,當(dāng)然每個視差層級還是需要計算一次。 以上兩個方法在我上一篇文章種已經(jīng)講過了,下面是我當(dāng)時給的偽代碼
加速推理的偽代碼
2.7 整合特征提取和決策模塊,得到更好的效果
在Zagoruyko and Komodakis [5]中還提到了一種特別的結(jié)構(gòu),輸入的兩個Patch從一開始就整合成多通道的圖像送入網(wǎng)絡(luò)。于是網(wǎng)絡(luò)沒有專門分開的特征提取模塊,而是將特征提取與決策整合到一起,如下所示。這種結(jié)構(gòu)訓(xùn)練比較簡單,不過在推理時效率低,因為每個像素需要推理nd次:
通道維度上連接圖像再送入網(wǎng)絡(luò) 這種將多個輸入直接在通道維度上連接再送入網(wǎng)絡(luò)的方式很有用,我們之后還會看到類似的用法。這一節(jié)我們看到了多種網(wǎng)絡(luò)結(jié)構(gòu)的變種,而下一節(jié)我來介紹一下各類網(wǎng)絡(luò)的訓(xùn)練策略。
3. 網(wǎng)絡(luò)訓(xùn)練策略
我們之前看到的特征提取網(wǎng)絡(luò)和代價決策網(wǎng)絡(luò)都需要訓(xùn)練,而訓(xùn)練的策略則分為強監(jiān)督型和弱監(jiān)督型兩類。我重點介紹一下強監(jiān)督型訓(xùn)練,然后捎帶提一下弱監(jiān)督或自監(jiān)督的訓(xùn)練策略
3.1 強監(jiān)督型訓(xùn)練
這里面又分為兩種形式。 第一種的訓(xùn)練樣本的基本單元是一對patch,它們要么是匹配的正樣本,要么是不匹配的負(fù)樣本。網(wǎng)絡(luò)要學(xué)習(xí)的是這一對patch間的匹配程度。那么如果輸入的是正樣本對,理想的匹配程度為1,如果輸入的是負(fù)樣本對,那么理想的匹配程度為0。通過某些損失函數(shù)的迭代約束,網(wǎng)絡(luò)會調(diào)整自身權(quán)重,使得最終能夠甄別出輸入patch對之間是匹配的還是不匹配的。
輸入一對Patch進行訓(xùn)練 第二種的訓(xùn)練樣本的基本單元是兩對Patch,其中一對Patch是匹配的,其中右視圖的Patch來自于與左視圖對應(yīng)的右極線上。另外一對Patch則是不匹配的。此時網(wǎng)絡(luò)優(yōu)化的目標(biāo)是盡量放大這兩對Patch的匹配值之間的差異。正樣本對的相似度計算結(jié)果應(yīng)該比負(fù)樣本對的相似度計算結(jié)果大得多。
輸入兩對Patch進行訓(xùn)練 強監(jiān)督訓(xùn)練的損失函數(shù)用于衡量網(wǎng)絡(luò)輸出和學(xué)習(xí)目標(biāo)之間的差異,主要有三類損失函數(shù)
L1距離
Hinge損失函數(shù)
交叉熵?fù)p失函數(shù)
3.2 弱監(jiān)督型訓(xùn)練
為了減少對標(biāo)注數(shù)據(jù)的需求,人們提出了弱監(jiān)督訓(xùn)練方式,這通常是通過引入一些先驗信息約束網(wǎng)絡(luò)的學(xué)習(xí)過程來實現(xiàn)的,Tulyakov等人[10]就利用多實例學(xué)習(xí)(MIL)結(jié)合立體約束和關(guān)于場景的粗略信息,來訓(xùn)練立體匹配網(wǎng)絡(luò),而這些數(shù)據(jù)集并沒有可用的真實標(biāo)簽。 跟傳統(tǒng)的監(jiān)督技術(shù)不同,弱監(jiān)督訓(xùn)練并不需要成對的匹配和不匹配圖像塊。實際上,訓(xùn)練集是由N個三元組組成的。每個三元組包括:(1)從參考圖像上的水平線上提取的W個參考塊;(2)從右圖像對應(yīng)的水平線上提取的W個Patch,作者成為正Patch,它們跟W個參考塊有可能是匹配的;(3)從右圖像上另一個水平線上提取的W個負(fù)Patch,即與參考塊絕對不匹配的塊。這樣一來,我們就可以直接從立體圖像對中自動生成訓(xùn)練集,不需要手動進行標(biāo)注了。 在訓(xùn)練網(wǎng)絡(luò)時,研究人員使用了五個約束條件來引導(dǎo)學(xué)習(xí)過程:
對極約束:這個約束告訴我們,在左右圖像中的匹配點必須位于相應(yīng)的水平線上。
視差范圍約束:它告訴我們每個像素的視差值在一個已知的范圍內(nèi)。
唯一性約束:對于每個參考像素,只能有一個唯一的匹配像素。
連續(xù)性(平滑性)約束:表示物體表面的視差變化通常是平滑的,除非在物體邊界附近發(fā)生突變。
排序約束:指的是在左圖像上的參考點之間的順序應(yīng)該與在右圖像上的匹配點之間的順序一致。
根據(jù)這些約束條件,研究人員定義了三個損失函數(shù)來引導(dǎo)網(wǎng)絡(luò)學(xué)習(xí)。其中,多實例學(xué)習(xí)(MIL)損失使用了對極約束和視差范圍約束。收縮損失在MIL損失的基礎(chǔ)上增加了唯一性約束,使得匹配點更加準(zhǔn)確。收縮-DP損失則結(jié)合了所有約束條件,并利用動態(tài)規(guī)劃來尋找最佳匹配。 通過這種方法,網(wǎng)絡(luò)能夠根據(jù)這些約束條件進行學(xué)習(xí),從而在沒有充分標(biāo)注的數(shù)據(jù)集上實現(xiàn)立體匹配。
4. 思考和小結(jié)
在本文中,我們介紹了深度學(xué)習(xí)立體匹配方法的基礎(chǔ)網(wǎng)絡(luò)架構(gòu)和常見的網(wǎng)絡(luò)變種,以及訓(xùn)練策略。我們看到,在不同的應(yīng)用場景下,立體匹配問題需要不同的解決方案。為了應(yīng)對這些挑戰(zhàn),研究者們提出了各種改進和優(yōu)化方法,從網(wǎng)絡(luò)結(jié)構(gòu)到訓(xùn)練策略都進行了探索。其中我們列出了網(wǎng)絡(luò)結(jié)構(gòu)的各種變種
盡管深度學(xué)習(xí)立體匹配方法已經(jīng)取得了顯著的進展,但仍然存在一些問題需要進一步研究和解決。例如,對于大視差和大尺度Patch的處理、不同尺度輸入的靈活性、更高的效率等方面還有改進的空間。此外,如何將深度學(xué)習(xí)方法應(yīng)用于實際應(yīng)用中,也是需要進一步探索和研究的問題。 我們目前看到的方法,都是類似MC-CNN這樣遵循了傳統(tǒng)立體匹配架構(gòu)的方法。我會在下一篇文章開始介紹端到端的立體匹配算法,它們遵循完全不同的策略和邏輯,一定會給你帶來不一樣的感受! 下面是你現(xiàn)在的位置,喜歡今天的文章就點個贊,持續(xù)關(guān)注我吧!
學(xué)習(xí)進度地圖
審核編輯 :李倩
-
算法
+關(guān)注
關(guān)注
23文章
4588瀏覽量
92505 -
網(wǎng)絡(luò)結(jié)構(gòu)
+關(guān)注
關(guān)注
0文章
48瀏覽量
11059 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5466瀏覽量
120891
原文標(biāo)題:基于深度學(xué)習(xí)立體匹配的基本網(wǎng)絡(luò)結(jié)構(gòu)和變種
文章出處:【微信號:3D視覺工坊,微信公眾號:3D視覺工坊】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論