时空Patch编码把视频切分为时空小块并嵌入向量,使Transformer能像处理文本token一样处理视频;它为视频生成与理解提供统一可扩展表征,是Sora等视频模型架构的基础设计。该技术路径的成熟度依赖算法创新、算力支撑与数据质量三者的协同提升与持续迭代。

学习提示

需要学习时空Patch编码,多模态是AI最前沿方向之一,跟踪最新论文和趋势是你的日常工作。本篇涵盖AGI/世界模型/脑机接口/前沿论文,帮助你跟踪AI前沿趋势。

目录
  1. 可视化演示
  2. AI 应用场景
  3. Python 演示
  4. 常见误区
  5. 面试题

可视化演示

时空Patch编码把视频切分为时空小块并嵌入向量,使Transformer能像处理文本token一样处理视频;它为视频生成与理解提供统一可扩展表征,是Sora等视频模型架构的基础设计。该技术路径的成熟度依赖算法创新、算力...

视频切块原理

想象你面前飞舞着一大堆零散的画面——那是一条奔流不息的时间之河,每秒24帧、60帧地从眼前流过。你要让一个只会"读纸条"的智能体理解这条河,第一步自然不是让它对着整条河发呆,而是把河水分成一个个方便拿取的"小冰块"。视频切块,就是这条流水线的起点。

在计算机眼里,视频从来不是"流动的",而是一大坨有厚度的"棉花糖"——一段3秒的1080p彩色视频,可以拆成90帧画面,每帧宽1920像素、高1080像素,每个像素有红绿蓝3个通道。这段"棉花糖"的数学名字叫四维张量(Tensor),四个维度分别记录时间、高度、宽度和颜色。

要用数学语言描述这坨"棉花糖",可以写成:

这个公式表示:整段视频是一个四维数据块,T是总帧数,H是每帧高度,W是每帧宽度,C是颜色通道数。

X∈RT×H×W×CX \in \mathbb{R}^{T \times H \times W \times C}
  1. 张量 X整段视频被建模为一个四维数据块。
    XX
  2. 时间维 T视频共有的画面帧数,比如2秒×24帧/秒=48帧。
    TT
  3. 空间维 H×W每帧画面的高度与宽度,单位是像素。
    H×WH \times W
  4. 通道维 C每个像素的颜色通道数,RGB视频的C=3。 把这团"时间之河"理解成一坨有规格的棉花糖后,我们便拥有了干净的切块原料。接下来的工作,就像乐高工厂里的第一道流水线——把整块大棉花糖安置到切割台上,准备切成标准积木。
    CC

时空Patch构建

乐高积木绝不是随意切出来的——每一块都有标准的宽度、高度和"厚度"。时空Patch同样讲究"三围":它不仅要有空间上的宽和高,还要有"时间上的厚度"。这正是它区别于普通图像Patch的关键:它是一块立体积木,而不是一张平面贴纸。

构建时空Patch时,我们需要定下三个关键的"积木尺寸":时间跨度\(p_t\)、空间高度\(p_h\)、空间宽度\(p_w\)。比如\(p_t=2\)表示一次包含两帧画面,\(p_h=16, p_w=16\)表示在每帧中取16×16像素的小方块。这样切出来的就是一个小长方体,称为"时空立方体"。

切块过程在数学上可以写成:

这个公式表示:从原始视频中取一个子块——时间跨度\(p_t\)帧,空间高度\(p_h\)像素、宽度\(p_w\)像素的小立方体。

Pt,h,w=X[t:t+pt,  h:h+ph,  w:w+pw]P_{t,h,w} = X[t : t+p_t,\; h : h+p_h,\; w : w+p_w]
  1. 索引语法方括号中的冒号表示沿该维度取一段连续区间。
    [t:t+pt,  h:h+ph,  w:w+pw][t : t+p_t, \; h : h+p_h, \; w : w+p_w]
  2. 时间切片从第t帧开始,连续取\(p_t\)帧组成时间跨度。
    t:t+ptt : t+p_t
  3. 空间切片在高度与宽度方向分别截取\(p_h\)和\(p_w\)像素区域。 一条完整的时间之河,就这样被冻成了整整齐齐的"时空乐高砖"。每块砖都自带"出生坐标"——它来自第几帧、第几行、第几列。这些坐标信息,就是后续一切智能理解的地基。
    h:h+ph,w:w+pwh : h+p_h, \quad w : w+p_w

