计算机视觉面试高频核心问答
引言
计算机视觉是AI落地最广的分支之一,面试既考理论,更重工程结合能力。本指南筛选了30个以内最核心的高频问题,精简冗余,帮你高效备战。
一、图像处理高频基础
Q1:RGB vs HSV 怎么选?
A:
- RGB:显示器通用加色模型,缺点是亮度与色彩强耦合——光照一变,三个通道全乱,不适合颜色分割。
- HSV:分离了色调(H,颜色本质)、饱和度(S,鲜艳度)、亮度(V),H锁定后,V/S的变化干扰极小。
- 切换场景:绿幕抠图、红绿灯/红苹果识别等纯颜色相关任务。
Q2:高斯/中值/双边滤波怎么挑?
A: 这些滤波工具的适用场景,可以记下这张速查表:
Q3:Canny边缘检测的核心?
A: 5步但面试只抓高频简化版:
- 高斯滤波去噪
- Sobel算子算梯度强度+方向
- 非极大值抑制(NMS)“瘦身”边缘到1像素宽
- 双阈值+滞后跟踪:只留“高阈值边缘”或“和高阈值边缘相连的中间值边缘”。
二、深度学习网络高频基础
Q4:CNN为啥比MLP适合图像?
A: 3个降低参数量+贴合图像特性的核心:
- 局部感知:卷积核只扫邻域(图像是局部相关的,比如眼睛周围的像素才构成眼睛)
- 参数共享:同一个卷积核扫整张图(比如找“眼睛边缘”的规则,图的各个角落都通用)
- 平移不变性:加MaxPooling后,物体稍微移动位置,输出特征不变。
下面是一段直观的参数量对比代码,感受一下差距有多大:
Q5:1×1卷积的核心作用?
A: 别只说“降维”!面试要提全3个高频:
- 跨通道信息融合:比如把RGB三个通道的信息线性揉在一起
- 升/降维控计算:ResNet的Bottleneck就是靠2次1×1降升维,把参数量砍到原来的1/4
- 加非线性:1×1后面接ReLU,不改变分辨率就能增强表达能力。
Q6:BN的核心原理和作用?
A:
- 原理:每个Batch内把特征拉成“均值0、方差1”,再学γ(缩放)β(平移)还原表达能力
- 作用:(按面试优先级)
- 防止梯度爆炸/消失
- 大幅加速收敛(可以用更大的学习率)
- 微弱的正则化(靠Batch的随机性)
三、经典架构高频面试点
Q7:ResNet解决了啥问题?残差怎么理解?
A:
- 核心痛点:深层网络退化——网络叠到50层以上,训练集误差反而比20层高(不是过拟合,是学不动恒等映射)
- 残差结构:加跳跃连接,让网络学
H(x) = F(x) + x(F(x)是残差)- 如果残差F(x)→0,模型至少能做到“浅层网络的恒等复制”,保证性能不会下降
- 如果F(x)有用,还能学到更深层的特征。
下面是一个极简的残差块实现,帮你理解跳跃连接的处理细节:
Q8:MobileNet的核心设计?
A: 深度可分离卷积——把标准卷积拆成两步,计算量约降为原来的1/9:
- Depthwise(深度卷积):一个3×3卷积核只扫一个输入通道,不融合通道
- Pointwise(点卷积):1×1卷积扫所有通道,专门融合信息。
四、目标检测/图像分割高频
Q9:One-stage vs Two-stage检测器怎么选?
A: 一句话总结:追求极致精度选Two-stage,追求实时速度选One-stage。
Q10:NMS和Soft-NMS的区别?
A:
- NMS流程:按置信度排序→取最高分框→删所有和它IoU>阈值的框→循环
- Soft-NMS改进:不直接删,而是按重叠程度降低冗余框的置信度(比如IoU=0.8,得分×0.2),解决密集场景下“小物体被误删”的问题。
Q11:语义/实例/全景分割的区别?
A: 按面试优先级理解:
- 语义分割:只分“类别”,不管“个体”——比如把图里所有的“人”涂成红色,所有的“车”涂成蓝色
- 实例分割:既要分“类别”,也要分“个体”——比如把图里的“人甲”涂成红1,“人乙”涂成红2
- 全景分割:语义+实例,还要管“可数/不可数”——比如“人”是可数(分个体),“天空”是不可数(只分颜色)。
Q12:U-Net的核心思想?
A: Encoder-Decoder + 全尺寸跳跃连接:
- Encoder:卷积+池化,提取深层语义特征(比如“这个区域有癌细胞”),但分辨率会降
- Decoder:转置卷积+卷积,把分辨率升回去,但细节会丢
- 全尺寸跳跃连接:把Encoder每一层的高分辨率细节直接拼接到Decoder对应层,完美弥补细节丢失(经典场景:医学影像分割,因为小病灶不能丢)。
五、损失函数/训练优化高频
Q13:交叉熵/Focal Loss/Dice Loss怎么选?
A: 一张表帮你快速决策:
Q14:如何处理样本不平衡?
A: 按工程优先级排序:
- 算法层面(最快实现):
- 损失加权:给少数类加更大的Loss权重
- 换Focal Loss
- 数据层面:
- 数据增强:针对少数类做更多的几何/颜色变换(比如旋转、翻转、亮度抖动)
- 过采样(少量数据)/欠采样(大量冗余数据)
Q15:SGD vs Adam怎么选?
A: 核心是权衡速度和泛化:
- Adam:收敛极快,对初始学习率不敏感→初期快速验证想法、调通流程
- 带动量的SGD:收敛慢,调参难,但泛化能力通常更好→追求极致精度(比如比赛、高精度落地)。
Q16:如何解决过拟合?
A: 按工程落地优先级排序:
- 数据端(最有效):
- 加数据
- 强数据增强(Mixup、Cutout、CutMix)
- 训练端(快速实现):
- 早停(Early Stopping):验证集Loss连续N轮不下降就停
- L2正则化(权重衰减)
- 标签平滑(防止模型太自信)
- 模型端:
- 降低模型复杂度(比如从ResNet101换成ResNet50)
- 加Dropout(注意Dropout和BN不要一起用在训练后推理阶段)。
六、工程部署与实战高频(超级重要!!)
Q17:模型压缩的三个核心方法?
A: 按落地易用性+效果排序:
- 量化:把FP32→INT8/FP16,体积减4倍,推理速度提2-4倍,精度损失极小
- 剪枝:移除权重小/对结果贡献弱的通道,直接减计算量
- 知识蒸馏:大模型(教师)教小模型(学生)学输出概率分布(Soft Label),小模型能接近大模型的精度。
Q18:ONNX/TensorRT/NCNN分别干啥?
A: 按部署链路理解:
- ONNX:跨框架“翻译官”——把PyTorch/TensorFlow模型转成通用格式,方便迁移
- TensorRT:NVIDIA GPU推理“加速器”——算子融合、显存优化,速度能提2-5倍
- NCNN/MNN:手机/ARM嵌入式推理框架——包体小、不依赖第三方库,适合移动端落地。
Q19:预处理/后处理的核心坑?
A: 避坑第一条:预处理必须和训练时100%一致!
- 比如训练时用的是
(mean=[0.485,0.456,0.406], std=[0.229,0.224,0.225])的ImageNet归一化,推理时必须一模一样 - 比如训练时缩放到640×640用的是“保持宽高比+填充黑边”,推理时不能直接拉伸(会导致物体变形,精度暴跌)
后处理避坑:
- 大模型输出的后处理(比如NMS)经常比推理还慢→尽量用GPU加速(比如TensorRT Plugin、CUDA实现的NMS)。
Q20:如何定位模型速度慢的问题?
A: 核心是分段测速!
- 测量全链路:
数据加载→预处理→推理→后处理→结果传输 - 找瓶颈:
- GPU利用率低(<50%)→瓶颈在CPU/IO(数据读不过来、预处理太慢)
- GPU利用率高→模型计算量太大→换小Backbone、量化、剪枝
- 传输时间长→不要返回原始图像,只返回坐标/掩码的压缩结果。
七、项目深度访谈(体现个人能力的核心!)
参考问题1:你项目的难点是什么?
参考回答(结合工程):
“难点在于在边缘设备(比如20TOPS算力的 Jetson Nano)上把目标检测的端到端延迟控制在100ms以内,同时mAP不能降超过2%。 我先做了FP16量化,速度提了2倍但延迟还是150ms;然后把Backbone从ResNet50换成MobileNetV2,精度降了3%;最后又加了TensorRT的算子融合和动态Batch,延迟降到85ms,精度恢复到只降1.8%。”
参考问题2:为什么选这个模型?
参考回答(体现Trade-off):
“我选了YOLOv8s,因为它在精度、速度、部署难度之间达到了最优平衡点。 相比Two-stage的Faster R-CNN,它快10倍,适合实时场景;相比纯Transformer的DETR,它在小数据集(我只有2万张标注图)上收敛更快,且不需要太多调参;相比更轻的YOLOv8n,它的mAP高了5%,满足业务要求。”

