Ultralytics YOLO27: 加入候补名单。
获取 YOLO 许可
返回 Ultralytics 术语表

Vector Search

向量搜索通过精确 k-NN 或 HNSW 和 IVF 等近似索引,查找与查询向量最接近的已存储嵌入,从而快速搜索数百万条数据。

向量搜索会根据嵌入向量与查询嵌入向量之间的相似度度量,检索距离最近的项目;相似度度量可以是余弦相似度、点积或欧氏距离。嵌入模型会将含义或外观相似的项目放在彼此附近,因此最近的向量对应最相似的文档、图像或产品,即使它们与查询没有共同关键字也是如此。精确向量搜索会遍历所有已存储向量,执行一次k 近邻(k-NN)查找。在大规模场景中,系统会使用近似最近邻(ANN)索引,只将查询与一小部分向量进行比较,同时仍能返回几乎所有真正的近邻。

向量搜索的工作原理#

查询和已存储项目由同一个模型或共同训练的一对模型生成嵌入向量:文本使用句子编码器,文本与图像匹配使用 CLIP,图像与图像匹配使用视觉主干网络。度量方式应与模型的训练方式相匹配。对于单位长度向量,余弦相似度等于点积,按欧氏距离排序也会得到相同顺序。精确搜索对每个已存储向量执行一次比较,因此处理数万个向量很快,但处理数亿个向量就太慢;大型系统会使用以下四类 ANN 索引之一:

  • HNSW等图索引:在分层图中将每个向量连接到其近邻,并通过贪心遍历逐步靠近查询向量来作答。
  • 聚类索引(IVF):使用 k 均值对向量分组,只扫描质心与查询最接近的簇。
  • 向量量化:例如使用乘积量化,将每个向量压缩到几个字节,从而根据保存在内存中的紧凑编码近似计算距离。
  • 基于磁盘的图索引:像 DiskANN 那样将图索引保存在 SSD 上,以便在单台机器上搜索数十亿个向量。

IVF 索引的核心思路可以通过一个简短的 NumPy 和 scikit-learn 示例说明,并与精确搜索进行比较:

import numpy as np
from sklearn.cluster import KMeans

# 20,000 embeddings grouped by topic, normalized so a dot product is cosine similarity
rng = np.random.default_rng(0)
topics = rng.normal(size=(200, 64))
vectors = topics[rng.integers(200, size=20000)] + 0.5 * rng.normal(size=(20000, 64))
vectors /= np.linalg.norm(vectors, axis=1, keepdims=True)
query = vectors[0] + 0.1 * rng.normal(size=64)

# Exact search: score every stored vector
exact = np.argsort(-(vectors @ query))[:10]

# IVF index: cluster the vectors, then scan only the lists of the 5 closest centroids
kmeans = KMeans(n_clusters=100, n_init=1, random_state=0).fit(vectors)
probed = np.argsort(-(kmeans.cluster_centers_ @ query))[:5]
candidates = np.flatnonzero(np.isin(kmeans.labels_, probed))
approx = candidates[np.argsort(-(vectors[candidates] @ query))[:10]]

print(f"scanned {len(candidates) / len(vectors):.1%} of vectors")
print(f"recall@10: {len(set(exact) & set(approx)) / 10:.0%}")

探测 100 个簇中的 5 个簇会扫描 5.1% 的向量,同时找到全部 10 个真正的最近邻,召回率@10 为 100%。探测更多簇会同时提高召回率和成本,因此探测数量是 IVF 索引中最重要的调优设置。

  • 关键字搜索:在倒排索引中查找完全匹配的词项,并使用 BM25 等公式对结果排序。它擅长查找名称、代码和生僻词,但会漏掉同义词。
  • 语义搜索:按含义搜索,这是向量搜索最常见的用途。语义搜索系统通常还会在此基础上添加查询改写或重排器。
  • 混合搜索:同时运行关键字搜索和向量搜索,并合并两个排序列表。
  • 向量数据库:存储带有元数据的向量,并通过筛选、更新和持久化功能提供向量搜索的系统。

实际应用#

  • 检索增强生成(RAG):查找语言模型回答问题所需的文档段落。
  • 目标重识别:将人物或车辆的外观嵌入向量与此前的观测进行匹配,以便在不同摄像头之间关联同一目标。
  • 人脸识别:将人脸嵌入向量与已登记的人脸进行比较,并在最近的人脸足够接近时接受匹配结果。
  • 推荐系统:推荐嵌入向量与用户近期选择相近的产品、歌曲或视频。

Ultralytics Platform使用向量搜索来扩充训练数据集。其查找相似图像操作会选取一张图像,根据嵌入向量在公共数据集以及用户自己的数据集和团队数据集中搜索最近的图像,并显示最多 24 个匹配结果及其相似度分数;这些结果可以作为未标注的训练图像添加到数据集中。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 Ultralytics YOLO 如何通过球员和球追踪、表现分析、教练洞察及运动员康复,推动体育视觉技术的发展。
了解详情
航空影像计算机视觉

航空影像计算机视觉

使用 Ultralytics YOLO 将无人机和航空影像转化为农业、水产养殖、保护工作和地理空间分析的实时洞察。
了解详情
航空航天中的计算机视觉

航空航天中的计算机视觉

使用 Ultralytics YOLO 将计算机视觉应用于航空航天领域,包括飞机检查、跑道 FOD 检测、机场地面作业和复合材料缺陷检测。
了解详情
安防领域的计算机视觉

安防领域的计算机视觉

使用 Ultralytics YOLO 模型守护每个场所。视觉 AI 可用于周界监控、威胁检测、车牌识别和工作场所安全。
了解详情
机器人领域的计算机视觉

机器人领域的计算机视觉

使用 Ultralytics YOLO 模型提升智能机器的能力。机器人领域的视觉 AI 可用于自主导航、感知、目标跟踪和实时控制。
了解详情
物流中的计算机视觉

物流中的计算机视觉

借助 Ultralytics YOLO 模型优化物流流程。视觉 AI 可用于包裹检查、分拣、车辆跟踪和仓库安全实时监控。
了解详情
零售中的计算机视觉

零售中的计算机视觉

借助 Ultralytics YOLO 模型重新构想零售。视觉 AI 可用于库存跟踪、货架监控、排队管理和更深入的客户洞察。
了解详情
医疗领域的计算机视觉

医疗领域的计算机视觉

借助 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可加快医学影像处理、优化诊断并监测患者。
了解详情
制造业中的计算机视觉

制造业中的计算机视觉

利用 Ultralytics YOLO 模型优化制造流程。视觉 AI 可用于质量控制、缺陷检测、个人防护装备合规检查和装配线自动化。
了解详情
汽车领域的计算机视觉

汽车领域的计算机视觉

利用 Ultralytics YOLO 模型在汽车领域应用计算机视觉。视觉 AI 可提升道路安全、驾驶辅助和车辆自动化水平,让道路更智能。
了解详情
农业中的计算机视觉

农业中的计算机视觉

借助 Ultralytics YOLO 模型,将视觉 AI 引入智慧农业。为作物监测、牲畜追踪和精准农业提供支持,从而提高产量并实现更智能的生产。
了解详情

让我们携手构建 AI 的未来!

开启你的旅程,迎接机器学习的未来