☰
计算机视觉面试核心知识点速查:从CNN到目标检测
2026/10/1 12:12:36 网站建设 项目流程

最近在准备计算机视觉岗位的面试,陆陆续续把常考的知识点整理了一遍,越整理越觉得这行看着门槛不高,真往深了问全是细节。网上零散的帖子和课程不少,但要么太浅,要么太偏学术,真正能拿来直接复习的“八股”反而不多。所以我自己开了一个长期维护的笔记,把CV领域的高频考点、易混淆概念、经典模型参数和面试答题套路都收进来,持续更新。

这份东西定位很明确:给正在准备计算机视觉相关岗位面试的人,或者刚入门想建立完整知识体系的同学。不是教程,不教你怎么从零搭环境,也不会逐行讲源码,而是把面试官最爱问、最容易答不上来的那些“知识点快问快答”做成一份可背诵、可查阅的速查手册。我自己定了一条主线:从图像处理基础出发,到卷积神经网络原理,再到目标检测、分割、关键点等核心任务,最后落到训练调参和工程部署,确保每个环节都有“能直接说出口的答案”。

这篇文章也是基于那份自用笔记整理出来的公开版,把我觉得最核心、最容易被问住的部分分享出来,权当是给同样在准备的人省点时间。内容会持续扩充,后续遇到新的好题、踩到新的坑,我都会补进来。

1. 整体思路与复习框架

1.1 为什么我会单独整理一份CV八股

很多人复习CV喜欢直接刷论文,或者拿一本《计算机视觉:算法与应用》从头啃。我试过,效果并不好。论文太多,光检测方向就有Faster R-CNN、YOLO系列、DETR系列,每一篇都有大量公式和实验细节,如果只准备面试,这些内容其实有很大一部分是冗余的。课本则更偏体系化,适合打基础,但不适合临阵磨枪。

所以我换了个思路:把面试中反复出现的知识点,按“是什么、为什么、怎么用、有什么坑”四个维度压缩成卡片式笔记。比如面试官问“为什么ResNet要引入残差连接”,标准答案是解决退化问题,但更深入一层,他其实还想听你解释梯度传播路径、恒等映射的作用,以及在极端深网络里的表现差异。这些内容用卡片记下来,复习效率会高很多。

自用笔记的另一个好处是可以随时记下自己面试时被追问的问题。我有几次面试结束后复盘,发现自己答得不好的点,其实都是平时没太注意的细节,比如BatchNorm训练和推理时的行为差异、1x1卷积的作用、RoI Align为什么要用双线性插值。这些恰恰是八股里最容易考、也最容易丢分的地方。

1.2 复习路径与知识树搭建

计算机视觉的知识体系非常庞杂,但面试涉及的核心范围其实相对固定。我按复习优先级画了一棵知识树,主干分六条:图像处理基础、深度学习基础、卷积神经网络架构、经典视觉任务、训练优化技巧、工程部署实战。每条主干再拆出小枝,比如“经典视觉任务”下面就是分类、检测、分割、关键点、跟踪、OCR等。

为什么要这样拆?因为面试问法通常有两种:一种是从任务出发,问“你怎么做目标检测”,这时候你得从两阶段讲到单阶段,从Anchor-Based讲到Anchor-Free;另一种是从技术点出发,问“你怎么理解感受野”,这时候你得能快速定位它属于CNN架构这个主干,并关联到空洞卷积、特征金字塔这些子话题。

知识树的好处是能在脑子里形成一张索引图,被问到任何一个概念,都能沿着路径展开相关细节。我自己会定期对着这棵树做“默写测试”,不看笔记,凭记忆把一个主题下的所有要点复述出来,复述不出来的地方就是薄弱环节,再回去翻笔记强化。这个方法比单纯看笔记有效很多。

1.3 构建速查卡片的小技巧

整理自用笔记时,我踩过不少坑。一开始是见到什么记什么,结果笔记越来越长,复习时根本翻不过来。后来我给自己定了几条规则:

