使用深度學習進行點雲匹配(五)

本文承接前一篇:使用深度學習進行點雲匹配四,今天要研究的是關於TDF的具體含義和如何訓練3D match描述子的方法。之前提到了使用3D match進行遷移學習的代碼,但是那個相當於利用已經訓練好的權重只進行了一次前向傳播,得出512維的描述子後進行匹配,那麼這些權重是如何訓練出的,這就是今天要探究的主題。

首先回顧一下TDF,之前提到的TDF我並沒有很深的理解,今天再次細讀論文,論文中的介紹是這樣的:For each interest point, we first extract a 3D volumetric representation for the local region surrounding it. Each 3D region is converted from its original representation (surface mesh, point cloud, or depth map) into a volumetric 30 × 30 × 30 voxel grid of Truncated Distance Function (TDF) values. Analogous to 2D pixel image patches, we refer to these TDF voxel grids as local 3D patches.In our experiments, these local 3D patches spatially span 0.3m3, where voxel size is 0.01m3. 翻譯一下就是:對於每個興趣點,我們首先提取一個圍繞它的局部區域的3D體積表示。每個3D區域從其原始表示(表面網格,點雲或深度圖)轉換爲截斷距離函數(TDF)值的體積30×30×30體素網格。類似於2D圖像塊,我們將這些TDF體素網格稱爲局部3D塊。在我們的實驗中,這些局部3D塊在空間上跨度爲0.3m3,其中體素尺寸爲0.01m3。這句話介紹十分詳細了,也就是我們以關鍵點爲中心選取了一個正方體,然後把這個正方體劃分爲許多小的正方體,這裏我有一個疑問,作者說大的正方體空間跨度是0.3m3,但我覺得不應該是體積表示,同樣小的正方體體積也不應該是0.01m3,因爲這樣的話得出的邊長都是無限小數,結合之前的代碼我認爲作者是這樣計算TDF值的,雖然只取了部分點作爲關鍵點,但是TDF網格是針對整個點雲圖來構建的,在知道了整個點雲圖的x,y,z方向上的範圍之後,作者據此構建了TDF網格,當我們選取關鍵點之後,我們便可以直接抽取關鍵點附近的30*30*30的正方體體素網格,也就是如論文中給出的圖片:

從圖中可以看出是關鍵點爲中心的一個正方體,雖然圖中是4*4*4的正方體,但是論文和代碼中使用的的確是30*30*30的正方體。那麼這裏面每一個小正方體的含義是什麼呢,其實我們仔細觀察每一個小正方體,我們知道關鍵點一定是在點雲表面的,但是小正方體則有三種可能,表面,遠離表面和在表面內,這很容易想到TSDF算法,這裏的TDF與此同理,只不過他把在表面內和遠離表面統一爲一種情形,這裏我們可以看一下論文中是怎麼介紹的:The TDF value of each voxel indicates the distance between the center of that voxel to the nearest 3D surface. These TDF values are truncated, normalized and then flipped to be between 1 (on surface) and 0 (far from surface). This form of 3D representation is cross-compatible with 3D meshes, point-clouds, and depth maps.Analogous to 2D RGB pixel matrices for color images, 3D TDF voxel grids also provide a natural volumetric encoding of 3D space that is suitable as input to a 3D ConvNet.翻譯過來是每個體素的TDF值表示該體素的中心與最近的3D表面之間的距離。這些TDF值被截斷,歸一化,然後翻轉到介於1(表面上)和0(遠離表面)之間。這種形式的3D表示與3D網格,點雲和深度圖交叉兼容。類似於用於彩色圖像的2D RGB像素矩陣,3D TDF體素網格還提供3D空間的自然體積編碼,其適合作爲3D ConvNet的輸入。也就是說每一個小的正方體都有一個值,含義代表它距離表面的距離,1就是在表面上,0代表無限遠離,0到1之間就是遠離的程度,那麼相當於每一個關鍵點附帶的TDF網格共有30*30*30=900個TDF值。

以上就是我對TDF的再次研究,我並不能確定我的想法是對的,因爲有一些代碼我看不懂,但是我認爲結合後面的做法,這種想法的確是一種可行的做法。那麼接下來我們就要提到這個TDF值到底如何可以進行訓練。

