1. 程式人生 > >Get Out of My Lab: Large-scale, Real-Time Visual-Inertial Localization文章理解

Get Out of My Lab: Large-scale, Real-Time Visual-Inertial Localization文章理解

這篇文章是ETH提出的,後面在maplab中也把文章的部分思想整合進去了。這篇文章提出的全域性匹配效率和準確之高,甚至不需要local的匹配就能實現實時的定位。

文章一方面提出了濾波器中,定位的觀察量和VIO自己的觀察量之間的融合方法。另外提出了怎麼高效地和地圖做全域性匹配。這篇文章重點講後面這部分:

Descriptor Projection

binary的描述符比起float的描述符在計算描述符距離和描述符壓縮上面有優勢。但是在KD tree的搜尋方式中,因為維度太高,卻反而是劣勢。所以binary的描述符一般都使用暴力匹配。文章提出可以把高維的binary描述符投影到低維的浮點描述符。比如512維的binary描述符可以投影到10維的float描述符空間。

Product Quantization

10維的float描述符對KD tree搜尋仍然維度太高。所以作者把10維的向量分為兩個5維的向量,這樣形式上把10維向量變成了2維向量。新出現的5維的向量,通過k-means聚類成256個類。這樣表示一個描述符只需要知道這兩個5維向量對應的聚類後的類id。也就是描述符繼續壓縮成2byte。壓縮後的描述符對匹配上也有幫助。因為資料庫裡面的描述符是存的聚類的id。當我們要計算一個普通描述符和量化後的描述符的距離的時候。只需要計算普通描述符分成的兩個5維向量到目標量化後的描述符的類id的距離。我們一共只有256×2個聚類中心,所以當要知道一個普通描述符和資料庫中所有的量化描述符的距離的時候。可以提前把普通描述符到這256×2個聚類中心的距離算出來。後面計算距離的時候,就之需要加法運算了。

Inverted Multi-index

高維的描述符對於kd-tree方法維度太高。如果使用但存的Inverted Index方法(先聚類出多箇中心,找最近點的時候,先找到離query的描述符最近的那個中心,然後在把屬於這個中心的所有描述符和quary描述符做暴力匹配)。這種方法因為聚類中心會很多,所以一開始找最近的聚類中心也會非常費時。所以作者通過類似於Product Quantization的思路,先把描述符分給成等長度的部分。文章中把10維向量分為兩個5維的。然後通過kd-tree來找最近的聚類中心(2維空間中找),知道後再做暴力匹配。

Covisibility Filter

壓縮後的描述符的表達解析度肯定不如原始的高。所以之際使用描述符距離找到的匹配肯定有很多無匹配。這裡作者提出,一張圖片和所有描述符匹配的結果。大量錯誤的匹配會分散在不同的幀上面,也就是幾乎在所有幀上面都會找到匹配上的描述符。但正確的匹配會在被匹配上特別多的那些幀上。