每张卡片只记录一个知识点,字数控制在300字以内,尽量用条目和短句代替大段描述。把容易混淆的内容放在一起对比,比如“池化”和“卷积步长为2”的下采样区别、FCN和U-Net的结构差异。另外每条卡片都要有一个“面试延伸”区域,写上面试官可能追问的方向和参考回答,这些内容往往才是拉开差距的地方。

比如“Dropout”这张卡片,核心内容只有一条:训练时按概率随机失活神经元,推理时不失活但要乘保留概率。但面试延伸就可以写:为什么推理时要乘p、Dropout和DropBlock的区别、在卷积层后使用Dropout效果为什么不好、有没有替代方案。把这些细节都补齐,才算是一张合格的八股卡片。

2. 图像处理与OpenCV底层基础

2.1 图像在计算机里到底怎么存的

面试里关于图像基础的问题看起来简单,但翻车的概率很高。比如“一张RGB图像在内存里是怎么排列的”,很多人会脱口而出是“长宽通道”,但在实际工程里,OpenCV默认的存储格式是HWC,即高、宽、通道,而且通道顺序是BGR而不是RGB。PyTorch训练时用的又是CHW,这就在做预处理时非常容易出bug。

我遇到过最经典的坑是:用OpenCV读图后直接喂给PyTorch模型,结果颜色完全不对劲。原因就是OpenCV输出的是BGR,而模型预训练时用的是RGB,没有做通道转换导致的。这种问题在面试里不一定会直接考,但在手撕预处理代码的环节很容易暴露出来。

另外图像的位深也经常被忽略。8位图像每个通道取值范围是0到255,但在很多深度学习框架里,数据会先归一化到0到1,再按均值和方差做标准化。如果忘记了这层转换,直接用读取的像素值喂给模型,数值范围不对,推理效果就会很差。面试官经常会问“你平时怎么处理图像输入”,本质上想看的就是你有没有建立起这个完整的pipeline意识。

2.2 颜色空间与通道顺序的坑

颜色空间转换在CV里算是基础中的基础,但越是基础越容易在面试中暴露理解深度。常见的有RGB、BGR、HSV、LAB、YUV,每种空间都有它适用的场景。面试中常问的问题是“为什么要做颜色空间转换”,你得能从两个角度回答:一是某些算法在特定颜色空间下更鲁棒,比如基于颜色的分割在HSV下比在RGB下更稳定;二是某些任务需要把亮度和颜色分离处理,比如YUV在视频编码里的应用。

至于通道顺序,我觉得可以从一个具体案例去理解。假设你有一张图片,OpenCV读进来是BGR,用matplotlib显示时它期望的是RGB,如果你直接把BGR数据丢给matplotlib,图片的红色和蓝色就会互换。这类问题在面试手撕代码时特别容易考到,你写完之后面试官可能会追问一句“为什么要用cv2.cvtColor(img, cv2.COLOR_BGR2RGB)”,这时候如果答不出本质,就会显得知识不够扎实。

还有一个容易被忽略的点是归一化。很多经典模型在训练时使用ImageNet的均值和标准差,比如mean=[0.485, 0.456, 0.406],std=[0.229, 0.224, 0.225],推理时也要用同样的参数做标准化。有人会问为什么是这三个数,其实这是从ImageNet数据集上统计出来的,它与具体任务没有直接关系,但在迁移学习场景下,沿用预训练模型的归一化参数会更容易复现原模型的性能。

2.3 图像滤波、边缘检测的原理和参数

滤波和边缘检测是最常考的图像处理基础。高斯滤波的原理是拿一个符合高斯分布的卷积核和图像做卷积,用来平滑图像、抑制噪声。面试官经常追问“高斯核的尺寸和标准差σ怎么选”,这个问题没有标准答案,但你需要明白两者之间的关系:σ越大,图像越模糊,保留的细节越少;核尺寸一般取3σ左右的奇数,太小会截断高斯分布的权重,太大会增加计算量。

边缘检测则是高频考点中的高频。Sobel算子通过计算图像在x和y方向上的梯度近似值来检测边缘,它用了一个3x3的卷积核,区分了中心像素的权重。Canny检测更复杂一些,流程是高斯滤波去噪,计算梯度幅值和方向,非极大值抑制,双阈值检测和边缘连接。面试官问Canny时,通常希望你能完整说清楚这五个步骤,并且解释每一步的作用。