展平与嵌入

积木块切好了,但乐高工厂还不能直接把它们丢给拼装机器人——机器人只认数字条码,不认塑料块。于是有了第三道工序:为每一块积木贴上专属的"二维码"。这道工序在AI里就叫"展平与嵌入"。

展平,就是把维度为\(p_t \times p_h \times p_w \times C\)的时空立方体"拉成"一根一维的像素向量;嵌入,则是用一个可学习的矩阵\(W_e\)把这根超长向量"压"成一个几百维的稠密向量。这一步把原始的、冗余的像素信息,转换成了供Transformer直接使用的紧凑语义表示。

数学表达式是:

公式含义:先把时空Patch展平为一维向量,再用线性矩阵\(W_e\)映射到嵌入空间,加上偏置\(b_e\),得到最终嵌入向量\(z\)。

zt,h,w=We⋅vec(Pt,h,w)+bez_{t,h,w} = W_e \cdot \mathrm{vec}(P_{t,h,w}) + b_e
  1. 展平操作把\(p_t \times p_h \times p_w \times C\)的立方体拉成一维列向量。
    vec(Pt,h,w)\mathrm{vec}(P_{t,h,w})
  2. 线性矩阵\(W_e\)是形状为"嵌入维×展平维"的可学习投影矩阵。
    We∈RD×(pt⋅ph⋅pw⋅C)W_e \in \mathbb{R}^{D \times (p_t \cdot p_h \cdot p_w \cdot C)}
  3. 偏置项\(b_e\)是每个嵌入维度上的可学习偏移量。 贴上"二维码"之后,每块时空积木都变成了一个有含义、有来处的数字记号。它在拼装机器人眼中不再是呆板的像素堆,而是一个携带视觉语义的"乐高数据块"——可以排序、可以检索、可以重组。
    zt,h,w=We⋅vec(Pt,h,w)+bez_{t,h,w} = W_e \cdot \mathrm{vec}(P_{t,h,w}) + b_e

Transformer适配

现在,整箱乐高积木都贴好了二维码。拼装机器人登场了——它就是Transformer。但这位机器人有个"怪癖":它只擅长读一维纸条,而且天生分不清谁先谁后。所以我们需要把所有嵌入向量排成一条长序列,并在每个向量上额外贴上"位置标签"。

位置编码就是这样一张"坐标便签",它告诉Transformer每个积木原本在第几帧、第几行、第几列。有了它,Transformer才能用自注意力机制(Self-Attention)"看见"任意两个积木之间的时空关联——无论它们隔着多远。自注意力的核心公式是:

这个公式描述的是:每个Token(时空Patch)通过查询向量Q去"搜寻"与所有Token的键向量K的匹配度,再用匹配度加权汇总所有Token携带的值向量V。

