写在前面:
社区共建项目:AIGC算法工程师/开发工程师面试面经秘籍分享,Interview-for-Algorithm-Engineer,欢迎大家Star⭐收藏~
AIGC时代的 《三年面试五年模拟》AI算法工程师求职面试秘籍独家资源: 【三年面试五年模拟】AI算法工程师面试秘籍,欢迎 Star⭐收藏~,诚邀大家参与项目共建,聚力赋能 AIGC 行业生态建设!
AIGC算法岗/开发岗面试面经交流社群(涵盖AI Agent、AIGC图像创作、AI视频、LLM大模型、AI多模态、数字人、传统深度学习、具身智能等AIGC面试干货资源)一起交流学习。
本文内容摘自社区共建项目 :AIGC算法工程师面试面经
4.1.1 视频 vs 图像:视频建模到底多了什么?
本节先建立三层基础:视频相对图像新增了哪些变量,这些变量在 Tensor 中如何组织,以及模型怎样利用时间维。后续的运动表征、时序一致性与视频模型架构都建立在这三层之上。
4.1.1.1 面试问题:视频相对图像新增了哪些建模变量?为什么通常更难?
难度评分:⭐⭐⭐ (3/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)
视频相对图像新增了时间顺序与间隔、随时间持续或变化的状态,以及跨帧对应关系。单帧可以描述某一时刻有什么;视频还要利用前后观测,判断对象是否延续、状态如何变化、动作按什么顺序发生。无论是理解还是生成视频,这些关系都不能只从一帧中获得。
图1-1 视频不是多张独立图片,而是连续演化的状态
如图1-1,球经过方块时暂时被遮挡,随后重新出现。只看遮挡中的一帧,无法确定球的去向;结合前后帧,才能推断重新出现的球是否为同一对象、运动能否接上。把这些帧打乱,动作方向甚至事件含义也可能改变。因而,即使各帧单独看都清楚,主体在遮挡后突然变样,或位置变化与此前运动不衔接,视频仍不连贯。
跨帧对应也不能简单等同于匹配相似像素:画面变化可能来自对象运动或相机运动,对象还可能形变、被遮挡后再出现。模型需要利用时间线索维持对主体和场景的判断,并在可见信息变化时跟踪状态转移。这里讨论的是可观察的时序关系;画面连贯并不等于模型已经理解物理或因果机制。
时间维还带来计算和数据上的代价。若采样 T T T 帧、每帧大小为 H × W H \times W H×W,原始输入的时空规模为 T × H × W T \times H \times W T×H×W;逐帧切分得到的视觉 token 也会随帧数增多,但实际计算量取决于采样、压缩和跨帧交互方式,不能一概说成图像的 T T T 倍。
数据方面,不同采样间隔会改变模型观察到的运动幅度,压缩伪影会干扰画面,只有静态内容描述的文本也难以监督动作顺序。
因此,"视频通常更难"有比较前提:任务目标和单帧质量要求相近,并且任务确实需要利用时间关系。短而静止的视频未必比一张复杂图像更难。
面试速答:视频比图像多了帧序、时间间隔,以及对象和状态的跨帧延续。每帧单独看都对,不代表遮挡后主体还能接上、动作顺序仍然正确;更长的时空输入增加计算负担,采样不当还可能丢失动作信息。这是在可比任务条件下说视频通常更难的原因。
参考资料:Video Diffusion Models、ViViT
4.1.1.2 面试问题:视频 Tensor 如何组织?维度顺序为什么重要?
难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐ (4/5)
把一批视频帧送入模型时,常用五维 Tensor: B , T , C , H , W B, T, C, H, W B,T,C,H,W 或 B , C , T , H , W B, C, T, H, W B,C,T,H,W。 B B B 是批量大小, T T T 是采样帧数, C C C 是通道数, H H H、 W W W 是单帧的高和宽。这里讨论的是帧张量;视频经过编码后也可能表示为其他形状的特征或 token。维度顺序必须与接收它的算子约定一致,否则算子可能把时间轴当成通道轴,或者把本不相邻的帧当成同一段视频。