我在自己的笔记里做了一个Canny步骤表,把每一步的输入输出和常见参数都列出来,这样复习时就不用再翻原论文。高斯滤波的核大小一般是5x5,双阈值的高阈值和低阈值比例一般在2:1到3:1之间,这些参数不会精确考,但你说得出来会显得有实战经验。

2.4 图像增强与归一化为什么重要

图像增强在传统CV里是一大类技术,包括直方图均衡化、Gamma变换、锐化等。它的核心目的是改善图像的视觉效果,或者让后续算法更容易处理。比如直方图均衡化,通过重新映射灰度值让图像的直方图分布更均匀,从而提高对比度,在低对比度的图像上效果特别明显。

在深度学习时代,图像归一化的重要性甚至更高了。除了前面提到的均值和方差标准化,还有BatchNorm和LayerNorm这类网络内部的归一化方法。不过这两者解决的问题不一样:数据归一化解决的是输入特征尺度不一致的问题,而BatchNorm解决的是训练过程中内部协变量偏移和梯度消失的问题。

面试时如果聊到数据增强,最好能结合具体任务说几个有效的策略。比如分类任务常用的随机裁剪、随机翻转、颜色抖动、CutOut,检测任务常用的Mosaic、MixUp、CopyPaste。关键是解释为什么这些策略有效——本质上是让模型见过更多样化的数据分布,增强泛化能力,同时也是一种隐式的正则化。

3. 卷积神经网络与特征提取

3.1 卷积运算的本质与参数量计算

卷积是CV的核心,但很多人对卷积的理解停留在“提取特征”这个层面。面试官如果让你手算一个卷积层的参数量,你算不对就会非常尴尬。其实计算规则很简单:对于一个输入通道数为C_in、输出通道数为C_out、卷积核大小为K x K的卷积层,如果不加偏置,参数量就是C_in * C_out * K * K,如果有偏置,再加上C_out。如果还使用了分组卷积,那么参数量要除以分组数G。

我举个例子:输入是3通道224x224的RGB图像,第一层卷积是64个3x3的卷积核,那么这一层的参数量是3643*3=1728,再加上64个偏置就是1792。这点参数量相比后面动辄几十万的层来说很小,但计算量却不小,因为每个卷积核要在空间位置上滑动计算。

关于计算量的估算,可以用FLOPs来衡量。一次卷积的乘法次数大约是C_in * K * K * H_out * W_out * C_out,这里面H_out和W_out是输出特征图的尺寸。理解了这些计算规则,你才能更好地理解为什么深度可分离卷积能大幅减少计算量,为什么1x1卷积可以用来改变通道数,为什么MobileNet能在移动端跑得动。

3.2 感受野、空洞卷积与特征金字塔

感受野这个概念几乎每次面试都会碰到。通俗地讲,感受野就是输出特征图上的一个像素对应到输入图像上的区域大小。对于连续卷积层,感受野会逐层增大,但增大的速度取决于卷积核尺寸、步长、空洞率和池化层。

我在复习时喜欢用一个小例子来加深理解:一个3x3卷积后面再接一个3x3卷积,第二个卷积输出的每个像素,在输入上对应的感受野是多少?答案是5x5。计算公式很简单,当前层感受野等于上一层感受野加上(当前卷积核尺寸减1)乘以上面所有层的步长乘积。如果你能把这种计算过程在纸上推演一遍,感受野这块基本就稳了。

空洞卷积是在卷积核元素之间插入空洞,用来在不增加参数量的情况下扩大感受野。它被广泛应用在分割和检测任务里,比如DeepLab系列就大量使用了不同空洞率的空洞卷积。面试时经常会问“空洞卷积有什么缺点”,这个问题比较刁钻,但答案是存在网格效应,即空洞率过大时,卷积核覆盖的区域之间存在间隙,导致部分信息丢失。