Attention(Q,K,V)=softmax(QKTdk)V\text{Attention}(Q,K,V) = \mathrm{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V
  1. 查询向量Q表示当前Token发出的"我关注什么"的请求。
    Q=XWQQ = XW_Q
  2. 键与值K是所有Token的"身份标签",V是所有Token的"携带内容"。
    K=XWK,V=XWVK = XW_K, \quad V = XW_V
  3. 缩放点积Q与K的点积除以\(\sqrt{d_k}\),防止数值过大导致梯度不稳定。
    QKTdk\frac{QK^T}{\sqrt{d_k}}
  4. Softmax加权归一化成权重后对V加权求和,得到注意力输出。 Transformer这位乐高大师,正是靠着这张"注意力网"把散落的时空积木重新拼出有意义的世界——左邻右舍的衔接、千里之外的回眸,全都被它尽收眼底。视频的空间布局与时间流动,在注意力机制中第一次被统一建模。
    softmax(QKTdk)V\mathrm{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V

Sora架构应用

Sora就像乐高总部里的传奇拼装大师。它手里握着一套庞大的"时空积木仓库",任何视频素材进库后,都要先被统一加工成标准时空Patch,才能进入它的创意工坊。

加工的起点是Video Compressor——一个类似视频压缩器的神经网络编码器。它先把高清视频切分成时空Patch,再进一步压成一个更紧凑的"潜空间"表示。Transformer不必直接面对海量像素,而只需在低维潜空间里做推理。这样既保住了关键语义,又大幅削减了计算量。

整个压缩编码流程可以表示为:

公式说明:视频\(V\)经Video Compressor编码后,得到一个时空尺寸更小、通道为\(d\)的潜空间特征张量\(z\)。

z=Compressor(V)∈RT′×H′×W′×dz = \mathrm{Compressor}(V) \in \mathbb{R}^{T' \times H' \times W' \times d}
  1. 压缩器Compressor是一个可学习的编码器网络,通常基于VAE或编码器-解码器结构。
    Compressor(V)\mathrm{Compressor}(V)
  2. 压缩后尺寸编码后的时间\(T'\)、高度\(H'\)、宽度\(W'\)都远小于原始尺寸。
    T′<T,H′<H,W′<WT' < T, \quad H' < H, \quad W' < W
  3. 嵌入维度每个时空位置的特征向量维度为\(d\)。 从"时间之河"到"时空积木",再到"压缩积木",Sora在大规模视频上学会了"看见一块积木就猜到下一块"的规律。当你输入一句话,它就按语义从积木库里挑选、拼接出全新的视频——这便是文生视频的魔法。
    RT′×H′×W′×d\mathbb{R}^{T' \times H' \times W' \times d}

工程权衡挑战

乐高积木有大有小:小积木拼出的模型更精细,但费时费力;大积木拼得快,却容易丢失细节。时空Patch的尺寸选择,正是这样一场"积木大小"的取舍战,而且这场战中的每一项代价都是实打实的算力。

Patch越小,信息越细腻,但Patch总数会爆炸,Transformer的计算量随序列长度呈平方级增长;Patch越大,计算越快,但空间细节和时间运动的刻画都会变粗。此外,视频分辨率越高、时长越长,Patch总数也随之膨胀,对显存和训练数据质量的要求同步上升。

Patch总数的计算方式如下:

公式含义:三个方向上的切块数量相乘,得到整段视频的时空Patch总数。

Npatch=⌊Tpt⌋×⌊Hph⌋×⌊Wpw⌋N_{\text{patch}} = \left\lfloor\frac{T}{p_t}\right\rfloor \times \left\lfloor\frac{H}{p_h}\right\rfloor \times \left\lfloor\frac{W}{p_w}\right\rfloor
  1. 时间方向块数总帧数T除以每块时间跨度\(p_t\)后向下取整。
    ⌊Tpt⌋\left\lfloor \frac{T}{p_t} \right\rfloor
  2. 空间方向块数高度、宽度方向各自除以Patch尺寸后取整。
    ⌊Hph⌋×⌊Wpw⌋\left\lfloor \frac{H}{p_h} \right\rfloor \times \left\lfloor \frac{W}{p_w} \right\rfloor
  3. 总积木数三个方向的块数相乘,就是全部时空Patch的个数。 选择多大的"时空乐高积木",从来不是拍脑袋决定的,而是在"拼得精致"与"拼得完"之间小心走钢丝。Sora团队正是靠这一套工程权衡,才让模型在算力可承受的前提下,展现出令人惊叹的涌现能力。
    Npatch=⌊Tpt⌋×⌊Hph⌋×⌊Wpw⌋N_{\text{patch}} = \left\lfloor\frac{T}{p_t}\right\rfloor \times \left\lfloor\frac{H}{p_h}\right\rfloor \times \left\lfloor\frac{W}{p_w}\right\rfloor

未来发展趋势

如果有一天,乐高积木能根据你要搭的城堡自动变形——需要精细的地方出小砖,空旷的地方出大砖——那会是什么景象?这正是时空Patch编码正在奔赴的未来。

当前固定尺寸的Patch(如2×16×16)效率还不够理想。学术界正探索动态Patch:让模型根据画面复杂度自动决定每块区域用多大尺寸。同时,Patch也在从"纯视觉"迈向"多模态",让文本、音频与视频共用同一套"积木语言"。最终目标,是让模型成为可交互的世界模拟器——而这一切的基础,仍是Patch数量与体积关系的持续优化:

公式说明:Patch总数N与视频体积成正比,与单块Patch的体积成反比——这就是一切效率优化的根本约束。

N∝T⋅H⋅Wpt⋅ph⋅pwN \propto \frac{T \cdot H \cdot W}{p_t \cdot p_h \cdot p_w}
  1. 正比关系Patch总数N与视频总帧数、总像素面积成正比。
    N∝T⋅H⋅WN \propto T \cdot H \cdot W
  2. 反比关系单块Patch的体积越大,需要的总块数越少。 可以预见,随着算法创新、算力支撑与数据质量三者的协同提升,这些"时空积木"会越来越聪明、越来越灵活。到那时,乐高大师不再只是复刻看过的东西,而是真正在脑海里构建出完整的世界模型——这,就是视频生成的星辰大海。 ---
    N∝1pt⋅ph⋅pwN \propto \frac{1}{p_t \cdot p_h \cdot p_w}

AI 应用场景

文生视频模型底层编码

阶段:视频生成模型的特征编码层

解决的问题:传统方法逐帧生成视频难以保证时间连贯性,且无法建立全局语义。时空Patch编码把视频变为统一token序列,让生成模型同时建模空间纹理与时间运动。

具体案例:用户输入"一只金毛在雪地里奔跑",Sora将Prompt用文本编码器转换为条件信号,再从海量视频学到的"时空积木词汇库"中采样排列,逐级去噪生成连贯的多帧画面。类似的架构也被用于可灵、Gen-2等视频生成产品。

相关角色:多模态算法工程师、视频生成研究员

视频理解与语义检索

阶段:视频预训练表征、下游检索/分类

解决的问题:传统帧级特征提取割裂了时间上下文,导致"视频里的人在跑"与"人静止时的草地"无法关联。时空Patch把整段视频编码成一组有序token,通过注意力交互形成全局视频表征。

具体案例:体育视频平台建立"动作检索"系统:将比赛录像切成时空Patch并嵌入,用户输入"第3分钟出现扣篮瞬间",系统在向量库中做相似度检索,毫秒级定位目标片段;安防监控也能用同样方法搜索"某人进入大厅后朝东走"的事件。

相关角色:视频理解算法工程师、多模态检索工程师

自动驾驶世界模型

阶段:未来场景预测、规划预训练

解决的问题:自动驾驶需要预测未来几秒的路况,传统方法依赖手工设计的轨迹预测器,难以覆盖开放场景。时空Patch编码让模型把感知画面转成可推演的token序列,学习"世界的物理规律"。

具体案例:车载模型将环视摄像头画面切成时空Patch,输入Transformer世界模型,模型预测下一秒其他车辆的位置与自身可行驶区域,为规划模块提供前瞻信息。Wayve、特斯拉等公司都在探索类似的视频世界模型方案。

相关角色:自动驾驶感知工程师、世界模型研究员

Python 演示

python63 行
import numpy as np  def patchify(video, pt=2, ph=16, pw=16):    ""“将视频切分为时空Patch并展平”""    T, H, W, C = video.shape    nt, nh, nw = T // pt, H // ph, W // pw    patches = []    for t in range(nt):        st = t * pt        for i in range(nh):            si = i * ph            for j in range(nw):                sj = j * pw                cuboid = video[st:st + pt, si:si + ph, sj:sj + pw, :]                patches.append(cuboid.flatten())    return np.array(patches)  def embed_patches(patches, embed_dim=64, seed=42):    ""“线性投影:把展平Patch映射到嵌入空间”""    rng = np.random.RandomState(seed)    d = patches.shape[1]    proj = rng.randn(d, embed_dim).astype(np.float32) * 0.02    bias = rng.randn(embed_dim).astype(np.float32) * 0.01    embeds = patches @ proj + bias    return embeds, proj, bias  def add_sinusoid_position(embeds):    ""“按Token顺序注入正弦位置编码(简化版)”""    N, D = embeds.shape    pos = np.arange(N).reshape(-1, 1).astype(np.float32)    dims = np.arange(D // 2).reshape(1, -1).astype(np.float32)    angle = pos / (10000.0 * (2  dims / D))    pe = np.concatenate([np.sin(angle), np.cos(angle)], axis=1)    if pe.shape[1] < D:        pe = np.concatenate([pe, np.zeros((N, D - pe.shape[1]))], axis=1)    return embeds + pe  def main():    T, H, W, C = 4, 64, 64, 3    rng = np.random.RandomState(0)    video = rng.rand(T, H, W, C).astype(np.float32)    pt, ph, pw = 2, 16, 16     patches = patchify(video, pt, ph, pw)    expect = (T // pt)  (H // ph)  (W // pw)    print(“Patch 数量:”, patches.shape[0])    print(“每个 Patch 展平后维度:”, patches.shape[1])    print(“期望数量:”, expect)     embeds, proj, bias = embed_patches(patches, embed_dim=32)    print(“嵌入向量形状:”, embeds.shape)     seq = add_sinusoid_position(embeds)    print(“注入位置编码后序列形状:”, seq.shape)    print(“Transformer 可处理的 token 数量:”, seq.shape[0])  if name == "main":    main()

常见误区

误区我以为时空Patch就是把视频每一帧都切成小图块,然后把所有帧的图块放在一起,本质上还是"图像Patch"的简单堆叠罢了。

正解空间切块只是第一步,时空Patch的关键在于"同时跨越时间与空间"。每个Patch不仅包含某一帧的16×16区域,还包含连续多帧(如2帧)的时间堆叠。它是一块"立体小积木",同时编码了"画面在哪里"和"动作发生了什么"。忽略时间维度,就像只看到乐高积木的正脸,忘了它有厚度。

为何常见:多数学习者先接触的是图像Patch(ViT),容易把视频Patch机械理解为"逐帧图像Patch的简单拼接",忽略了时间维度带来的本质变化。

误区细节都藏在像素里,那Patch是不是切得越小越精细、模型效果就越好?干脆1×1像素一个Patch算了。

正解Patch越小,Patch总数越大,Transformer的自注意力计算量呈平方级增长,训练成本不可承受;而且过小的Patch会让局部噪声过多,反而干扰全局建模。Patch尺寸本质上是"粒度与效率"的折中——像乐高砖一样,既要保留足够细节,又要足够大才能快速拼完。

为何常见:人们直觉上认为"信息保留越多越好",却忽略了计算复杂度的爆炸式增长和过拟合风险。

误区Transformer不是有注意力机制吗?它应该能自己"看"出Patch之间的位置关系吧?那位置编码是不是可加可不加?

正解自注意力计算时默认把所有Token视作"平级且无序"的。如果不加位置编码,把视频的帧顺序打乱、把空间子块交换位置,模型完全无感,因为它根本不知道谁在谁旁边。位置编码就是乐高积木上的坐标编号——没有它,积木就会"方向感全失"。

为何常见:注意力的"关注任意位置"能力容易被误解为"自动知道任意位置",初学者常把注意力机制与位置感知混为一谈。

误区时空Patch编码是Sora这种视频生成模型才会用到的东西,做视频理解、检索、安防监控的任务根本用不上。

正解时空Patch统一了"理解"与"生成"的表征方式。视频理解模型同样可以把视频切成时空Patch,再交给Transformer做分类、时序动作识别、视频问答。OpenAI把"统一表征"作为Sora架构的基石,正是为了让同一套特征同时服务理解与生成两类任务。

为何常见:媒体宣传大多聚焦"文生视频"的惊艳效果,导致公众把时空Patch只与生成模型绑定,忽略了它对理解任务的普适价值。 ---

面试题

Q1. 时空Patch编码最核心的目标是什么?

单选题 · easy

  • A.将视频压缩成单个张量向量
  • B.将视频切块并按序嵌入← 正确答案
  • C.抽取视频中的音频特征
  • D.提高视频的分辨率

答案:B。时空Patch编码的目标是把视频切分成带时间跨度的空间小块,并按顺序嵌入向量序列——相当于把"视频乐高颗粒"变成Transformer可读的token纸条。A只讲压缩不全面,C与视觉无关,D是画质增强任务,都不是核心目标。

Q2. 时空Patch与图像Patch相比,最本质的区别是什么?

单选题 · mid

  • A.它额外增加了时间维度← 正确答案
  • B.它的颜色通道数量更多
  • C.它的空间像素尺寸更小
  • D.它完全不需要位置编码

答案:A。时空Patch多了"时间跨度"这一维,就像乐高砖有了厚度,同时编码画面内容和运动信息。B错误,通道数通常都是RGB三通道;C错误,Patch尺寸是超参数,和图像Patch没有必然大小关系;D错误,位置编码依然必要。

Q3. 为什么需要在时空Patch嵌入后加入位置编码?

多选题 · mid

  • A.Transformer缺乏天然顺序感知← 正确答案
  • B.帮助模型保留时空相对位置← 正确答案
  • C.位置编码可显著压缩数据量
  • D.位置编码能直接替代注意力

答案:AB。Transformer的自注意力计算把Token看作无序集合,位置编码就像给每块乐高贴上"第几排第几列第几帧"的标签,让模型知道时空顺序。C错误,位置编码不负责压缩数据;D错误,位置编码只是辅助信息,不能替代注意力机制。

Q4. 在Sora架构中,Video Compressor的主要作用是什么?

单选题 · mid

  • A.将视频转为紧凑的潜空间表示← 正确答案
  • B.放大视频的空间分辨率
  • C.自动生成视频的字幕文本
  • D.识别视频中的物体类别

答案:A。Video Compressor把高清视频切成时空Patch后,压缩成低维潜空间表示,让Transformer在这个紧凑空间里高效处理——类似于把大积木压成迷你积木再拼装。B是超分任务,C是字幕生成,D是识别任务,都不是压缩器的工作。

Q5. 假设Patch边长不变,视频从1080p升级为4K分辨率,Patch总数大约如何变化?

单选题 · hard

  • A.数量保持不变
  • B.数量减少约一半
  • C.数量增加约四倍← 正确答案
  • D.数量增加约十六倍

答案:C。Patch数量与像素面积成正比。4K是3840×2160,1080p是1920×1080,面积比为4倍,因此Patch总数约变为原来的4倍。C正确。注意不要误选D——十六倍是把两条边都算成4倍再相乘的常见直觉错误,但这里边长比本来就是2倍,面积比是4倍。

Q6. 时空Patch编码在实际工程中面临哪些挑战?

多选题 · hard

  • A.自注意力计算量随序列平方增长← 正确答案
  • B.高清长视频的Patch数量庞大← 正确答案
  • C.无法应用于视频理解任务
  • D.对海量高质量数据的需求← 正确答案

答案:ABD。Patch越多,Transformer序列越长,自注意力计算量按序列长度平方上升;高分辨率长视频的Patch数量天然爆炸;高质量视频数据也是训练效果的关键瓶颈。C错误——时空Patch编码恰恰同时服务于视频理解与生成任务。

Q7. 关于时空Patch的尺寸设计,正确的认识是什么?

单选题 · easy

  • A.需要匹配视频的宽高比例
  • B.权衡信息粒度与计算开销← 正确答案
  • C.必须使用等宽等高的方块
  • D.只取决于颜色通道的数量

答案:B。Patch尺寸是超参数,设计时要权衡"细节保真度"与"计算成本"——小Patch精细但数量爆炸,大Patch高效但丢失细节。这就像选乐高砖的大小。A、C、D都是对Patch尺寸的错误约束,并非硬性规则。

Q8. 当Transformer处理视频时,每个时空Patch扮演什么角色?

单选题 · mid

  • A.相当于文本模型中的一个Token← 正确答案
  • B.作为卷积计算时的卷积核
  • C.作为激活函数使用的输入← 正确答案
  • D.作为损失函数的权重项
  • E.前向计算成本显著上升
  • F.模型拟合能力明显下降
  • G.表达能力增强但收敛更慢
  • H.位置编码信息完全失效

答案:AC。嵌入维度增大,矩阵乘法的计算量随之上升;更大维度带来更强表达能力,但参数量更多、优化更难,收敛变慢。B错误——维度增加通常会提升而非降低拟合能力;D错误——位置编码与嵌入维度是两个独立模块,维度翻倍不会让位置信息失效。

Q9. 时空Patch编码中的"时空"指的是什么?

单选题 · easy

  • A.空间维度与时间维度的组合← 正确答案
  • B.仅仅指空间的分辨率
  • C.仅仅指时间的帧率
  • D.指色彩空间的转换

答案:A。"时空"是"空间+时间"的合称:空间指画面的高和宽,时间指视频帧的前后顺序。每个Patch既覆盖画面中的一块区域,又跨越若干帧的时间跨度,这正是它区别于普通图像Patch的本质。