空间实验 · 图片怎样变成视觉 token
九个图像小块,合成一条让语言主干读取的表示
图像进入视觉编码器后,每个图像小块(patch)的位置保存一条 1,024 维特征向量。模型把相邻九个位置合成一组,再用两层学得的变换生成一个 5,120 维视觉 token。下面用一张 84 × 84 像素照片和完整的五维教学数值,逐步看清对象、拼接和来源关系。
视觉 token 流程 · 0 / 5
教学输入 · 84 × 84 像素
第 2 行,第 2 列
像素行 15–28,列 15–28
一块 = 14 × 14 像素
照片实际缩为 84 × 84 像素后显示;每框是一块 14 × 14 像素的 patch。
照片:Fir0002/Flagstaffotos · GFDL 1.2,已缩放并作局部放大。
6 × 6 × 5 · 教学特征张量
拖动 / 方向键旋转 · 点击小格选择整条向量竖直深度确实表示向量的五个特征分量
第 2 行,第 2 列教学向量 · 5 维
真实对象:每位置一条 1,024 维向量
教学对象:每位置一条 5 维向量
五个有顺序的数合在一起,才是这个位置的一条向量。选中位置时,五个分量会一起高亮。
6 × 6 个位置,各有 5 个分量
教学张量共 180 个数
切片中的每格只是一个分量值;沿深度方向收齐五层,才得到一个位置的完整向量。
目的:收集同一 3 × 3 区域的九条位置向量,并按模型实际次序打包,接着生成一个视觉 token。
打包次序:先收齐九个位置的分量 1,再收齐分量 2,依次得到五段。
教学结构 9 × 5 = 45 维真实结构 9 × 1,024 = 9,216 维
九个位置为什么要合并?6 × 6 个位置按不重叠的 3 × 3 区域归组,最终得到 2 × 2 个视觉 token。点击任一输出格,可反向查看它来自照片中的哪九块。
当前:左上区域
九条编码后特征9 × [1,024]同一 3 × 3 区域
按特征分量打包[9,216]1,024 段,每段九个位置
用两层学得的变换调整内容和长度,这部分叫视觉 MLP
线性层 19,216 → 5,120W₁u + b₁
GELU5,120 → 5,120逐分量激活
线性层 25,120 → 5,120W₂g + b₂
W₁、W₂ 与偏置由训练学得,推理时固定
供语言主干读取2 × 2 个视觉 token每格都是一条 [5,120] 向量
当前结果先观察选中的九块:它们各自保存一条 1,024 维特征向量。
选择照片中的一块,再拉出它对应的完整教学向量。
真实尺寸、拼接顺序与来源
照片先按 14 × 14 像素切成图像小块。每块有 14 × 14 × 3 = 588 个 RGB 颜色数值,经可学习的线性投影进入 1,024 维视觉空间,再由视觉编码器结合整张图的信息更新。这里的五维教学向量是为解释张量结构而设的固定数值,不是从照片算出的特征,也不是实际向量的前五项。
每个分量段都按从上到下、从左到右的次序收集九个位置:
官方 vision.py 先把视觉网格从 [高, 宽, 特征] 调整为 [特征, 高, 宽],再用 PyTorch unfold 取 3 × 3 区域。因此 9,216 维输入按特征分量优先排列:第 1 个分量的九个空间位置在前,然后是第 2 个分量的九个位置,直到第 1,024 个分量。上面的 5 × 9 教学打包与这个顺序一致。
Aligner 在边缘不足时先补齐,再执行 Linear(9,216→5,120) → GELU → Linear(5,120→5,120)。输出与语言隐藏维度相同,可作为视觉 token 写入输入序列。真实视觉特征会融合其他位置的信息,因此“来自九块”描述的是重排时直接收集的九个位置,并不把特征的感受范围限制在这 42 × 42 像素内。
84 × 84 与 6 × 6 是缩小教学输入,不代表模型固定分辨率。尺寸依据:官方配置、官方 vision.py · Aligner 与 技术报告 §2.1.1。