#ICCV2019論文閱讀#Fully_convolutional_geometric_features


一 知識背景

3D scan&cloud points(點雲)patch-based features,fully convolutional network, deep metric learning, sparse tensors,sparse convolutions, hard negetive-mining, contrastive loss, triplet loss, batch normalization...

1.cloud points(點雲)

  “在逆向工程中通過測量儀器得到的產品外觀表面的點數據集合也稱之為點雲,通常使用三維坐標測量機所得到的點數量比較少,點與點的間距也比較大,叫稀疏點雲;而使用三維激光掃描儀或照相式掃描儀得到的點雲,點數量比較大並且比較密集,叫密集點雲,

點雲是在和目標表面特性的海量點集合。根據激光測量原理得到的點雲,包括三維坐標(XYZ)和激光反射強度(Intensity)。根據攝影測量原理得到的點雲,包括三維坐標(XYZ)和顏色信息(RGB)。
結合激光測量和攝影測量原理得到點雲,包括三維坐標(XYZ)、激光反射強度(Intensity)和顏色信息(RGB)。在獲取物體表面每個采樣點的空間坐標后,得到的是一個點的集合,稱之為“點雲”(Point Cloud)。點雲的格式:; *.pts; *.asc ; *.dat; *.stl ;*.imw;*.xyz;。”
-----from 百度百科。
2.patch-based features
即基於一塊數據的特征。
3.fully convolutional networks
具體可參見Long[2014]年的論文 FCN,還可參見這篇博客 CSDN_Blog。簡單的說,Long等人將傳統CNN網絡如AlexNet, VGGNet的后幾個全連接層全部改裝成卷積層,因為Long提到全連接層可以看作卷積核覆蓋整個輸入的卷積(”these fully connected layers can also be viewed as convolutions with kernels that cover their entire input regions."),這種轉換非常有效的提升了計算效率,因為它不必重復的計算重疊的patch上的卷積。
4 deep metric learning(深度度量學習
如何有效的度量物體間的相似性?如果通過使用深度學習的方法去學習到這種度量的策略即是deep metric learning。現有的依賴對比(contrastive loss)和三元組損失(triplet loss),由於正負樣本可組合的數量極多,因此人們多采用僅對訓練有意義的正負樣本采樣,也被稱為“難例挖掘”(hard negative mining)。可參考 這篇綜述。綜述里包括了對 hard negetive-mining, contrastive loss, triplet loss的解釋說明。
5.hard negative mining(難例挖掘)
參見此知乎回答。大量的簡單負例會使真正的對訓練有意義的難例的梯度被“淹沒”。難例挖掘就是在訓練時,盡量多挖掘其難負例加入負樣本集,這樣比easy negative組成的負樣本集更好。[具體的R-CNN中的hard negative mining]。
6.sparse tensors和作者定義的generalized(廣義)sparse convolution
在作者的工作中的3D data是對物體表面的3D掃描。在這樣的3D空間中,大部分的空間是empty的。為了解決這種高維的稀疏矩陣,論文作者用sparse tensor,一個sparse tensor可以用一個矩陣Matrix去表示其坐標,另一個矩陣'向量'代表其特征(Features):

 

 

接着作者定義了廣義的稀疏卷積。系數卷積不是第一次出現,作者在這里只是描述。不過作者這種定義方法確實不容易理解,我的意思是所用的數學公式。如圖所示。

 

 

 在稀疏的卷積中和權值${W}$相乘的${x}$必須在${C}$中,這樣的系數卷積得到的也是一個稀疏的結果。文中的${V^(3){-1,0,1}}$我覺得其中的元素不必是固定的${{-1,0,1}}$,如果非要是這樣,卷積(相關)就無法計算了(這也是我在閱讀時遇到的困惑)。當然最主要的還是要在code中去實現這個系數卷積。[接下來的時間我會探索一下]。

文章正文:

從3D掃描或者是點雲上提取幾何特征是許多工作的第一步。例如注冊(registration),重建(reconstruction)和跟蹤(tracking)。現今的(state of art)方法需要將低階(low-level)的特征作為輸入來計算。

“低層次特征提取算法基於興趣點所在表面及臨近點的空間分布,提取基本的二維、三維幾何屬性作為興趣點特征信息,如線性、平面性等。低層次特征提取算法復雜度低、運算效率高、內存消耗少,但領域尺寸的選擇對識別效果影響較大。”

 “高層次特征提取算法基於低層次幾何特征及臨近點空間分布,定義並計算更復雜的幾何屬性作為特征信息。根據幾何屬性的定義又可細分為基於顯著性、基於直方圖、基於顯著性直方圖與基於其他特征的四大類提取算法[1][2]。”

 或者是基於有限感知域的塊特征。在該文章中作者提出了有3D全卷積網絡計算得來的一種全卷積的幾何特征。同時作者提出了一個metric learning 的損失函數,這個損失函數極大的提高了算法的性能。
接着作者吹捧了一波自己的全卷積幾何特征,說這種特征是很緊湊(compact),然后能結合很大的空間的上下文的信息,而且能夠拓展到很大的場景(scenes)。接着說這種特征不需要預處理(preprocessing),在室內和室外的數據集上比之前最精確的方法快290倍,而且自己的特征維數只有32維哦~
給張圖感受下全卷積特征的“統治力”:

 

 這里說明下指標:recall 中文叫查全率又叫召回率,其計算公式如下:

$recal{l_c} = \frac{{T{P_c}}}{{T{P_c} + F{N_c}}}$

意思是某一類判斷正確占到該類總數的百分比。理所當然的想要提升recall可以遵循“寧可錯殺一百,不可放過一人”的思想。嘿嘿~

接着我們給出作者用的網絡框架:

 

 這是一個ResUNet的架構,兩個白框是輸入輸出層,每個塊用三個參數來描述:kernel size, stride, channel dimensionality.(核大小,步幅,和通道維度)除了最后一層其他的卷積層后面都有Batch normalization然后跟一個非線性(Relu).

那說了半天啥是全卷積特征啊?

 

 全卷積特征作者說了:

 

 我給你翻譯翻譯:

全卷積網絡純粹的由具有平移不變性的操作組成,像卷積和元素級別的非線性。(我不懂啥是元素級別的非線性啊?)同樣,我們吧稀疏卷積網絡(注這里是因為他用的稀疏卷積所以將這個網絡將spase convolution network)給一個稀疏的tensor用上,我們得到的也是個稀疏的tensor,我們把這個稀疏的tensor輸出叫做全卷積特征。

OK。

重頭戲來了,嘿嘿~

作者自己說自己搞了個新的Metric learning的新的損失函數。在看他的新家伙式兒之前,我們不妨回顧下他站在誰的肩膀上搞了個大新聞。。

在前面的背景知識里有提到,就是negative mining 和標准的metric learning 的損失函數。這個作者說自己用全卷積網絡了搞了個metric learning,而且還把negative mining整合到對比損失函數和三元組損失函數里了,他自己把整合后的這個新的損失函數叫做“Hardest contrastive"和”hardest-triplet"

網絡:“我太難了(哭腔)"。

好言歸正傳,想要搞metric learning必須遵循兩個約束,一個是類似的特征必須和彼此之間挨的足夠近,對於分類來說,肯定是越近越好,那么有

$D({{f}_{i}},{{f}_{j}})\to 0\forall (i,j)\in P$

啥意思?${P}$是正確配對feature-match成功的特征,${(i,j)}$是其中的一個組合。相反的不相似的特征必然挨的越遠越好,那我們就給他一個警戒線稱之為margin(注:margin在英語里由差距,差額之意)用數學來說就是

$D({{f}_{i}},{{f}_{j}})>m\forall (i,j)\in N$

這里的${D}$是一種距離的衡量手段,原文沒說啥距離,我覺得應該可以用歐氏距離。

文章說Lin等人說這些對於正例的約束會導致網絡過擬合,然后搞出個針對正例的基於margin的損失函數。式子里右下角的+號代表着大於0時就取這個值,否則就取0。說實話,我因為一直吧這里邊的${I_{ij}}$當是個示性函數,以為根據后邊中括號里邊的東西來取值,一直沒搞懂,后來偶來見發現tm這兩貨是分開的。我真想吐槽這作者。。

作者的對正例加了個margin的約束后,可以解決網絡過擬合的現像。

接着又弄個三元組(triplet loss)損失,我一並給出原文,瞅瞅:

 在許多的文獻了這篇文章后邊也用了,這(4)里邊的這個${f}$叫做anchor(中文名叫錨)而${f_+}$代表正例里邊的元素。帶負號的就不難說了。

在negative mining里邊就說了,網絡的性能會被小部分”人"左右,是誰呢?就是那些對於網絡來說非常難啃的硬骨頭——“hardest negatives"

接着作者討論一個容易被人忽視,但卻至關重要的存在:全卷積特征的特性

傳統的Metric learning 認為特征是獨立同分布的(iid),為啥?作者說了:

 

因為batch是隨機采樣來的。

這里需要和大家回顧下啥是epoch,batch,iteration

  • epoch:代表在整個數據集上的一次迭代(所有一切都包含在訓練模型中);
  • batch:是指當我們無法一次性將整個數據集輸入神經網絡時,將數據集分割成的一些更小的數據集批次;
  • iteration:是指運行一個 epoch 所需的 batch 數。舉個例子,如果我們的數據集包含 10000 張圖像,批大小(batch_size)是 200,則一個 epoch 就包含 50 次迭代(10000 除以 200)。

雖說基礎,但也要溫故而知新嘛~

然而,然而...

在全卷積特征的提取過程中,相鄰特征的位置是相關的。

------------------------------------

今天接着寫。

昨天夜里回去到b站上一個講點雲的視頻,挺有收獲的,地址貼出來

----------------------------------------------

因為全卷積特征的這個相近的特征之間有局部的關聯,所以在難例挖掘的時候could(這個翻譯成能還是可能?)找到和錨點相近的偽負例(false negatives)[反正我不懂],所以說去除這些個偽負例至關重要。在作者之前的paper里使用了一個distance來約束。

並且作者提到全卷積網絡得到的特征比標准尺度學習算法得到的要多幾個數量級,全卷積幾何特征是~40k個特征僅僅對一對兒掃描(而且這還與batch-size成比例的增加)。

接下來討論作者的hardest-contrastive和hardest-triplet losses

首先采樣一系列的錨點和一個挖掘每個場景的集合。看看原文:

 

 

 

 

 這里看看作者是怎么將難例挖掘整合到對比損失里的:

${P}$是一個minibatch經過全卷積網絡提取出來的全部正例,${N}$是一個隨機的由該網絡卷積得出的特征的一個子集,該子集將會被用來進行難例挖掘。

 

 

 

 

${I_i}$是一個indicator function,是${I(i,k_{i},d_{t})}$的簡寫。當特征${f_{k_{i}}}$位於以特征${f_i}$為圓心,直徑為${d_t}$的球面外時,為1,反之為0。其中${k_i}$滿足:${{k}_{i}}=\arg {{\min }_{k\in N}}D({{f}_{i}},{{f}_{k}})$。

也就是說${{f}_{ki}}$是所有負例里最靠近該正例的。而\[\left| {{P}_{i}} \right|=\sum\nolimits_{(i,j)\in P}{I(i,{{k}_{i}},{{d}_{t}})}\]

表示針對特征$f_i}$的所有合法的負例的個數。可以類推。${{\lambda }_{n}}$是一個權重,將其設置成0.5.這里的${d_t}$就是上文提到的為了除去偽負例而設置的threshold。

類似的我們可以得到triplet loss:

 

上式確實找到了對於組合${(i,j)}$最難的負例,但是但是這最強的負例卻容易collapse。

這里:不用平方損失可以防止特征collapse到一個點。作者的點子又把就是hardest的和隨機抽樣的triplets都同樣的使用的方法加上。

至於具體的代碼及實現環節可以去參考paper的原文,及作者的github。

算法的思想到這里就結束了。

這篇paper的兩個spotlight:

1.全連接提取特征,拜托了之前的patch-based

2.對metric learning的兩個損失函數contrstive 和triplet loss 做了改進。

===================

 

 


免責聲明!

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



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