特征金字塔解决的则是多尺度目标的问题。在FPN出现之前,很多检测模型只在最后一层特征图上做预测,小目标很容易漏检。FPN通过自顶向下的路径和横向连接,把深层语义信息与浅层空间信息融合,让每一层特征图都同时具备较强的语义和空间分辨率。这个思想后来也被很多模型继承,比如PANet、BiFPN,在面试中聊到检测模型时基本是绕不开的。

3.3 激活函数、BatchNorm与训练稳定性

激活函数是神经网络非线性的来源。面试常考的有ReLU、Leaky ReLU、ELU、GELU、Swish等,重点在于理解每个函数的优缺点。ReLU简单高效,但存在Dead ReLU问题,即负区间梯度为0,神经元一旦在负数区域,就可能永远不被激活。Leaky ReLU给了负区间一个小的斜率,缓解了这个问题;ELU则引入了指数运算,在负区间更平滑;GELU和Swish在Transformer中更常见,是近年来的主流。

BatchNorm的理解必须到位,因为面试官极其爱问训练和推理时的差异。训练时,BatchNorm对每个batch计算均值和方差,并用它们归一化当前batch的数据,同时维护一个全局的滑动平均均值和方差。推理时,batch内数据可能只有一张图,如果还在用当前batch的统计量,结果会非常不稳定,所以推理时必须使用训练阶段维护的全局统计量。

还有一个常见的坑是BatchNorm对batch size的依赖。如果你的显存只允许batch size为2甚至为1,BatchNorm的效果会变得非常差,因为统计量估计不准。这种情况下可以考虑使用GroupNorm或LayerNorm替代。面试里如果聊到大规模训练或者分布式训练,BatchNorm的同步问题也是高频话题,比如同步BN为什么要做梯度同步。

3.4 正则化与数据增强的实战心得

正则化部分,L1、L2、Dropout、Early Stopping、Label Smoothing这些都是常规考点。L1正则化会让权重变得稀疏,因为它产生的梯度是常数,小权重会被推向0;L2正则化则是让权重整体变小,但对接近0的权重惩罚很小,所以不会产生稀疏解。这个区别用一张图解释最清晰,我笔记里画过坐标轴上的约束范围,L1的菱形约束更容易在坐标轴上达到最优解,因此产生稀疏性。

Dropout的心得前面提到过一些,这里再补充一点:Dropout在卷积层后效果不好的原因,是卷积层的参数共享特性让相邻位置的元素高度相关,随机失活单个像素对打破共适应性的作用有限。所以很多CV模型会在全连接层之后才使用Dropout,或者干脆使用Spatial Dropout,按通道整体失活。

数据增强我就不展开说具体代码了,但强调一个原则:增强策略要和任务匹配。分类任务里的随机翻转和裁剪是安全的,但对OCR任务来说,翻转会改变字符语义,不能随便用。对目标检测而言,简单的水平翻转也需要同步调整标注框坐标。这些细节如果不注意,增强反而会给模型引入噪声。

4. 经典CV模型与核心任务

4.1 图像分类模型演进路线

图像分类是CV最基础的任务,模型演进也是一条清晰的历史线。从AlexNet的横空出世,到VGG用堆叠小卷积核证明深度的作用,再到GoogLeNet提出Inception结构、用1x1卷积控制计算量,然后是ResNet的残差连接解决了超深网络的训练难题。面试官问这条路线,其实想考察你对模型设计动机的理解,而不是让你背名字。

VGG有一个思想值得单独记住:两个3x3卷积的感受野等同于一个5x5卷积,三个3x3卷积等同于一个7x7卷积,但参数量更少、非线性更强。ResNet的核心则一句话就能讲清楚:残差结构让网络在极端深度下依然可以稳定优化,因为它为梯度提供了一条从输出直接传到输入的捷径。

后来的DenseNet用密集连接进一步强化了特征复用,EfficientNet则通过神经架构搜索找到了一组复合缩放系数,把网络深度、宽度和输入分辨率同时缩放。面试如果问“你怎么设计一个轻量级分类网络”,可以从MobileNet的深度可分离卷积、ShuffleNet的通道混洗这些方向去答。

4.2 目标检测:从两阶段到单阶段

