效果评估

基准

本文档显示了我们做的实验和得到的结果。我们做了两个系列的实验。首先,我们在单个节点上进行了基于faiss的改进的Vearch ivfpq模型的召回率实验。其次,基于Vearch 集群进行了实验。

我们使用检索返回的k个候选值(k∈{1,10,100})是否包含最近邻的结果来计算召回,其中标签通过暴力搜索获得。

实验数据会因为实现、不同机器等的变化而略有变化。

数据集

实验分别在128维SIFT特征和512维VGG特征上进行。

数据集SIFT1M

可以从如下网址下载ANN_SIFT1M

http://corpus-texmex.irisa.fr/

数据集VGG1M 和 VGG10M

分别收集100万和1000万的图片数据提取VGG特征得到VGG1M (100万)和VGG10M(1000万),其中VGG1M 和VGG10M并不相关。

数据集VGG100M , VGG500M 和 VGG1B

另外收集了10亿图片数据来构建VGG100M(1亿) , VGG500M(5亿) 和 VGG1B(10亿)。

Nprobe 实验

实验分别在SIFT1M, VGG1M 和 VGG10M上进行。其中ncentroids =256,nbytes = 32,nprobe ∈{1,5,10,20,30,40,50,80,100,200}。图中数据为recall@1结果。

结果Architecture可以看到当nprobe超过25后,召回基本上没有明显的变化了。

Ncentroids 实验

实验在VGG10M进行。其中nprobe = 50,nbytes = 32, ncentroids∈{64,128,256,512,1024,2048,4096,8192} 。图中数据为recall@1结果。

结果Architecture可以看到召回基本不随ncentroids变化而变化,但是ncentroids越大,QPS越高。

Nbytes 实验

实验在VGG10M进行。其中nprobe = 50,ncentroids = 256, nbytes ∈{4,8,16,32,64}。图中数据为recall@1结果。

结果Architecture当nbytes越大,召回越高,当然QPS随之降低。

对比实验

实验在 SIFT1M, VGG1M 和 VGG10M 上进行,并与faiss中的一些模型进行对比。

模型参数

表格中参数为空,则对应模型不包含该参数。其中 links, efSearch 和 efConstruction 为 faiss 中的 hnsw 定义的参数。

modelncentroidsnprobebytes of SIFTbytes of VGGlinksefSearchefConstruction
pq | 3264
ivfpq |256203264
imipq2^(2*10)20483264
opq+pq 3264
hnsw 326440
ivfhnsw25620 326440
Vearch256203264

结果

SIFT1M的召回:

modelrecall@1recall@10recall@100
pq0.62740.98290.9999
ivfpq0.61670.97970.9960
imipq0.65950.97750.9841
opq+pq0.62500.98211.0000
hnsw0.97920.98670.9867
ivfhnsw0.98880.99610.9961
Vearch0.86490.97210.9722

VGG1M的召回 :

modelrecall@1recall@10recall@100
pq0.50790.89220.9930
ivfpq0.49850.87920.9704
imipq0.50770.86180.9248
opq+pq0.52130.91050.9975
hnsw0.94960.95500.9551
ivfhnsw0.96900.97440.9745
Vearch0.95360.95820.9585

VGG10M的召回 :

modelrecall@1recall@10recall@100
pq0.58420.89800.9888
ivfpq0.59130.88960.9748
imipq0.59250.88780.9570
opq+pq0.61260.91600.9944
hnsw0.88770.90690.9074
ivfhnsw0.96380.98390.9843
Vearch0.92720.94640.9468