🎯 计算机视觉面试题精选 50 题¶
⚠️ 时效性说明:本章涉及前沿模型/价格/榜单等信息,可能随版本快速变化;请以论文原文、官方发布页和 API 文档为准。
适用岗位: CV 算法工程师、多模态算法、 AIGC 算法 难度分布:基础(20) + 进阶(20) + 高级(10)
一、基础题( 20 题)¶
1. 卷积操作基础¶
Q1: 解释卷积操作的本质,为什么 CNN 比全连接网络更适合图像任务?
答: - 本质:卷积是一种局部加权求和操作,用可学习的卷积核在输入特征图上滑动 - 三大优势: - 局部连接:每个输出只依赖局部区域,捕捉局部模式 - 权重共享:同一卷积核在所有位置共享参数,大幅减少参数量 - 平移等变性:物体在图像中平移,特征图也相应平移 - 参数对比: 224×224 图像,全连接到 1000 维需要 224×224×3×1000 ≈ 1.5 亿参数,而一个 3×3 卷积核只需 3×3×3×64 = 1728 参数
Q2: 1×1 卷积的作用是什么?
答: 1. 通道降维/升维:改变通道数而不改变空间尺寸(如 256→64 ) 2. 跨通道信息融合:对每个像素位置的所有通道做线性组合 3. 增加非线性:配合激活函数,相当于逐像素的 MLP 4. 典型应用: GoogLeNet Inception 模块、 ResNet 瓶颈结构、 SENet 通道注意力
Q3: BatchNorm 的原理和作用?训练和推理时有什么区别?
答: - 原理:对每个 mini-batch 的特征,按通道做归一化:\(\hat{x} = \frac{x - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}}\),然后缩放平移:\(y = \gamma \hat{x} + \beta\) - 训练时:使用当前 batch 的均值/方差,并维护全局移动平均 - 推理时:使用训练期间积累的移动平均均值/方差(固定值) - 作用:加速收敛、允许更大学习率、一定正则化效果、缓解梯度消失 - 注意: batch size 太小时 BN 不稳定,可用 LayerNorm/GroupNorm 替代
Q4: 感受野是什么?如何计算?
答: - 定义:输出特征图上一个像素对应输入图像的区域大小 - 递推公式:\(RF_l = RF_{l-1} + (k_l - 1) \times \prod_{i=1}^{l-1} s_i\) - 其中 \(k_l\) 为第 \(l\) 层卷积核大小,\(s_i\) 为第 \(i\) 层步长 - 实例: 3 个 3×3 卷积堆叠( stride=1 ),感受野 = 1 + 2 + 2 + 2 = 7 ,等价于一个 7×7 卷积但参数更少
Q5: 池化层的作用?平均池化和最大池化的区别?
答: - 作用:降低空间分辨率、增大感受野、增加计算效率、提供一定平移不变性 - MaxPool:取区域最大值,保留最显著特征,适合纹理/边缘检测 - AvgPool:取区域平均值,保留整体信息,常用于分类网络最后一层( GAP ) - 现代趋势:越来越多使用 stride=2 的卷积代替池化(如 ResNet-D )
2. 经典架构¶
Q6: ResNet 为什么能训练很深的网络?残差连接的数学直觉是什么?
答: - 核心思想:学习残差 \(F(x) = H(x) - x\),而不是直接学习 \(H(x)\) - 数学直觉:梯度 \(\frac{\partial L}{\partial x} = \frac{\partial L}{\partial H} \cdot (1 + \frac{\partial F}{\partial x})\),恒等项 1 保证梯度不会消失 - 深层理解: ResNet 可视为多个浅层网络的集成( Unraveled View ) - 影响:开启了 100+ 层网络时代,后续发展出 Pre-Act ResNet 、 ResNeXt 、 DenseNet
Q7: Transformer 在视觉中的应用? ViT 的核心思想?
答: - ViT:将图像分成 16×16 patch ,每个 patch 线性映射为 token ,加位置编码后送入标准 Transformer - 优势:全局注意力捕捉长距离依赖,数据量足够时超越 CNN - 劣势:缺乏 CNN 的归纳偏置(局部性、平移等变性),小数据集表现不佳 - 后续发展: DeiT(知识蒸馏)、 Swin Transformer(窗口注意力+移位)、 MAE(自监督预训练)
Q8: 描述 FPN ( Feature Pyramid Network )的设计思想
答: - 问题:单尺度特征图难以同时检测大小物体 - 方案:自底向上( backbone 提取多尺度特征)+ 自顶向下(高层语义信息上采样与低层融合) - 关键: 1×1 卷积统一通道数 + 逐元素相加融合 + 3×3 卷积消除混叠 - 应用:几乎所有现代检测器( Faster R-CNN 、 RetinaNet 、 YOLO 系列)都使用 FPN 或其变体
Q9: 对比 MobileNet 和 EfficientNet 的轻量化策略
答: | 策略 | MobileNet | EfficientNet | |------|-----------|-------------| | 核心 | 深度可分离卷积 | 复合缩放(depth/width/resolution) | | 计算量 | DW+PW 减少 8-9x | NAS 搜索较优 baseline 后统一缩放 | | 版本 | V1→V2(倒残差)→V3(NAS+SE) | B0→B7 | | 适用 | 移动端、边缘 | 全平台 |
Q10: 什么是注意力机制?在 CV 中有哪些应用?
答: - 本质:学习对特征的自适应加权,突出重要信息 - 类型: - 通道注意力: SENet ( Squeeze-and-Excitation ) - 空间注意力: CBAM - 自注意力: Non-local / Transformer - 跨模态注意力: CLIP 中图文交叉注意力 - 公式( Self-Attention ):\(\text{Attn}(Q,K,V) = \text{softmax}(\frac{QK^T}{\sqrt{d_k}})V\)
3. 任务基础¶
Q11: 目标检测中 Anchor-based 和 Anchor-free 的区别?
答: - Anchor-based:预设不同尺度/比例的锚框,预测偏移量( Faster R-CNN 、 SSD 、 YOLOv3 ) - Anchor-free: - 关键点法:预测中心点+宽高( CenterNet 、 CornerNet ) - 逐像素法:每个位置预测到边界距离( FCOS ) - 趋势: Anchor-free 是近年非常重要的方向之一( YOLO 新版本、 DETR 等都推动了这一变化 ) - DETR:用 Transformer 直接做集合预测,无需 NMS/Anchor
Q12: IoU 是什么? NMS 的原理?
答: - IoU = 交集面积 / 并集面积,衡量两个框的重叠度 - NMS:按置信度排序 → 选最高分框 → 删除 IoU > 阈值的框 → 重复 - 改进: Soft-NMS (降低分数而非删除)、 DIoU-NMS (考虑中心点距离)
Q13: 语义分割和实例分割的区别?
答: - 语义分割:逐像素分类,不区分同类实例( FCN 、 DeepLab 、 SegFormer ) - 实例分割:区分每个独立实例( Mask R-CNN 、 SOLO 、 Mask2Former ) - 全景分割:语义+实例的统一( Panoptic FPN 、 Mask2Former 统一架构)
Q14: 解释数据增强的常用方法及其作用
答: - 几何变换:翻转、旋转、缩放、裁剪 → 位置/尺度不变性 - 颜色变换:亮度、对比度、色相、饱和度 → 光照鲁棒性 - 混合增强: Mixup (线性插值)、 CutMix (区域替换)→ 正则化 - 自动增强: AutoAugment 、 RandAugment → 自动搜索较优策略 - 2025+前沿:生成式增强(用扩散模型生成训练数据)
Q15: 迁移学习在 CV 中如何使用?
答: - 预训练→微调: ImageNet 预训练 backbone → 在目标数据集微调 - 冻结策略:数据少时冻结底层只微调高层,数据多时全部微调 - 现代方案: CLIP/DINOv2 等基础模型 → Linear Probe 或 LoRA 微调 - 领域适应:源域和目标域分布不同时,对齐特征分布
Q16: 什么是空洞卷积( Dilated/Atrous Convolution )?
答: - 原理:在卷积核中插入空洞,扩大感受野而不增加参数 - 公式:有效卷积核大小 = \(k + (k-1)(d-1)\),\(d\) 为膨胀率 - 应用: DeepLab 系列(语义分割),避免池化导致的分辨率损失 - 问题: gridding artifacts → 使用不同膨胀率的混合策略
Q17: ROC 曲线和 PR 曲线的区别?
答: - ROC: X 轴=FPR , Y 轴=TPR , AUC 面积衡量分类器综合能力 - PR: X 轴=Recall , Y 轴=Precision , AP 面积更适合类别不平衡 - CV 实践:目标检测用 mAP (基于 PR 曲线),分类任务看准确率/F1
Q18: 过拟合的判断和解决方法?
答: - 判断:训练 loss 持续下降,验证 loss 上升 - 解决: 1. 数据增强(最有效) 2. 正则化( L2/Dropout/DropBlock ) 3. Early Stopping 4. 减小模型容量 5. 标签平滑( Label Smoothing ) 6. 预训练+微调
Q19: 如何处理类别不平衡问题?
答: - 数据层:过采样少数类、欠采样多数类、 SMOTE - 损失函数层:加权交叉熵、 Focal Loss (\(\alpha_t(1-p_t)^\gamma \text{CE}\)) - 两阶段训练:先在平衡数据训练特征,再用原始分布微调分类器 - 评估指标:用 mAP/F1 而非 accuracy
Q20: 解释梯度消失和梯度爆炸问题
答: - 梯度消失:链式法则连乘小值 → 低层梯度趋近 0 → sigmoid/tanh 导致 - 梯度爆炸:连乘大值 → 梯度指数增长 → 权重初始化不当 - 解决: ResNet 残差连接、 BN 、 ReLU 激活、合理初始化(He/Xavier)、梯度裁剪
二、进阶题( 20 题)¶
Q21: Swin Transformer 的核心创新是什么? - 窗口自注意力(W-MSA):将\(O(n^2)\)降低到\(O(n \cdot w^2)\) - 移位窗口(SW-MSA):交替层用移位窗口实现跨窗口信息交互 - 层次化特征图:类似 CNN 的多尺度金字塔,适配检测/分割下游任务
Q22: YOLO 系列的演进路线? YOLOv8/YOLO11 的核心改进? - v1→v3 :单阶段→多尺度预测→Darknet backbone - v4→v5 : CIOU loss+Mosaic 增强+CSPNet → 工程优化( Ultralytics ) - v8 : Anchor-free+解耦头+C2f 模块+DFL 分布 focal loss - YOLO11(2024): C3K2 模块+SPPF 优化+更强的小目标检测+实例分割
Q23: SAM (Segment Anything) 的架构和创新点? - 架构: Image Encoder(MAE-pretrained ViT) + Prompt Encoder + Mask Decoder - 创新:可提示分割(点/框/文本 prompt )、 SA-1B(11M 图像/1B mask)数据集 - SAM 2:扩展到视频领域,加入 memory mechanism 处理时序一致性 - 应用:零样本分割、标注辅助、下游任务通用分割 backbone
Q24: 对比学习( Contrastive Learning )的核心思想?举例说明 SimCLR 和 CLIP - SimCLR:同一图像不同增强为正对,不同图像为负对, InfoNCE 损失 - CLIP:图像-文本对比学习,对齐视觉和语言表示空间 - 关键:大 batch size 、强数据增强、温度参数控制 - CLIP 影响:开启视觉-语言基础模型时代
Q25: DINOv2 是什么?和 CLIP 有什么区别? - DINOv2:纯视觉自监督预训练,不需要文本对 - 方法:自蒸馏 + 掩码图像建模( iBOT 目标) - 区别: CLIP 是多模态对比学习, DINOv2 是单模态自监督 - 优势:产生的视觉特征对多种下游任务(分类/分割/检测)均有强泛化性
Q26: 怎样设计一个目标检测训练 pipeline ?
数据准备 → 标注(COCO格式) → 数据增强(Mosaic+MixUp+HSV)
→ Backbone选择(ResNet/CSPDarknet/Swin) → Neck(FPN/BiFPN)
→ Head(解耦头/Anchor-free) → 损失(CIoU+Focal+DFL)
→ 优化器(AdamW+Cosine LR) → 评估(mAP@0.5/0.5:0.95)
→ 部署(ONNX→TensorRT/OpenVINO)
Q27: GAN 的原理?模式崩溃是什么?如何解决? - 原理:生成器 G 和判别器 D 的极小极大博弈 \(\min_G \max_D V(D,G)\) - 模式崩溃: G 只生成少数模式,缺乏多样性 - 解决: WGAN(Wasserstein 距离)、 Spectral Norm 、 StyleGAN(风格映射) - 2024+: GAN 逐渐被扩散模型取代,但在实时生成(GigaGAN)仍有优势
Q28: 扩散模型( DDPM )的核心原理?和 GAN 相比优劣? - 前向过程:逐步加噪 \(x_t = \sqrt{\bar\alpha_t}x_0 + \sqrt{1-\bar\alpha_t}\epsilon\) - 反向过程:网络预测噪声 \(\epsilon_\theta(x_t, t)\),逐步去噪生成 - vs GAN:训练更稳定、多样性更好、质量更高,但推理慢 - 加速: DDIM(减少步数)、 LCM(一致性模型)、蒸馏
Q29: 视觉-语言模型( VLM )的代表性架构? - 双编码器: CLIP ,图文分别编码后对齐(检索效率高) - 融合编码器: BLIP-2 ,用 Q-Former 桥接视觉和语言 - 解码器架构: LLaVA ,视觉 token 直接送入 LLM (简单有效) - 当前前沿:不少原生多模态模型正逐步统一视觉与语言建模链路
Q30: NeRF 是什么? 3D 视觉的发展方向? - NeRF:用 MLP 拟合场景的辐射场(坐标→颜色+密度),体渲染生成视图 - 后续: 3D Gaussian Splatting(实时渲染)、 Instant-NGP(哈希编码加速) - 方向: 3D 生成( Zero-1-to-3 、 DreamGaussian )、 4D 场景重建
Q31: 如何设计损失函数?列举 CV 中常用损失 - 分类: CE 、 Focal Loss 、 Label Smoothing CE - 回归: L1/Smooth L1/IoU 系列(GIoU/CIoU/SIoU) - 分割: Dice Loss + CE 、 Lovász-Softmax - 对比: InfoNCE 、 NT-Xent - 生成: Perceptual Loss + L1 + Adversarial + LPIPS
Q32: 知识蒸馏在 CV 中的应用? - Logit 蒸馏:学生模仿教师的软标签分布(Hinton, 2015) - 特征蒸馏:学生模仿教师中间层特征(FitNets) - 检测蒸馏:蒸馏 RPN proposal + 分类头 - 自蒸馏: DINO/BEiT 中 teacher=student 的 EMA
Q33: TensorRT 部署的完整流程?
PyTorch模型 → ONNX导出(torch.onnx.export)
→ ONNX优化(onnxsim简化) → TensorRT构建Engine
→ FP16/INT8量化(需校准数据集) → 序列化保存 → C++/Python推理
关键:动态 shape 配置、层融合、内存优化
Q34: 如何处理小目标检测问题? - 多尺度特征: FPN/BiFPN 高分辨率特征 - 数据增强: 小目标复制粘贴、 Mosaic 增强 - 锚框策略: 更小的 anchor/步长 - 损失设计: 对小目标给更高权重 - 超分辨率: 先超分后检测 - Sliced 推理: SAHI(切片辅助超推理)
Q35: OCR 系统的完整流程是什么? - 文本检测(DBNet/EAST) → 文本方向分类 → 文本识别(CRNN+CTC/ABINet) - 端到端方案: PaddleOCR, EasyOCR - 当前趋势: 大模型 OCR(直接用 VLM 识别文本)
Q36: 视频理解的常见方法? - 双流网络:空间流(外观) + 时间流(光流) - 3D 卷积: C3D 、 I3D(膨胀卷积)、 SlowFast(双速率) - Video Transformer: TimeSformer 、 VideoMAE - 2025+: 视频基础模型( InternVideo2 、 VideoChat )
Q37: 医学图像分析的特殊挑战? - 数据稀缺+标注昂贵 → 半监督/自监督/迁移学习 - 类别极度不平衡 → Dice Loss 、采样策略 - 3D 数据 → 3D U-Net 、 nnU-Net(自适应框架) - 可解释性要求高 → GradCAM 、注意力可视化
Q38: 如何做模型可解释性分析? - 梯度方法: GradCAM(最常用)、 Guided Backprop - 扰动方法: SHAP 、 LIME - 注意力可视化: 自注意力权重热力图 - 特征可视化: t-SNE/UMAP 降维可视化
Q39: 光流估计的原理和应用? - 光流: 像素级运动场,描述相邻帧间的位移 - 方法: 传统(Lucas-Kanade 、 Horn-Schunck) → 深度学习(FlowNet→RAFT→FlowFormer) - 应用: 视频插帧、动作识别、视频稳定
Q40: 对比 one-stage 和 two-stage 检测器 | 维度 | Two-stage(Faster R-CNN) | One-stage(YOLO) | |------|------------------------|-----------------| | 速度 | 慢 | 快 | | 精度 | 高(大物体) | 近年已追平 | | 流程 | RPN→RoI Pooling→分类 | 直接回归 | | 趋势 | 在部分新工作中被 Transformer 系检测器分流 | 常见工业部署方案 |
三、高级题( 10 题)¶
Q41: 设计一个完整的工业级图像分类系统 - 数据: 清洗→增强→难例挖掘→平衡采样 - 模型: EfficientNet-B4/ConvNeXt-Base + CLIP 预训练 - 训练: Cosine LR + Mixup + Label Smoothing + EMA + 渐进式调大分辨率 - 评估: 分类别 PR + 混淆矩阵 + 在线 A/B 测试 - 部署: ONNX→TensorRT FP16 + Triton 推理服务 + 模型灰度发布
Q42: 如何从零设计一个视觉大模型的训练方案? - Stage 1: 视觉编码器(ViT-L) + 大规模图文对预训练(CLIP 方式) - Stage 2: 视觉→语言投影层训练(冻结 ViT 和 LLM ,只训练投影) - Stage 3: 视觉指令微调(LLaVA 方式,高质量指令数据) - 关键: 数据质量 > 数据数量、渐进式解冻
Q43: 手撕 — 实现 Non-Maximum Suppression (NMS)
def nms(boxes, scores, iou_threshold=0.5):
"""boxes: (N, 4) [x1,y1,x2,y2], scores: (N,)"""
order = scores.argsort()[::-1]
keep = []
while order.size > 0:
i = order[0]
keep.append(i)
if order.size == 1:
break
xx1 = np.maximum(boxes[i, 0], boxes[order[1:], 0])
yy1 = np.maximum(boxes[i, 1], boxes[order[1:], 1])
xx2 = np.minimum(boxes[i, 2], boxes[order[1:], 2])
yy2 = np.minimum(boxes[i, 3], boxes[order[1:], 3])
inter = np.maximum(0, xx2-xx1) * np.maximum(0, yy2-yy1)
area_i = (boxes[i,2]-boxes[i,0]) * (boxes[i,3]-boxes[i,1])
area_j = (boxes[order[1:],2]-boxes[order[1:],0]) * (boxes[order[1:],3]-boxes[order[1:],1])
iou = inter / (area_i + area_j - inter)
inds = np.where(iou <= iou_threshold)[0]
order = order[inds + 1]
return keep
Q44: 手撕 — 实现 IoU 计算
def compute_iou(box1, box2):
"""box: [x1, y1, x2, y2]"""
x1 = max(box1[0], box2[0])
y1 = max(box1[1], box2[1])
x2 = min(box1[2], box2[2])
y2 = min(box1[3], box2[3])
inter = max(0, x2-x1) * max(0, y2-y1)
area1 = (box1[2]-box1[0]) * (box1[3]-box1[1])
area2 = (box2[2]-box2[0]) * (box2[3]-box2[1])
return inter / (area1 + area2 - inter + 1e-6)
Q45: 手撕 — 实现卷积前向传播(不用框架)
def conv2d_forward(input, kernel, stride=1, padding=0):
"""input: (H,W), kernel: (kH,kW)"""
H, W = input.shape
kH, kW = kernel.shape
input_pad = np.pad(input, padding)
oH = (H + 2*padding - kH) // stride + 1
oW = (W + 2*padding - kW) // stride + 1
output = np.zeros((oH, oW))
for i in range(oH):
for j in range(oW):
region = input_pad[i*stride:i*stride+kH, j*stride:j*stride+kW]
output[i, j] = np.sum(region * kernel)
return output
Q46: 如何设计一个大规模图像检索系统? - 特征提取: CLIP/DINOv2 提取全局特征 → PCA 降维 → L2 归一化 - 索引: FAISS(IVF+PQ 量化),百万级数据毫秒级检索 - 重排: 用局部特征(SuperPoint+SuperGlue)做精细排序 - 系统: 分布式 FAISS + Redis 缓存 + 增量更新 + A/B 测试
Q47: Vision Mamba/状态空间模型在 CV 中的应用前景? - 动机: Self-Attention 的\(O(n^2)\)计算量对高分辨率图像不友好 - Mamba: 选择性状态空间模型,线性复杂度\(O(n)\) - Vision Mamba(Vim): 双向扫描+位置编码,在分类/检测上可比 ViT - 争议: 实际硬件加速不如 Attention 成熟, FlashAttention 已大幅优化 Transformer
Q48: 多模态大模型如何理解图像? - 原生多模态: 图像 token 和文本 token 在同一模型中联合训练 - 流程: 图像→Vision Encoder→Token 化→与文本 token 拼接→统一 Transformer 处理 - 能力: OCR 、图表理解、空间推理、视频理解、多轮视觉对话 - 和 CLIP 区别: 不只是检索/对齐,而是真正的视觉理解+生成
Q49: 世界模型( World Model )在 CV 中的最新进展? - 定义: 能预测环境未来状态的生成模型 - Sora: OpenAI 的视频世界模型,理解物理规律生成视频 - 自动驾驶: UniWorld 、 GAIA-1 — 用世界模型做自驾仿真 - 机器人: VLA(Vision-Language-Action)模型,视觉→语言→动作端到端
Q50: 给你一个 CV 项目,如何从 0 到 1 设计技术方案?
1. 需求分析: 任务类型、精度/速度/成本约束、数据现状
2. 数据准备: 采集→清洗→标注→增强→划分(train/val/test)
3. Baseline: 选成熟方案快速验证(如YOLOv8/SegFormer)
4. 迭代优化: 数据增强→模型调参→损失函数→后处理
5. 消融实验: 控制变量,量化每个改进的贡献
6. 部署上线: ONNX/TensorRT → API服务 → 监控告警
7. 持续优化: 收集badcase → 数据闭环 → 模型更新
四、系统设计题¶
设计一个实时人脸识别系统(日活 100 万)
需求分析: - 注册人脸库 100 万人, QPS 1000+ - 识别延迟 < 200ms ,准确率 > 99.5%
系统架构:
客户端 → API Gateway → 人脸检测(RetinaFace) → 人脸对齐(5点landmark)
→ 特征提取(ArcFace/CosFace, 512维) → 特征检索(FAISS, GPU)
→ 阈值判断 → 返回结果
关键设计: - 检测+识别 pipeline 共享 GPU , batch 推理 - FAISS 用 IVF4096_PQ64 索引, 1M 人脸库检索<5ms - 特征库按分片部署,每个分片 100 万 - 增量更新:新人脸注册→实时添加到 FAISS 索引 - 活体检测:近红外/深度/动作,防照片/视频攻击
最后更新: 2026 年 4 月 3 日
最后更新日期: 2026-04-03