目标检测是我面试准备中投入最多的方向,也是考题密度最大的方向。两阶段检测器的代表是Faster R-CNN,它先通过RPN生成候选区域,再做二次分类和回归。面试官喜欢追着RPN细节问:锚点是什么、IOU阈值怎么设、正负样本怎么定义、NMS怎么用。

单阶段检测器的代表是YOLO系列和SSD。YOLO的核心思想是把检测当成回归问题,一次前向直接输出边界框和类别概率,速度远超两阶段方法。但早期的YOLO对密集小目标效果不好,因为它们没有区域提名机制,而是直接在均匀划分的网格上预测。后来YOLOv3引入了多尺度预测,YOLOv4和YOLOv5则把数据增强、CSP结构、PANet等技巧整合进去,速度和精度达到了很好的平衡。

面试时如果问到Anchor-Free的方法,可以从CenterNet和FCOS切入。它们的核心是不需要预设锚点框,而是直接预测目标的中心点或关键点,再回归边界框尺寸。优点是不需要聚类调锚点、正负样本更简单,缺点是某些场景下训练不稳定,需要专门的loss设计。

4.3 实例分割与语义分割

分割任务分成三类:语义分割、实例分割和全景分割。语义分割是对每个像素预测类别,不区分同一类别的不同个体;实例分割需要区分个体,同时做像素级掩码预测;全景分割则是两者的结合,既分割stuff类别,也分割thing类别。

语义分割的经典工作有FCN、U-Net、DeepLab系列。FCN是第一个端到端的像素级分割网络,用卷积层替换全连接层,配合反卷积进行上采样。U-Net的编码器-解码器结构和跳跃连接特别适合医学图像等小数据集场景,因为它能把浅层的空间细节和高层的语义信息结合起来。DeepLab系列的空洞卷积和ASPP模块则解决了多尺度感受野的融合问题。

实例分割的主流方案是Mask R-CNN,它在Faster R-CNN的基础上增加了一条分割分支。这里有一个高频考点:Mask R-CNN为什么要用RoI Align而不是RoI Pooling?答案是RoI Pooling在两次量化过程中会产生像素偏移,而分割任务对空间位置极其敏感,RoI Align用双线性插值避免了量化,保留了更精确的空间对应关系。

4.4 关键点检测与姿态估计

关键点检测常见于人脸关键点和人体姿态估计场景。单人姿态估计的代表是Hourglass网络,它的对称编解码结构可以融合多尺度信息。多人姿态估计有两条技术路线:自顶向下和自底向上。自顶向下是先检测人,再对每个人做关键点检测,精度高但速度慢;自底向上是先检测所有关键点,再做分组关联,速度更快,但关键点匹配精度相对较低。

面试中比较容易考到的是热图回归方法。大多数关键点模型不是直接回归坐标,而是对每个关键点生成一张高斯热图,用网络预测热图,再通过argmax取出峰值位置作为关键点坐标。为什么用热图而不是直接回归坐标?因为坐标回归是一个高度非线性的映射,对遮挡和模糊非常敏感;热图保留了空间分布信息,学习起来更容易收敛,也更便于做多尺度监督。

关于关键点部分,还有一个容易被忽略的点是数据增强时坐标同步。翻转图像的标注不能直接沿用原图坐标,需要做水平翻转换算;随机旋转和缩放同样要对关键点坐标做相应的几何变换。我在面试中经常被问到“你处理关键点数据时踩过什么坑”,这个就是一个非常真实的回答。

5. 训练调参与工程落地要点

5.1 数据准备阶段最容易翻车的点

数据是整个项目的基石,但很多人只在网络结构上下功夫,忽略了数据的处理细节。我在实际工作中踩过最深的坑是数据泄露:先把所有图片做了归一化,再划分训练集和测试集,导致测试集的统计信息被模型间接看到,模型评估结果虚高。正确做法是先划分数据集,再分别做预处理,所有统计参数只能从训练集计算。

