Database-Design
儲存 128D 面部描述符以進行搜尋
我正在使用 dlib 庫在 python 中處理一些面部辨識腳本。dlib 接收一個面並返回一個 128 維元組,其中的浮點值表示面中關鍵點的值。為了確定兩個面是否相同,我將使用 128 個維度描述符併計算歐幾里得距離。如果它小於 0.6,它們可能是相同的。
那麼,問題是我應該如何儲存這 128 個浮點值,以便以後可以快速搜尋它們?
我不認為 sql db 會很好,因為數據並沒有真正的結構,並且 nosql db 獲得的速度會很有價值。
問題實際上是我似乎無法設計一種儲存數據的方法,以便您可以使用數據庫來過濾查詢。沒有
select * from faces where euclidean_distance({{ all 128 values }}) < .6
sooo…有什麼想法嗎?
只要可以檢索 128D 值並將其作為向量載入回,任何類型的儲存都可以工作。
歐幾里得距離是一個計算值。您將檢索數據庫中所有面孔的 128D 描述符。對於每個面,計算它與未知面之間的歐幾里得距離。
我認為您正在尋找的是
CUBE
儲存 128 維數的數據類型。我的建議是使用 PostgreSQL。PostgreSQL 支持CUBE數據類型和對歐幾里德距離計算的原生支持。
a <-> b Euclidean distance between a and b.
要支持 128 維,您必須從原始碼安裝 PostgreSQL,因為二進制安裝僅支持 100 維。我已經實現了相同的並在這里分享了細節