图1-2 两种视频 Tensor 布局与时间模块的关系
如图1-2, B , T , C , H , W B, T, C, H, W B,T,C,H,W 便于按时间索引取帧,也便于合并 B B B、 T T T 后交给二维图像主干;PyTorch Conv3d 则按 B , C , T , H , W B, C, T, H, W B,C,T,H,W 解释输入。两种写法可以通过 permute 变换,但换轴不会让模型自动学到时间关系。
轴的含义也不同于内存存放方式。PyTorch 的 channels_last_3d 改变内存步长,不会把 Conv3d 的逻辑输入形状改成 B , T , H , W , C B, T, H, W, C B,T,H,W,C。
更隐蔽的错误发生在合并、恢复维度时。设 B = 2 B=2 B=2、 T = 3 T=3 T=3,把视频展平为 B × T = 6 B \times T=6 B×T=6 帧,顺序应是"视频 0 的三帧,接着视频 1 的三帧"。二维主干可以分别处理这六帧;若还原时先把它们误当作 T , B , ... T,B,\\ldots T,B,...,再换轴得到 B , T , ... B,T,\\ldots B,T,...,最终形状仍是两段、每段三帧,内容却已交错。时间模块随后看到的"相邻帧"可能来自不同视频。只检查 shape 发现不了这种错误,可以给每帧附上视频编号和帧号,核对变换前后的对应关系。
如果输入还带有逐帧时间戳、位置索引或 padding mask,重排帧时也要同步重排或重建这些信息;帧率可以是每段视频的一项元数据,不必强行扩成 T T T 个值。
若使用 PyTorch,permute 后还要留意内存步长:view 要求新形状与原步长兼容,而 reshape 必要时可能复制数据。这是布局变换的实现细节,与模型是否建立跨帧依赖是两回事。
面试速答 :成批视频帧常用 B , T , C , H , W B,T,C,H,W B,T,C,H,W 或 B , C , T , H , W B,C,T,H,W B,C,T,H,W,顺序取决于算子怎样解释时间轴和通道轴。逐帧计算时可以合并 B B B、 T T T,但还原时必须让每段视频的帧、时间信息和 mask 一一对应;形状对了,帧序也可能已经串了。换轴本身不等于建模时间。
4.1.1.3 面试问题:逐帧处理与时空联合建模有什么区别?
难度评分:⭐⭐⭐ (3/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)
区别在于处理当前帧时,能否读取其他帧的信息 。设 x t x_t xt 是第 t t t 帧输入, h t h_t ht 是它的特征。逐帧阶段可写成 h t = f θ ( x t ) h_t=f_\theta(x_t) ht=fθ(xt);若建立了跨帧通路,则可写成 h t = F θ ( x 1 : T ) t h_t=F_\theta(x_{1:T})_t ht=Fθ(x1:T)t,表示 h t h_t ht 有可能随其他帧的变化而改变。共享参数或共享文本条件,并不等于帧与帧交换了信息。