另一个翻车点是标签不平衡。以目标检测为例,如果一张图里背景区域占了绝大多数,模型很容易把输出全部预测为背景,分类精度虚高但实际检测能力很差。之后我养成了两个习惯:每次训练前都抽样可视化一批训练数据的标注,确认标签和图像对齐;另外固定随机种子,保证实验可以复现。不要小看固定随机种子这件事,我遇到过几次“模型昨天训出来效果很好,今天跑同一份代码效果崩了”的情况,最后排查下来都是随机种子没固定或者数据增强引入了额外随机性。

还有一个容易被忽视的坑是图片格式不一致。有的图片是BGR,有的带Alpha通道,有的是16位位深,有的方向不对带EXIF旋转信息。如果统一在数据读取阶段做一个格式校验和转换,后面会省很多debug时间。简单说,数据管线的每一环节都要有检查手段,不能一股脑读取就开训。

5.2 损失函数设计与样本不均衡处理

损失函数的选择直接影响模型收敛的方向。分类任务常用交叉熵损失,但当类别不均衡时,交叉熵会让模型偏向多数类。这时候可以用Focal Loss,它的核心是给易分类样本更低的权重,让模型聚焦在难分类的样本上。Focal Loss最早是RetinaNet提出来的,在密集目标检测中效果非常明显,公式就是标准交叉熵乘上一个调制因子(1-p_t)^γ。

回归任务最常用的是L1和L2损失,但两者各有问题。L2 Loss对离群点非常敏感,一个极端的异常值会把梯度拉得很大,导致训练不稳定;L1 Loss在零点不可导,收敛到最后阶段会有震荡。Smooth L1算是一个折中,在误差较小时使用平方损失,误差较大时切换到线性损失,兼顾了稳定性和收敛速度。Faster R-CNN里的边框回归用的就是Smooth L1。

样本不均衡如果发生在目标检测里还会体现为前景背景不均衡。SSD等单阶段检测器会生成大量默认框,其中大部分是背景,如果不做采样,训练会被背景框主导。常见的做法有OHEM在线难例挖掘、硬负样本挖掘以及Focal Loss。回答这类问题时,最好能结合实际项目说清楚你用的是哪种策略,以及它的收益和代价。

5.3 模型加速、量化与部署细节

面试里如果涉及部署,考察点通常很实际:你怎么把模型变快、怎么减小模型体积、怎么在边缘设备上跑起来。先说加速,最常用的是结构优化和算子融合,比如把卷积和BN层融合成单层,因为BN的均值和方差在推理时是固定的,可以折进卷积层权重里。这个操作能让推理速度提升不少,而且完全不影响精度。

量化是另一个部署热门话题。把FP32权重压缩成INT8,模型体积缩小到原来的四分之一,推理速度也能大幅提升,代价是可能有少量精度损失。但量化并不是直接把所有层的权重截断就行,通常需要做校准,收集一部分真实数据来统计激活值的分布,确定合适的缩放因子。面试中考到的话,把量化流程说清楚就已经能拿大部分分了。

模型剪枝、蒸馏也是部署团队常用的手段。剪枝是去掉不重要的通道或连接,蒸馏是让大模型教小模型,两者可以组合使用。我在项目中一般优先用蒸馏配合量化,因为裁剪对结构改动大,容易把精度压垮,蒸馏和量化则更可控。

5.4 常见异常排查速查表

训练和部署过程中经常会遇到各种“看似玄学”的问题,我把它们整理成了一张速查表,面试里聊到实战经验时可以直接用:

异常现象可能原因排查思路与解决方向
Loss不下降或直接变成NaN学习率过大、梯度爆炸、标签里有脏数据降低学习率、添加梯度裁剪、检查数据标签
训练集准确率很高但验证集很低过拟合增强正则化、降低模型容量、加Dropout、更多数据增强
训练和推理精度差距大BN层行为不一致、预处理不一致确认推理使用全局统计量、检查归一化和通道顺序
检测框位置偏移数据增强未同步标注框、输入分辨率不一致可视化增强后的图像和标注,检查坐标变换
模型在GPU和CPU上结果不一致浮点数累积误差、算子实现差异设置相同推理模式、固定输入尺寸、使用同一推理引擎

