这么多向量数据库,它们之间到底有哪些差异?

上篇说到chroma的近邻搜索算法实现得有问题,不如qdrant的。其实向量数据库之间看似都一样,但细细比较还是有很多不同的。

国外有一系列文章已经讲得很详细了,而且也就是半年前写的,还是具有很强的参考价值,文章如下:

Vector databases (1): What makes each one different? 

Vector databases (2): Understanding their internals

Vector databases (3): Not all indexes are created equal

Vector databases (4): Analyzing the trade-offs

里边有很多细节,不想细看的,我这里给几张图给大家快速了解不同向量数据库的差异。

存在时间

实现语言及是否开源

托管方法

索引方法

向量压缩的概念

向量一般是由浮点数组成,比如float32。一个float32 占4个字节,当向量维度很高且向量很多时,向量存储空间会比较大,查询起来也会比较慢。优化的一种方式是压缩向量,比如改成用一个byte的整数来表示原来的float32。这样每个维度就从4个字节变成一个字节,存储空间变小,查询也变快。当然,压缩会损失精度,可能会导致求向量相似度的时候有误差。向量压缩的过程叫量化(Quantization)

上图中的Flat 表示按向量的原始方式存储向量,没有压缩。压缩的方式有标量量化Scalar Quantization (SQ) 和 乘积量化 Product Quantization (PQ)。上边举的例子(float32 -> byte)就是标量量化。

更多细节,请见文章开头给的四篇文章,我就不一一赘述了。

Qdrant的向量压缩算法

qdrant有篇文章介绍它的向量压缩算法,详细可见:

https://qdrant.tech/documentation/guides/quantization/

上边是qdrant的各种量化方式及对应的准确率,速度和压缩比。qdrant还支持了一种二进制量化压缩算法,速度可以提升到原来的40倍,存储效率是原来的32倍,只损失5%的准确率,但只建议用在测试过的向量模型。

qdrant的压缩查询优化

查询的时候如果不想用量化,可以直接设置参数 ignore 为true关闭量化向量的使用。如果配置了量化配置,默认使用量化向量进行查询。

为了提高量化后的向量查询的准确率,qdrant还支持rescore参数和oversampling参数。

rescore就是用量化后的向量查询出top k后,再用原始向量去对比,找出最相似的。比如我要top 3,你找出后再对比也还是在这3个向量之前再排序,看上去没有什么作用?加上oversampling 参数就可以很大用处了。

oversampling 就是预先取多多少向量,再通过取原始向量计算并排序,返回最终真正需要的。比如top 3, oversampling是10,那就会按量化后的向量找出30个最相似的,然后按原始向量计算相似度再排序,返回这时算出来的top 3向量。

​真正去实践才发现细节很多,下场把手弄脏是学习最快的。

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 基于ORL数据库的人脸图像处理中,可以利用K-L变换和PCA方法进行特征降维和人脸识别。 K-L变换(Karhunen-Loève Transform)是一种线性变换方法,用于将原始图像转换为具有最大可分性的特征。首先,将ORL数据库中的人脸图像进行归一化处理,消除图像的尺度和亮度差异。然后,将每个人脸图像展开为一维向量,并构建图像样本矩阵。接下来,计算样本矩阵的协方差矩阵,并对其进行特征值分解。根据特征值的大小,选取前N个最大的特征值对应的特征向量作为K-L变换的投影向量。最后,将原始图像使用这些投影向量进行线性变换,即可得到特征脸向量。通过计算待识别图像与特征脸向量的欧氏距离,可以实现人脸识别。 PCA(Principal Component Analysis)是一种常用的降维方法,通过线性变换将高维特征映射到低维的子空间中。在利用PCA进行人脸识别时,首先进行数据预处理,将ORL数据库中的人脸图像归一化并展开为一维向量。然后,计算样本矩阵的均值向量,并将每个样本向量减去均值向量,得到零均值样本矩阵。接下来,计算零均值样本矩阵的协方差矩阵,然后对协方差矩阵进行特征值分解。根据特征值的大小,选取前N个最大的特征值对应的特征向量作为主成分,构建PCA的投影矩阵。最后,将原始图像用投影矩阵进行线性变换,得到降维后的特征向量。通过计算待识别图像与特征向量的欧氏距离,可以进行人脸识别。 总的来说,基于ORL数据库的人脸图像处理中,利用K-L变换和PCA方法可以进行特征降维和人脸识别。这些方法可以有效地提取人脸图像的主要特征,降低计算复杂度,提高人脸识别的准确率。 ### 回答2: 基于ORL数据库的KL变换和PCA方法是一种人脸识别的方法。ORL数据库是一个用于人脸识别的数据库,其中包含了40个人的400张正面灰度人脸图像。 KL变换(Karhunen-Loève Transform)是一种基于统计学原理的数据降维方法。它通过计算数据的协方差矩阵的特征向量来获得数据的主要成分。在人脸识别中,可以使用KL变换来降低人脸图像的维度,提取出最具有代表性的特征。 PCA方法(Principal Component Analysis)也是一种常用的降维方法。它通过计算数据的协方差矩阵和特征向量来找到数据的主要成分。在人脸识别中,可以使用PCA方法将图像从高维空间映射到低维空间,提取出最具有代表性的特征。 基于ORL数据库的KL变换和PCA方法的步骤如下: 1. 将ORL数据库中的人脸图像矩阵按列排成一个大矩阵,每个人脸图像作为一列。 2. 对大矩阵进行均值中心化处理,即减去每一列的平均值。 3. 计算大矩阵的协方差矩阵。 4. 对协方差矩阵进行特征值分解,得到特征值和特征向量。 5. 将特征向量按特征值大小从大到小排序。 6. 选择前N个特征向量,构成一个转换矩阵。 7. 将转换矩阵应用于原始图像,得到降维后的特征脸。 8. 将降维后的特征脸作为训练集用于人脸识别,可以使用k最近邻算法或其他分类方法进行人脸识别。 KL变换和PCA方法都是常用的人脸识别方法,它们能够从高维的图像空间中提取出最具有代表性的特征,有效地提高了人脸识别的准确率和效果。 ### 回答3: 基于ORL数据库,利用K-L变换和PCA方法可以实现人脸识别。首先,K-L变换是一种用于图像压缩和特征提取的数学方法,可以将原始图像转换为一组能够描述其特征的系数。PCA(Principal Component Analysis)是一种常用的统计学方法,可以将高维数据转换为低维数据,从而降低数据维度并提取出最具有代表性的特征。 在利用K-L变换和PCA进行人脸识别的流程中,首先利用ORL数据库中的训练图像进行训练。通过对所有训练图像进行K-L变换,将其转换为特征系数。然后使用PCA方法对特征系数进行降维处理,选择最具有代表性的主成分。这些主成分将构成人脸的特征空间。 接下来,对于待识别的人脸图像,同样进行K-L变换和PCA降维处理,得到其特征系数。然后,将待识别的特征系数与训练图像集中的特征系数进行比较,可采用欧氏距离或者余弦相似度等方式进行匹配度量。通过与训练图像的匹配度量结果,可以确定待识别图像属于数据库中的哪个人。 总结而言,基于ORL数据库,利用K-L变换和PCA方法能够实现人脸识别。通过训练图像的K-L变换和PCA降维处理,构建出人脸的特征空间。然后,将待识别图像的特征系数与训练图像集的特征系数进行匹配度量,从而实现人脸的分类与识别。这一方法在数字图像处理领域具有较高的应用价值,可以广泛应用于人脸识别、图像检索等方面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值