首先每一個關鍵點的TDF值(應該是900個)是作爲輸入的,那麼我們的標籤是什麼呢?我們知道做訓練的模型應該有一個真實的標籤y,以及有一個計算得出的標籤y‘, 對二者基於某種目標函數進行優化,纔可以達到訓練的目的。那麼作者關於數據集的標籤製作很簡單,通俗解釋就是他首先人爲標定了兩個點雲中的一些對應關鍵點,同時爲這些關鍵點又分別找了一個不對應的點,也就是對於一點,我們在另一個點雲中找了兩個點,一個是它的對應點,一個是非對應點,把這三個點同時輸入到網絡中進行訓練,有的人可能有疑問了,神經網絡的模型還可以有三個輸入嗎,當然可以,因爲這裏用到了一種網絡模型:Siamese network ,中文翻譯過來就是孿生神經網絡,什麼是孿生神經網絡?大家可以自行百度,這個並不複雜,簡單的解釋就是我們構建了兩個神經網絡,但是他們的權重可以是共享的(也可以不共享),也就是說我們其實只需要訓練其中一個網絡得到參數共享給另一個就行了,孿生網絡的作用是爲了衡量兩個輸入的相似度。但是要注意的是,作者這裏的孿生網絡還是有些不同的,它構建的兩個網絡我們拆開看的話是這樣的,一個網絡輸入兩個點雲中的兩個對應點,我們訓練的目的是讓他們的輸出越來越像就可以了,而另一個網絡我們則輸入的是兩個不對應的點,我們的目的是讓他們輸出的差距越來越大就可以了,比如我們的代碼中使用的是L2損失函數,我們可以看一下論文中的介紹:During training, our objective is to optimize the local descriptors generated by the ConvNet such that they are similar for 3D patches corresponding to the same point, and dissimilar otherwise.To this end, we train our ConvNet with two streams in a Siamese fashion where each stream independently computes a descriptor for a different local
3D patch.The first stream takes in the local 3D patch around a surface point p1, while the second stream takes in a second local 3D patch around a surface point p2. Both streams share the same architecture and underlying weights. We use the L2 norm as a similarity metric between descriptors, modeled during training with the contrastive loss function .This loss minimizes the L2 distance between descriptors of corresponding 3D point pairs (matches), while pulling apart the `2 distance between descriptors of noncorresponding 3D point pairs.During training, we feed the network with a balanced 1:1 ratio of matches to nonmatches. This strategy of balancing positives and negatives has shown to be effective for efficiently learning discriminative. 這段話很長,翻譯過來就是:在訓練期間,我們的目標是優化由ConvNet生成的局部描述子,使得它們對應於相同點的3D塊是相似的,否則是不相似的。爲此,我們以連體方式訓練我們的ConvNet有兩個流,每個流獨立計算不同局部3D塊的描述子。第一個流接收局部3D塊圍繞表面點p1,而第二流在表面點p2周圍接收第二個局部3D塊。兩個流有相同的網絡結構和基礎權重。我們使用L2範數作爲描述子之間的相似性度量,在訓練期間用對比損失函數建模。該損失使相應3D點對(匹配)的描述子之間的L2距離最小化,同時拉開非對應3D點對的描述子之間的距離。在訓練期間,我們爲網絡提供平衡的1:1匹配與不匹配的比率。這種平衡積極和消極的策略已經證明對於有效學習判別性的描述子是有效的。看到這裏不得不說作者的這種想法的確是很有創造性,將對應點的描述子的L2距離最小化,將非對應點的描述子的L2距離最大化,這一點在代碼中也有體現,比如我們查看training下的net.json文件,也就是訓練中的模型配置文件,可以看到每一層的輸入輸出都有match和nomatch,截圖舉例如下:

其實如果仔細思考這種思路,我們還有一點需要注意,那就是關於非對應點的問題,我們知道在兩個點雲中,一個點雲中的某個點在另一個點雲中只有一個點與它對應這是很好理解的,此外都是與它不對應的點,我們應該如何進行選取呢?我們不可能隨機選取,因爲萬一運氣不好選到了對應點就很糟糕了,關於這一點作者在論文3.1部分中也提到了:To obtain nonmatching pairs, we extract local 3D patches from randomly picked depth frames of two interest points (at least 0.1m apart) randomly sampled from the surface of the reconstruction.爲了獲得不匹配的對, 我們從隨機選取的兩個興趣點 (至少間隔0.1 米) 的深度幀中從重建表面隨機採樣的局部3d 塊中提取。也就是作者選取的非對應點與對應點至少距離0.1m。

最後我們再看一下坐着給出的siamese network架構圖,可以看出輸入是三個體素網格,對於中間的來說,上面的是他的對應點,下面的是選取的非對應點,把他們輸入到siamese network中,可以看到右邊的網絡框架,兩部分架構是相同的。對於最後輸出的描述子,使對應點的描述子的L2損失變小,使非對應點的L2損失變大,從而得出網絡的權重。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章