跳转至

🎯 计算机视觉面试题精选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?

Text Only
数据准备 → 标注(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(简单有效) - 2025前沿:GPT-4o原生多模态、Gemini 2.5统一架构

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部署的完整流程?

Text Only
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 - 2025+: 大模型OCR(直接用VLM识别文本,如GPT-4o)

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取代(DETR) | 主流工业部署方案 |


三、高级题(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)

Python
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计算

Python
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: 手撕 — 实现卷积前向传播(不用框架)

Python
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: 多模态大模型(GPT-4o/Gemini 2.5)如何理解图像? - 原生多模态: 图像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设计技术方案?

Text Only
1. 需求分析: 任务类型、精度/速度/成本约束、数据现状
2. 数据准备: 采集→清洗→标注→增强→划分(train/val/test)
3. Baseline: 选成熟方案快速验证(如YOLOv8/SegFormer)
4. 迭代优化: 数据增强→模型调参→损失函数→后处理
5. 消融实验: 控制变量,量化每个改进的贡献
6. 部署上线: ONNX/TensorRT → API服务 → 监控告警
7. 持续优化: 收集badcase → 数据闭环 → 模型更新


四、系统设计题

设计一个实时人脸识别系统(日活100万)

需求分析: - 注册人脸库100万人,QPS 1000+ - 识别延迟 < 200ms,准确率 > 99.5%

系统架构

Text Only
客户端 → API Gateway → 人脸检测(RetinaFace) → 人脸对齐(5点landmark)
→ 特征提取(ArcFace/CosFace, 512维) → 特征检索(FAISS, GPU)
→ 阈值判断 → 返回结果

关键设计: - 检测+识别pipeline共享GPU,batch推理 - FAISS用IVF4096_PQ64索引,1M人脸库检索<5ms - 特征库按分片部署,每个分片100万 - 增量更新:新人脸注册→实时添加到FAISS索引 - 活体检测:近红外/深度/动作,防照片/视频攻击


最后更新:2026年2月