图1-3 逐帧共享参数与跨帧信息交互的差异
1. 处理当前帧时,信息从哪里来
如图1-3,上方路径把 B B B、 T T T 合并,复用二维 CNN、图像 Transformer 或图像 VAE 提取各帧的外观特征。单帧识别或逐帧分割可以直接利用这些特征,也容易继承图像预训练能力;但仅靠这一阶段,模型不能根据其他帧的位置变化判断运动,也无法直接约束遮挡前后是否为同一对象。
下方路径则让不同时间位置交换信息:时间卷积或时间核大于 1 的 3D 卷积利用局部邻帧,时间注意力可以在其注意范围内读取其他帧。
不过,算子名称并不保证已建模时间:时间核为 1 的 3D 卷积仍按帧处理;注意力即使混合了多帧,若没有时间位置或因果掩码等顺序线索,也难以区分先后。跨帧通路只提供利用时序的可能,模型是否学到有效的运动关系还取决于训练数据和任务。
两条路径可以组合:先用二维主干提取外观,再在中间特征上加入时间模块,也是时空模型。Video Diffusion Models 采用空间与时间分解的网络;ViViT 同时讨论联合与分解式时空注意力。
这种组合便于复用图像主干,分解计算也有助于控制成本;时间模块能看到多远,仍受感受野或注意范围限制。架构允许读取其他帧之后,还要检查模型是否真的依赖这些信息。
2. 用受控扰动检查时间依赖
在推理模式下固定其他输入,只改动一帧,观察允许访问它的其他帧特征是否变化。这能检查跨帧通路是否影响了计算结果,但特征变化本身还不能证明模型学到了正确的运动关系。
若任务依赖动作顺序,还可打乱帧序;比较逐帧输出前,应先按帧编号对齐,不能把输出跟着输入换位误判为模型理解了顺序。打乱后结果不变,也可能是任务本身对顺序不敏感。关闭时间模块可作另一组对照,但输出变化同样只说明该路径产生了影响。
面试速答:逐帧处理时,当前帧只依据自身内容得到特征;时空建模让它通过时间卷积或注意力等路径读取其他帧,因此才有条件判断运动和状态延续。图像主干与时间模块可以组合使用,但有跨帧通路只是前提,能否辨别帧序、学好运动还要看顺序信息和训练。
参考资料:Attention Is All You Need
4.1.2 视频基本参数:帧、帧率、时长、分辨率、码率与采样
本节区分源视频参数、模型输入规格与采样策略。三者相互影响,但不能混为一谈:源视频有自己的帧率和码率,模型实际看到的是经过解码、缩放与时间采样后的帧序列。
4.1.2.1 面试问题:FPS、采样间隔和输入时长是什么关系?
难度评分:⭐⭐⭐ (3/5) | 考察频率:⭐⭐⭐⭐ (4/5)
FPS 是单位真实时间内的帧数。对恒定帧率视频,源帧率 f s r c f_{src} fsrc 对应的源帧时间间隔为 1 / f s r c 1/f_{src} 1/fsrc;模型看到的时间密度还取决于取帧方式。设相邻采样帧的源帧索引相差 s s s (每 s s s 个源帧取一帧),且保留原视频的时间坐标,那么采样间隔与采样帧率分别为
math
\Delta t_{sample}=\frac{s}{f_{src}},\qquad f_{sample}=\frac{f_{src}}{s}.
若输入 T T T 帧,首末两帧之间有 T − 1 T-1 T−1 个采样间隔,实际观察到的时间戳跨度为
math
\Delta t_{clip}=\frac{T-1}{f_{sample}}=\frac{(T-1)s}{f_{src}}.
例如,源视频为 30 FPS,每 3 个源帧取一帧,输入的时间采样密度就是 10 FPS;取 16 帧时,首末帧相隔 1.5 秒。若把每帧按 0.1 秒显示,播放时长才是 1.6 秒。前者描述模型覆盖了多少真实时间,后者还取决于怎样播放这些帧。
固定输入帧数 T T T 和单帧尺寸时,提高采样帧率会缩短时间覆盖范围,让相邻帧的位移更小,但输入规模并未增加;降低采样帧率能覆盖更长事件,也更可能漏掉短时动作,甚至使快速周期运动产生方向歧义。物体的真实速度没有因抽帧改变,改变的是模型看到的帧间位移。若固定真实覆盖时长,同时提高采样帧率,输入帧数才会增加,计算量也通常随之上升。
上述换算依赖等时间间隔。可变帧率、丢帧或不规则采样时,应读取采样帧的时间戳,用末帧减首帧求覆盖跨度;一个平均 FPS 无法说明每对相邻帧间隔。
训练与推理若采用不同时间采样密度,相同物理运动也会对应不同的帧间位移,应显式统一采样方式或提供时间信息。取源帧索引的固定步长与设定目标输出 FPS 也不是同一操作:FFmpeg 的 framestep 按源帧步长选帧,而 fps 会为目标恒定帧率按需丢帧或复制帧。
面试速答 :恒定帧率下,相邻采样帧若跨 s s s 个源帧索引,输入帧率就是 f s r c / s f_{src}/s fsrc/s, T T T 帧的首末时间跨度是 ( T − 1 ) s / f s r c (T-1)s/f_{src} (T−1)s/fsrc。固定 T T T 时,采得密能看清局部变化,但覆盖时间更短,输入帧数并不会增加;变帧率视频则应直接看时间戳。
4.1.2.2 面试问题:分辨率和码率有什么区别?它们如何影响训练数据?
难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐ (4/5)
分辨率是单帧的宽、高及其像素数量;这里的码率指视频流编码后单位时间使用的比特数,通常以 bit/s 表示,也常用一段视频的平均码率描述。前者说画面有多少像素位置,后者说编码这些画面用了多少数据。它们不能互相确定,也都不能单独代表画质:高分辨率视频可能原本就失焦,高码率重编码也无法找回此前压缩丢掉的细节。
两者进入训练管线后的作用见表1-1。
表1-1 分辨率与码率的作用边界
| 参数 | 描述对象 | 进入模型时的作用 | 单看这个参数无法判断什么 |
|---|---|---|---|
| 源视频分辨率 | 解码帧的宽、高与像素数量 | 决定可供裁剪、缩放的空间信息;不必等于最终输入尺寸 | 真实细节是否清楚、压缩损失有多大 |
| 视频码率 | 编码视频流单位时间使用的比特数 | 不成为 Tensor 的一个维度;有损编码可能改变解码后的像素 | 跨编码器、帧率和内容比较时,哪段视频画质更好 |
训练时通常先解码,再裁剪或缩放到模型要求的尺寸。假如一段 4K 视频和一段 720p 视频最终都被裁剪、缩放为 256 × 256 256\times256 256×256,它们的输入 Tensor 空间尺寸相同;采用同样的空间分块方式时,空间 token 数也相同。源分辨率的差别体现在预处理前可用的细节,而输入尺寸由预处理设定。PyTorch Resize 便是按指定目标尺寸产生输出的例子。
码率则通过编码后的画面影响训练。对同一段源视频,保持编码器和其他关键编码条件一致,提高分配的比特数通常能减轻有损压缩带来的失真;画质已接近源视频时,继续增加码率的收益可能很小。换了编码器、帧率、分辨率或画面内容,就不能只按码率给画质排序;快速运动和复杂纹理也会改变维持相近质量所需的数据量。编码器既可以按目标码率控制输出,也可以采用目标质量模式,二者不是同一个约束。FFmpeg 编码文档列出了相应的码率控制和恒定质量设置。
解码只把码流还原为像素帧,不会自动修复有损压缩造成的块效应、振铃或纹理涂抹;后续缩放可能减弱部分痕迹,也可能留下可见的失真。若某类标签或数据来源总对应特定的压缩风格,模型就可能把这些痕迹当作识别线索,生成模型也可能学着复现它们。
因此,筛选训练视频时,除了记录分辨率和码率,还应抽查解码并完成预处理后的画面;比较不同来源时,最好在相同输入尺寸下观察细节与压缩痕迹,而不是用单一元数据阈值代替画质判断。
面试速答:分辨率说的是单帧有多少像素,码率说的是编码视频流每秒用了多少比特。模型实际输入的空间尺寸看裁剪、缩放后的结果;码率不占一个输入维度,但有损压缩可能把失真留在像素里。同码率不等于同画质,筛选训练数据最终还要看解码后的画面。