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

Vector Quantization

向量量化将每个向量替换为其最近码本条目的索引。介绍 k-means 码本、乘积量化和 VQ-VAE token。

向量量化(VQ)是一种压缩技术,它将数据集中的每个向量替换为一个小型代表向量集合(称为码本)中最近向量的索引。编码时只存储索引,解码时查找该索引,重建误差则是原始向量与其码字之间的距离。一个含 K 个条目的码本无论向量有多少维,每个向量都只需 log₂(K) 位,因此含 256 个条目的码本可以用一个字节存储任意向量。VQ 源自信号处理:Stuart Lloyd 于 1957 年在贝尔实验室提出了设计标量量化器的算法,并于 1982 年发表;如今该算法通常称为 k-means。Yoseph Linde、Andrés Buzo 和 Robert Gray 于 1980 年将其扩展到向量。在深度学习中,VQ 成为将图像、音频和视频转换为离散 token,以供生成式 AI 使用的标准方法。

向量量化的工作原理#

码本通常使用 k-means 聚类学习:将每个训练向量分配给最近的码字,将每个码字移到分配给它的向量的均值处,然后重复这一过程;该过程不会增加平均失真。通过对照片像素进行颜色量化,可以完整展示这一流程,下面使用 SciPy 的 scipy.cluster.vq 模块:

import numpy as np
from scipy.cluster.vq import kmeans2, vq
from sklearn.datasets import load_sample_image

image = load_sample_image("china.jpg")  # 427 x 640 RGB photo bundled with scikit-learn
pixels = image.reshape(-1, 3).astype(np.float64)  # one 3-D color vector per pixel

# Learn a 16-entry codebook with k-means (Lloyd's algorithm) on a sample of pixels
rng = np.random.default_rng(0)
codebook, _ = kmeans2(rng.choice(pixels, 5000), 16, minit="++", seed=0)

# Encode: replace each pixel with the index of its nearest codeword (4 bits instead of 24)
indices, _ = vq(pixels, codebook)
# Decode: look each index up in the codebook
reconstruction = codebook[indices]

rmse = np.sqrt(((pixels - reconstruction) ** 2).mean())
print(f"{len(pixels):,} pixels, {len(codebook)} codewords, 24 -> 4 bits per pixel")
print(f"Reconstruction RMSE: {rmse:.1f} on the 0-255 scale")

全部 273,280 个像素都以 4 位索引存储,对应 16 种颜色;与 24 位 RGB 相比,颜色数据减少了六倍,均方根误差为 11.3 个强度级别(满量程为 255)。

标量量化是一维情形,而模型量化则将其应用于神经网络。Ultralytics YOLO26在导出时会使用量化:quantize=8 将每个权重和激活值分别舍入到 256 个整数级别之一,并在一次校准过程中观察 data 中图像的激活值范围。联合量化整个向量可以利用维度之间的相关性;在相同比特率下,最优向量量化器的失真不会高于对每个值分别应用的最优标量量化器。

乘积量化与残差量化#

单一码本会随位数预算呈指数级增长,因为 64 位需要 2⁶⁴ 个码字。Hervé Jégou、Matthijs Douze 和 Cordelia Schmid 于 2011 年提出了乘积量化:将每个向量拆分成 m 个子向量,并分别用各自含 256 个条目的码本进行量化。当 m = 8 时,一个 128 维的 float32 嵌入向量会从 512 字节缩小到 8 字节,而查询距离则通过小型查找表计算得出。Meta 的 FAISS 库将它与倒排文件索引结合使用;倒排文件索引是一种粗略的 k-means 量化器,可将每次查询限制在少数几个聚类中,从而实现十亿规模的向量搜索。

残差量化则是逐层叠加码本:第二个码本量化第一个码本留下的误差,第三个码本量化第二个码本留下的误差,以此类推。Google 的 SoundStream(2021)和 Meta 的 EnCodec(2022)神经音频编解码器使用残差量化,将语音和音乐压缩到每秒几千比特;视觉自回归建模(VAR)则在不同图像分辨率上应用这种方法。

VQ-VAE 与图像词元#

DeepMind 的 Aäron van den Oord、Oriol Vinyals 和 Koray Kavukcuoglu 于 2017 年在神经离散表示学习中提出了 VQ-VAE。自编码器在每个空间位置的编码器输出都会被替换为最近的码字,解码器再根据这些码字重建输入。最近邻查找没有梯度,因此在反向传播过程中,直通估计器会将解码器的梯度直接传过查找步骤;在 PyTorch 中写作 z_q = z + (z_q - z).detach()。两个额外的损失项分别用于推动码字靠近编码器输出,以及约束编码器使用其选定的码字;论文中第二项的权重为 0.25。

生成的词元网格会输入第二个模型,通常是Transformer,由它学习生成这些词元。VQGAN(2021)加入了对抗式损失和感知损失,以生成更清晰的词元,并成为许多文生图模型使用的分词器。一个常见问题是码本坍塌:大多数码字从未被选中,导致有效词表缩小。使用 k-means 初始化、通过移动平均更新码本,以及重置未使用的码字,都有助于缓解这一问题。Google 于 2023 年提出的有限标量量化(FSQ)则通过将少数潜在维度分别舍入到几个固定级别来避免码本坍塌,这样隐含码本中的每个码字都能被访问到。

  • 向量数据库:存储并索引嵌入向量,通常还会在内部应用乘积量化,以便将向量装入内存。
  • 降维:将向量映射到更少的连续维度,例如 PCA;而 VQ 会将每个向量映射为一个离散码。
  • 分词:将文本拆分成固定词表中的单元;VQ 则为图像块和音频帧等连续信号构建对应的词表。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 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 的未来!

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