地平线算法一面面经(卷积/ViT/蒸馏/插帧)
- 轮次
- 一面
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 卷积处理图像的优点是什么?卷积如何捕获图像细节?
- 是否了解 ViT?
- 在模型里引入深度信息的目的是什么?
- 使用的是哪个开源深度编码器?
- 深度信息如何接入模型?是模型自己预测深度,还是用外部模型的深度输出作为通道输入?
- 如果让模型自己预测深度信息,会带来什么效果?
- 怎么验证模型确实使用了输入的深度信息,而不是直接忽略该通道?
- RGB-D 蒸馏:用作 teacher 的大模型是什么?蒸馏 loss 如何计算,是哪两者之间做 MSE loss?
- 除结果蒸馏外还有哪些蒸馏方式?
- 做中间特征蒸馏时,如何选择网络哪些层用来做蒸馏监督?多层同时加 loss 会带来什么问题?
- 蒸馏之后模型效果不好,如何排查与优化?
- 视频插帧场景有没有考虑用强化学习 RL 做后训练?
- 遇到插值 bad case、运动物理一致性差的场景,该如何修复?
《参考解析》
卷积的优缺点与细节捕获:卷积的归纳偏置强——局部连接 + 权值共享,参数量远小于全连接,平移等变性天然适合图像,数据效率高,靠 im2col + GEMM 就能在 GPU 上跑满算力。它捕获细节的机制有两层:空间上,浅层小感受野的卷积核等价于边缘/纹理/角点检测器,响应高频信息,越往深层感受野越大、语义越强;频率上,卷积本质是局部加权求和,起到滤波作用,而 stride 卷积和 pooling 是低通,会把高频细节丢掉。所以想保细节常用几个手段:两个 3×3 堆叠(感受野等于 5×5,参数更少、非线性更多)、空洞卷积在不降分辨率的前提下扩大感受野、以及在高分辨率特征图上做预测(FPN、U-Net 的 skip)。ViT 的 patch embedding 把图切成 16×16 的块,一开始就丢掉了细粒度结构,这也是纯 ViT 在小数据上不如 CNN、且常在分割/细节任务上需要 hybrid 或 Swin 这类窗口注意力来补的原因。
深度信息怎么接入、怎么验证真被用上:接入方式主要有三种——①把深度图归一化后当额外通道 concat 进输入;②用 cross-attention 把深度特征注入到 RGB 特征;③把深度当几何先验(相机内外参、Plücker embedding)。用外部成熟模型(Depth Anything、MiDaS、ZoeDepth)出深度通常更稳,因为深度分支不参与训练、不会欠拟合;让主干自己预测深度等于做多任务学习,好处是特征共享、坏处是学到的深度可能是”够用就行”的粗糙副产物,还可能退化成 shortcut。验证是否真用上了深度,标准做法是消融:把深度通道置零、换成常数、换成随机深度图、或者把 batch 内深度图打乱(shuffle depth),如果指标几乎不掉,说明模型根本没在用它;再补上输入显著性(看深度通道上的梯度幅值)和注意力可视化交叉验证。实践中常见的”忽略了该通道”的原因是深度与 RGB 高度相关、模型可以从 RGB 推出来,或者深度数值未归一化导致该通道梯度被压制。
RGB-D 蒸馏里 loss 怎么算:teacher 一般选在该任务上更强的大模型(如 Depth Anything V2 Large、DINOv2 特征、或更大的插帧网络)。回归任务(深度图、光流、中间帧)上 student 与 teacher 的输出直接算 MSE 或 L1/Charbonnier,可以再加梯度一致性项、SSIM/感知损失;分类任务则是对 logits 做带温度 T 的 KL 散度。所以”哪两者做 MSE”要答清楚:student 的预测输出与 teacher 的预测输出(同一批次、同一增广、同一分辨率),而不是 student 与 GT。除结果蒸馏外还有:中间特征蒸馏(FitNets,用 1×1 卷积对齐通道后算 MSE)、注意力/关系蒸馏(AT、RKD,蒸馏样本间相似度矩阵)、logit 蒸馏(含 DKD 解耦 target 与 non-target)、自蒸馏/在线蒸馏、以及数据蒸馏。
中间层怎么选、多层加 loss 的坑:选层的依据是”信息量 + 可对齐性”——通常取每个 stage 的最后一个 block 输出(通道数整齐、语义成熟),浅层监督边缘纹理、深层监督语义,用 1×1 卷积或 MLP 做通道对齐;层数越多越要加权重衰减(越浅的层权重越小)。多层同时加 loss 的问题很实在:①梯度冲突,各层梯度方向互相打架;②权重全靠手调,不同数据集最优值不一样,可以用不确定性加权(Kendall 那套)或梯度归一化缓解;③强监督会破坏预训练学到的通用表征,小数据集上尤其明显;④显存和训练时间线性上涨。落地建议是先只加 1~2 层最有效的,再逐步扩。
蒸馏后掉点怎么排查:按顺序排除——①先确认 student 自己从头训的基线是多少,如果独立训练也差,那是容量/训练不足,跟蒸馏无关;②确认 teacher 在目标任务上的上限,teacher 本身不强就别指望;③检查数据增广是否 teacher/student 一致、有没有分布错配;④调温度 T 和 loss 权重(硬标签一般留 0.10.5,蒸馏项 0.50.9),特征蒸馏大概率是层选错或对齐方式太弱;⑤看是不是训练不充分,蒸馏通常需要更长 epoch。
插帧的 bad case 与物理一致性:遮挡、大位移、快速运动模糊、光照突变是插帧掉点的四大来源。修复思路:光流估计上加大搜索范围、用 RAFT 这类迭代式光流并在遮挡区做前后向一致性检查;训练上加 warping loss(用光流把前后帧 warp 到中间帧做监督)、感知损失、以及时序一致性正则;对难样本重加权或做课程学习。物理一致性更偏后处理:加刚体/直线运动先验、对局部运动做仿射拟合约束、检测出违反运动连续性(加速度突变)的区域回退到单帧或混合。RL 后训练在这个任务上不是主流——reward 难设计(要同时刻画清晰度、时序平滑、物理合理)、采样和训练成本高,更常见的是用偏好/感知指标做微调(类似 DPO/RLHF 的思路),或者直接用可微的感知指标端到端训。