faiss
個人理解:
https://github.com/facebookresearch/faiss 上把代碼clone下來,make編譯
我們將CNN中經過若干個卷積/激勵/池化層后得到的激活映射(向量形式)存儲到硬盤上,
Faiss是一個高效的相似性搜索和密集向量聚類的庫。它包含了搜索任意大小的向量集合的算法,這些算法可能不適合RAM。它還包含用於評估和參數優化的支持代碼。Faiss是用c++編寫的,帶有Python/numpy的完整包裝。一些最有用的算法是在GPU上實現的。它是由Facebook人工智能研究開發的。
稀疏向量:0和1表示的向量
密集向量:實數表示的向量
介紹
Faiss包含了幾種相似搜索的方法。它假設實例被表示為向量,並由一個整數來標識,並且向量可以與L2距離或點乘積進行比較。與查詢向量相似的向量是那些具有最低L2距離或與查詢向量有最高的點積的向量。它也支持余弦相似,因為這是標准化向量上的點積。
大多數的方法,像那些基於二進制矢量和壓縮量化碼的方法,僅僅使用矢量的壓縮表示,不需要保留原向量。這通常以不那么精確的搜索為代價,但這些方法可以在單個服務器上的主存中擴展到數十億個向量。
GPU實現可以接受CPU或GPU內存的輸入。在帶有GPU的服務器上,GPU索引可以使用drop-in替換CPU索引(例如,用GpuIndexFlatL2替換IndexFlatL2),並自動處理GPU內存的副本。但是如果輸入和輸出都駐留在GPU上,結果將會更快。支持單一和多gpu的使用。
建築
庫主要是在c++中實現的,通過CUDA提供可選的GPU支持,以及一個可選的Python接口。CPU版本需要一個BLAS庫。它使用Makefile編譯,並可以在docker映像中打包。看到安裝。
工作方式
Faiss是圍繞一個索引類型構建的,它存儲了一組向量,並提供了一個函數,用L2和/或點積向量比較來搜索它們。有些索引類型是簡單的基線,例如精確搜索。大多數可用的索引結構對應於各種各樣的權衡。
搜索時間
搜索質量
每個索引向量使用的內存。
培訓時間
非監督培訓需要外部數據。
可選的GPU實現提供了可能的(截至2017年3月)最快的精確和近似(壓縮域)最近鄰搜索實現的高維向量,最快的勞埃德的k-means,和最快的小k選擇算法已知。這里詳細介紹了實現。
完整的文檔做
以下為文件的入口點:
完整的文檔,包括教程,FAQ和故障排除部分可以在wiki頁面上找到。
doxygen文檔提供了每個類的信息。
為了復制我們的研究論文,多義代碼和十億級相似搜索與gpu,請參考基准的README。
加入社區
公開討論做或問題,有一個Facebook公開討論組在https://www.facebook.com/groups/faissusers/
我們監視存儲庫的問題頁面。你可以報告錯誤,提出問題,等等。