这张表的每一行都是我实际踩过坑后总结出来的。面试时聊到工程部分,你不一定要把每个问题都说得非常细,但能用自己的项目经历去匹配其中一两行,会比单纯背概念有说服力得多。

6. 面试高频问题的答题思路

6.1 被问到“为什么选这个模型”怎么回答

面试中经常会有开放式问题,比如“让你做一个车牌识别任务,你会怎么选模型”。很多人的回答是直接抛出一个模型名字,然后开始讲网络结构。其实面试官想听的远不止这些,他想看的是你的思考链路:任务定义是什么,输入是什么形态,输出是什么,对速度和精度的要求如何,数据规模有多少,部署环境能不能支撑大模型。

完整的回答应该是一条链路。先分析任务:车牌识别可以拆成车牌检测和字符识别两个子任务。检测环节,如果部署在嵌入式设备上,可以用轻量化的YOLOX-S或者NanoDet;如果GPU资源充足,可以考虑RT-DETR这类精度更高的模型。字符识别环节,可以用轻量级CNN+LSTM+CTC的网络结构,也可以直接上端到端的识别模型。分析完再给结论,面试官会认为你有真实的项目判断力,而不是只会背模型。

我在笔记里给这类问题单独列了一个“回答五步法”的模板:任务拆解、输入输出定义、模型选型理由、训练数据方案、性能评估标准。按这个框架作答,基本不会偏题。

6.2 手撕代码与算法题的准备方向

CV方向的面试手撕代码一般分两类:一类是深度学习模型的推理实现,比如手写卷积操作、手写NMS、手写RoI Align的双线性插值;另一类是纯算法题,比如最大矩形、接雨水、最长递增子序列这类LeetCode原题。

我的经验是,第一类更容易被忽略,但考的概率并不低。NMS几乎是目标检测岗位必考的代码题,它考的不只是你会不会调第三方库,而是能不能用Python或C++自己实现完整逻辑:排序、计算IOU、循环抑制。我建议至少把NMS的自写实现练到能默写的程度,同时能顺带回答IOU的计算公式和为什么NMS要按得分降序处理。

手撕代码的通用套路口诀是:先确认边界条件,再写主逻辑,最后手动跑一个测试用例验证。比如写卷积操作,输入尺寸、padding、stride、输出尺寸必须先算清楚,否则往往写到一半就乱了。平时训练时多用纸笔走查,面试时的熟练度会高很多。

6.3 面试中如何用项目经历佐证理论

八股背得再熟,如果没法把理论和自己的项目经历结合起来,分数也不会太高。我自己的经验是:准备面试时,把简历里每个项目都提炼出“技术挑战、实现方案、踩坑记录、最终收益”四段式描述,每个项目都要能对应到两三个八股知识点上。

比如你在一个工业质检项目里用了YOLOv8做缺陷检测,面试时必须能答上来为什么用YOLOv8而不是更快的模型,缺陷样本太少时你怎么做数据增强,有没有用过Focal Loss,训练时卡在多少mAP,最后用什么手段提上去的。这些问题看似随机,其实全部指向模型结构、损失函数、数据策略和评估指标这些基础理论。

我一直觉得,项目经历是最能考察一个人真实水平的部分。能把项目里的每个技术决策讲清楚原因,比背一百道八股题都有用。所以我不建议只刷题不看项目,而应该以项目为主线,把相关知识点的八股内容穿插进去复习。

结尾:一点自用笔记的体会

整理这份CV八股的过程,对我自己的帮助远超预期。最明显的感受是:以前很多知识点是“用过但说不清楚”,整理成卡片之后,被问到的时候能马上组织出有层次的回答。尤其是像BN推理和训练差异、RoI Align为什么替代RoI Pooling这类细节,背下来不算本事,能结合自己的实验体会讲出来才算真正掌握了。

如果你也在准备CV方向的面试,我建议不要直接抄别人的八股,而是拿这份清单做索引,自己亲手把答案写一遍。写的过程会逼你去查资料、去对比、去思考,这个过程本身就是最好的复习。后面我会继续在自用笔记里补充新的高频问题和工程踩坑记录,遇到值得分享的内容也会再更新出来。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询