ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

2023版CV面试题库:图像基础、深度学习与工程部署高频题

2023版CV面试题库:图像基础、深度学习与工程部署高频题 做CV方向的同学大概都有过这种体验简历上写着熟悉OpenCV、做过检测和分割项目面试官开口第一个问题却是你说说BGR和RGB为什么要转不转会怎样。这类问题不难但答不利索就直接暴露了基本功。这几年我把面过的、被面过的、帮别人复盘过的题目攒在一起慢慢整理成了一份自己的CV面试题库2023年这一版又补了不少新东西。它主要面向三类人准备校招/社招的CV算法和工程岗候选人、从其他方向转CV的开发者、以及需要给团队做技术摸底的技术负责人。内容覆盖图像基础、传统图像处理、深度学习模型、工程部署四大块既有原理问答也有一些纯实操的坑。我尽量不写成教科书而是按面试官想听什么、你为什么这么答、答错了会踩什么坑这个思路来组织能直接拿去对着练。1. 为什么要自己动手整理一份CV面试题1.1 从背题到建知识地图的差别市面上现成的题库不少但直接背的效率和理解着整理完全不是一个量级。我试过纯背结果就是面试官随口换个问法立刻卡壳——比如题库里问BN的作用是什么你背了加速收敛、防止过拟合面试官接着问那推理阶段BN还做归一化吗均值方差从哪来背答案的人当场就哑了。整理题库的真正价值是逼着你把零散的知识点连成一张地图图像从采集到送入模型的每一步做了什么变换模型内部的每一层承担什么职责推理部署时哪些算子会被合并、哪些会拖慢速度。有了这张地图面试官问哪一块你都能顺着地图往上下游延伸两句这才是能让对方觉得这人真做过的地方。我自己的整理方式是给每一道题打三个标签知识点归属属于哪一块地图、考察意图面试官其实想判断什么能力、延伸方向答完能主动往哪带。举个例子图像为什么常用归一化到[0,1]或标准化到均值0方差1这道题知识点归属是数据预处理考察意图是看你懂不懂数值稳定性与收敛的关系延伸方向可以带到不同backbone对输入范围的偏好不同比如某些预训练模型要求特定mean/std。这样一道题就串起了三四个考点比孤立记忆牢固得多。1.2 2023年CV岗位能力画像的变化前几年CV面试的重心还是你会不会训模型2023年明显感觉重心往两头挪了往上游挪到数据处理和标注质量往下游挪到部署和成本。我统计过自己近两年记录的面试题纯模型结构原理类大概占四成工程与部署类占了三成多剩下的才是传统图像处理和数据相关。这个比例变化背后是行业的真实需求——模型架构已经高度开源化能训出模型的人多了但能把它稳定、低成本地跑在真实业务上的人依然稀缺。所以我在整理2023版题库时刻意加重了三类内容推理优化量化、蒸馏、算子融合、TensorRT/ONNX相关知识、数据闭环标注规范、难例挖掘、数据清洗、传统方法因为很多岗位的预处理和后处理仍然是OpenCV手写的这块答不出来会显得只会调库。传统方法这块特别有意思很多人觉得都深度学习时代了还考Canny但恰恰是这类题最能筛人因为它考的是你有没有真正理解图像本身。1.3 我的分类框架与使用建议整份题库我分成四大模块每个模块下面再按基础—进阶—工程三层排列。基础层是必须张口就来的比如色彩空间、卷积计算、常见损失函数进阶层是能讲清楚为什么的比如各种归一化层的区别、注意力机制的设计动机工程层是能讲出踩坑经验的比如显存不够怎么调、推理延迟怎么定位。使用方法上我的建议是先做减法再做加法先确定目标岗位的画像是偏研究还是偏工程只保留相关模块精刷别一上来就全铺开容易挫败。等你把核心模块刷透了再往回补边角知识这时候效率反而更高。提示整理题库时一定要记录我是怎么答错的而不是只记标准答案。错题本的价值远大于题库本身。2. 图像基础与OpenCV实操送分题与送命题并存2.1 像素、通道、色彩空间这些简单问题这块是面试开场的高频区因为面试官想快速判断你的基本功和真实动手经验。最经典的几道图像在内存里是怎么存的、BGR和RGB有什么区别、灰度化怎么算、HSV为什么更适合做颜色分割。先说存储一张H×W的三通道彩色图在内存里通常是连续的H×W×3字节数组但也可能是按通道分开存储的平面格式planarOpenCV默认是交错格式interleaved而很多推理框架或GPU算子更偏好平面格式。这个差异直接导致一个非常常见的坑用OpenCV读图后直接喂给某些推理引擎颜色会反因为一个是BGR一个是RGB。灰度化的公式很多人只记得加权平均但面试官会追问权重为什么是0.299、0.587、0.114。这三个数来自人眼对不同波长光的敏感度——人眼对绿光最敏感对蓝光最不敏感所以绿色通道权重最高。如果你能顺带提一句这个系数对应的是Rec.601标准Rec.709的系数略有不同基本就是加分项了。至于HSV它的价值在于把颜色是什么H和颜色多亮V解耦了做颜色阈值分割时用HSV比用RGB稳得多因为光照变化主要影响V而不是H。面试常问为什么HSV更适合颜色分割答色相与亮度解耦对光照变化更鲁棒。延伸准备LAB色彩空间的L通道也常用于亮度相关的处理a、b通道接近人眼感知的色差。动手验证自己写个脚本把同一张图在RGB和HSV下各做一次红色提取对比阈值范围感受差别。2.2 卷积、滤波与边缘从均值到双边滤波这块的核心是理解卷积核决定了对什么样的信号敏感。均值滤波就是全1归一化核简单但在边缘处会把边缘也糊掉高斯滤波按距离加权中心权重大平滑更自然而且它是可分离的二维高斯可以拆成两个一维卷积计算量从O(n²)降到O(n)这个可分离是高频考点。中值滤波是非线性的对椒盐噪声特别有效因为它取的是排序后的中位数孤立的极端值会被直接干掉。双边滤波是个分水岭式的题。它同时考虑空间距离和像素值差异所以能在平滑的同时保住边缘。面试官常问双边滤波为什么慢因为它不是简单的卷积每个像素的权重都依赖邻域像素的值无法用可分离卷积加速常规实现是O(n²)每像素。如果能顺带提到引导滤波是双边的一种快速近似说明你确实翻过论文。滤波方法线性/非线性主要用途边缘保持典型复杂度均值滤波线性快速去噪差O(n²)可分离高斯滤波线性通用平滑一般O(n)可分离中值滤波非线性椒盐噪声较好取决于排序双边滤波非线性保边平滑好O(n²)难加速2.3 cv::exception 这类报错怎么系统排查热词里出现了terminate called after throwing an instance of cv::exception what(): openc...这个报错我见得太多了几乎是OpenCV新手的必修课。它的完整信息通常包含文件、行号和具体原因比如Assertion failed后面跟着条件。排查有个固定套路我整理成了一条路径先读完整报错找到断言条件再看涉及哪些尺寸、类型、通道数最后回头检查你的输入是不是符合这个函数的隐式要求。举几个我真实踩过的例子。第一种是尺寸不匹配比如cv::add或矩阵运算要求两个Mat尺寸和类型一致你的mask是单通道而图像是三通道就会抛断言。第二种是类型不对OpenCV的Mat有CV_8U、CV_32F等类型很多函数只接受特定类型比如某些滤波要求输入是单通道浮点或8位。第三种最常见也最隐蔽中文路径或路径不存在cv::imread不会报错它只是默默返回一个空的Mat然后你后面任何操作都会在空Mat上抛异常。所以我养成了一个习惯读图之后立刻加一句检查import cv2 img cv2.imread(path, cv2.IMREAD_COLOR) if img is None: raise ValueError(f读图失败检查路径是否存在或是否包含非ASCII字符: {path}) print(img.shape, img.dtype)这几行看着简单但能省掉大量调试时间。更进一步我建议在关键节点都打印shape和dtype因为绝大多数cv::exception本质都是你以为的形状和实际的形状不一致。注意cv::imread读图失败返回空Mat而不抛异常这是OpenCV设计上的一个坑务必手动判空。3. 传统图像处理与特征工程的高频考点3.1 边缘检测与霍夫变换Canny几乎是必问的但面试官想听的不是它用了双阈值而是完整的流程和每一步的意图。标准流程是高斯滤波去噪、计算梯度幅值和方向、非极大值抑制、双阈值检测加滞后连接。其中非极大值抑制是重点沿着梯度方向比较相邻像素只保留局部最大这样边缘会被细化到一个像素宽。双阈值的作用是用高阈值确定确定是边缘的种子再用低阈值沿着这些种子做连通扩展只保留与强边缘相连的弱边缘从而抑制造点又不断开真实边缘。如果你能说出高低阈值的比值经验上取2:1到3:1就是明显的动手痕迹。霍夫变换的考点是它为什么能检测直线和它的参数怎么调。原理是把图像空间的点映射到参数空间一条直线上的所有点会在参数空间交于一点于是直线检测变成了找峰值。面试常问的是它的计算代价和如何改进可以提到概率霍夫变换它随机采样边缘点来投票比标准霍夫快很多同时还能输出线段端点。3.2 特征点与描述子SIFT、SURF、ORB这组题的核心是理解特征点要满足什么性质可重复性、可区分性、尺度不变、旋转不变、对光照和噪声鲁棒。SIFT之所以经典是因为它用高斯差分金字塔找尺度空间极值再用梯度方向直方图定主方向实现旋转不变描述子用128维梯度统计实现光照鲁棒。面试官爱问的和计算有关SIFT为什么慢因为它的金字塔层级多、描述子维度高且当时受专利保护工业上常用ORB替代。ORB是个性价比之王它融合了FAST角点检测和BRIEF描述子速度极快而且加了方向信息让BRIEF具备旋转不变性。高频问题包括ORB和SIFT在什么场景下选哪个——实时性要求高、光照变化不剧烈的场景选ORB比如SLAM的前端精度要求高、场景变化大的选SIFT。这种根据场景选方法的问题最能体现工程判断力。FAST角点只比较像素与圆周上若干点的亮度极快但没有方向和尺度。BRIEF描述子二进制串用汉明距离匹配快但旋转不变性差。ORBFAST加方向BRIEF加旋转兼顾速度和鲁棒。3.3 几何变换与插值细节里的水平缩放、旋转、仿射、透视变换这些操作面试官往往用一个具体问题切入图像放大两倍时你用的是哪种插值为什么最近邻插值最快但会产生锯齿和块状效应双线性插值用周围四个点加权平滑但边缘会略糊双三次用十六个点质量更好但更慢。放大场景一般用双线性或双三次缩小时则要注意先做低通滤波再采样否则会引入混叠这就是所谓的抗混叠处理。透视变换的考点是需要几个点答案是四个点对因为它有八个自由度。做题时常见的问题是四点顺序和对应关系搞反了导致结果翻转——我踩过这个坑透视变换的源点和目标点顺序必须严格一一对应否则出来的图会扭曲得离谱。实操上我习惯先用鼠标取点标出来看一眼确认对应关系没问题再做变换。4. 深度学习时代的CV核心考点4.1 卷积网络的必答题卷积这块最经典的计算题是给定输入尺寸、卷积核大小、步长、填充求输出特征图尺寸。公式是 floor((H 2P - K) / S) 1面试时最好能口算。更深一层的问题是感受野感受野是指输出特征图上某个点对应原图多大区域它随层数累积增长这也是为什么深层网络能看到全局信息。常见追问是两个3×3卷积和一个5×5卷积感受野一样吗答案是一样但两个3×3的参数更少、非线性更多所以VGG里全用3×3。然后是各种归一化层。BN在训练时用当前batch的均值和方差推理时用滑动平均的全局统计量这个训练/推理的不一致是高频考点。LN不依赖batch维度适合序列或小batch场景。GN把通道分组做归一化在小batch下比BN稳。这里有个很容易被追问的点为什么BN对batch大小敏感——因为batch小的时候统计量噪声大导致训练不稳定。4.2 目标检测从两阶段到单阶段检测题几乎跑不掉IoU、NMS、mAP这三板斧。IoU是交并比计算两个框的重叠程度我在面试时经常被要求现场手写。NMS是非极大值抑制先按置信度排序取最高分框然后抑制与它IoU超过阈值的其他框循环直到处理完。面试官爱追问NMS有什么缺点——它会误删密集场景中真实相邻的目标于是诞生了Soft-NMS用分数衰减代替直接删除和各类改进方法。手写NMS是个很能体现水平的题因为它既考逻辑又考边界处理。import numpy as np def nms(boxes, scores, iou_thresh0.5): # boxes: [N, 4] 格式为 x1,y1,x2,y2 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]) w np.maximum(0.0, xx2 - xx1) h np.maximum(0.0, yy2 - yy1) inter w * h area_i (boxes[i, 2] - boxes[i, 0]) * (boxes[i, 3] - boxes[i, 1]) area_o (boxes[order[1:], 2] - boxes[order[1:], 0]) * (boxes[order[1:], 3] - boxes[order[1:], 1]) iou inter / (area_i area_o - inter 1e-6) order order[1:][iou iou_thresh] return keepmAP的考点是它怎么算。以单类为例把预测按置信度排序逐个累加计算精确率和召回率画出PR曲线曲线下面积就是AP多类取平均就是mAP。面试常问mAP0.5和mAP0.5:0.95有什么区别后者在多个IoU阈值下取平均对定位精度要求更高也更严格。4.3 语义分割、实例分割与关键技术分割的核心区分题是语义分割不区分同类实例实例分割要区分全景分割两者兼有。语义分割里最经典的问题围绕上采样和感受野展开比如为什么需要跳跃连接。以U-Net为例编码器不断下采样提取语义解码器上采样恢复分辨率而跳跃连接把编码器的高分辨率细节直接送到解码器解决了下采样过程中细节丢失的问题。转置卷积和插值是另一个高频区。转置卷积不是卷积的逆运算它更像是把输入按比例放大后再做卷积会产生棋盘格伪影所以很多网络改用最近邻上采样加卷积的组合来避免。这里有个实操经验如果你在做分割时发现输出有规律的网格状纹理八成是转置卷积的步长和核大小不匹配导致的改小核或换插值上采样通常能解决。4.4 注意力机制在CV里的落地从ViT火了之后注意力成了必问项。核心是自注意力的计算Q乘K算出相似度归一化后加权V。面试官会问自注意力的复杂度答案是O(n²d)n是序列长度这也是为什么高分辨率图像上直接用ViT很吃力。于是有了各种改进窗口注意力把全局注意力限制在局部窗口内降低复杂度再用移位窗口实现跨窗口信息交互还有用卷积做局部建模、注意力做全局建模的混合结构。一个容易被追问的点是位置编码为什么必要。因为自注意力本身对输入顺序是置换不变的不做位置编码的话模型分不清图像块的空间位置等于把图像当成了一袋词。这在分类任务上可能还能勉强工作但在检测、分割这种强空间依赖的任务上会直接崩掉。5. 工程落地与部署优化拉开差距的地方5.1 模型压缩与推理加速这块题目的特点是没有标准答案全看经验。量化是最常问的核心是把浮点权重和激活用低比特整数表示来减少计算和内存。面试官会追问量化的主要难点答案是激活值的动态范围难以预先确定所以有训练后量化简单但精度损失大和量化感知训练精度好但要改训练流程。另一个高频点是算子融合把卷积、BN、激活合并成一个算子减少内存读写推理框架基本都会自动做这个。蒸馏和剪枝也常出现。蒸馏是让小模型学大模型的软标签剪枝是去掉不重要的权重或通道。我个人的经验是面试时能说出剪枝后通常需要微调恢复精度这种落地细节比只讲概念更有说服力。优化手段主要收益典型代价落地难度量化提速、省显存精度损失中剪枝减小模型需微调中高蒸馏小模型提精度需教师模型中算子融合减少访存依赖框架低5.2 数据处理与训练工程数据这块的题往往是开放式的比如让你做一个缺陷检测项目数据只有几百张你会怎么做。这题考的是工程思维可以答先用数据增强扩充包括几何变换和颜色扰动再用迁移学习从预训练模型微调如果缺陷样本极少可以考虑异常检测思路只学好样本的分布再找异常。面试官想看到的是你有没有真的处理过小样本问题而不是背了一堆增强方法的名字。标注质量也是个隐蔽考点。很多人忽略的是标注一致性同一张图不同标注员画框的松紧不同会让模型学到噪声。工程上会用交叉校验、标注规范文档、以及让模型参与预标注来提高一致性。这些细节平时看着琐碎但面试时说出来会让人觉得你干过真项目。5.3 部署链路上的常见面试题部署题的经典开场是一个模型训练时精度很好上线后效果变差你怎么排查。这是一道典型的系统性排查题可以按链路往下走先确认前后处理是否一致训练和推理的归一化参数、通道顺序是否一致再确认输入尺寸和插值方式是否一致然后是模型是否被正确转换比如转ONNX时某些算子行为变了最后考虑线上数据分布是否和训练数据偏移。这个问题的价值在于它逼你把整条链路完整地说一遍。另一个高频题是推理延迟高怎么优化。我的排查顺序是先看是不是预处理成了瓶颈读图、解码、resize很吃CPU再看模型本身能不能量化、能不能换更小的backbone最后看批次和并发策略。很多人一上来就想换模型其实很多时候瓶颈在数据前处理。提示部署相关的题回答时一定要带先定位再优化的思路直接给方案会被追问你怎么知道是这里慢。6. 常见问题与排查技巧实录6.1 面试高频翻车点速查表整理题库的过程中我发现很多人不是不会而是答得没有结构。下面这张表是我总结的典型问题—翻车原因—正确姿势可以直接对着自查。问题类型常见翻车点正确做法概念题只给结论不给动因先说是什么再说为什么这么设计计算题公式记混、不写推导写清每一步边界情况单独说明场景题直接给方案先问清约束再分情况讨论代码题忽略边界和空输入先处理空、单元素、越界部署题一上来就换模型先定位瓶颈再优化拿计算题举例有人被问卷积输出尺寸直接背公式往里套结果遇到步长不能整除的情况就懵了。正确的做法是理解公式里每一项的含义知道向下取整是因为超出边界的部分不计算。理解了这层无论怎么改参数你都能推。6.2 复习节奏与刷题顺序建议我建议大家别按从第一章背到最后一章的方式复习而是用倒推法先找三到五个目标岗位的真实JD把里面出现的技术关键词列出来然后按出现频率排优先级。这样你会发现高频的其实就那么几十个点集中精力攻下它们收益远大于平均用力。时间安排上我一般建议留两到三周第一周过基础概念重点是能讲清楚为什么第二周补工程和部署结合自己项目里真实的坑第三周做模拟问答最好是找个人互相面或者自己对着问题限时口述并录音。录音回放是提升表达最有效的方法你会发现很多口头禅和逻辑断层自己听一遍就全暴露出来了。6.3 几个我自己踩过的坑第一个坑是为了显得专业而堆术语。我早期面试特别喜欢说我们用了各种先进的特征融合和注意力机制结果面试官一句具体融合在哪一层、为什么是那一层就把我问住了。后来我学乖了宁可讲一个简单但讲透的点也不堆一堆讲不清的名词。面试官判断你真懂还是装懂往往就看你能不能在细节上被追问三层还不崩。第二个坑是只准备成功案例。有一次面试官问你做过失败的项目吗我愣住了因为题库里没有这类题。后来我专门准备了一个效果不达预期的项目复盘讲清楚问题出在哪、怎么定位的、最后学到什么反而成了加分项。真实项目很少有完美收尾的能坦诚复盘反而更可信。第三个坑是忽略了动手验证。很多概念我以为自己懂了直到真写代码才发现漏洞。比如NMS我背得滚瓜烂熟第一次手写时忘了处理空输入和只剩一个框的边界跑起来就报错。所以我现在的习惯是凡是面试可能要求手写的算法我一定至少完整实现一遍并通过几个边界用例。这份题库我还在持续往里加尤其是部署和数据处理这两块因为行业需求变得快。我个人的体会是面试题的答案会过时但把每个问题问到三层为什么的习惯不会过时。你整理的过程本身比整理出来那份文档值钱得多。
返回列表