准备计算机视觉方向秋招的朋友,对行业里流传出来的大厂笔试题多少都会留个心眼,毕竟这些题恰好能反映出一家公司真正看重的能力模型。顺丰科技2019年秋招视觉算法工程师的笔试客观题合集,就是圈子里传播度很高的一套。我当时刷完一遍的感受是:题目不算偏,但覆盖面极广,从图像处理基础到深度学习原理,再到目标检测里的实现细节,每一道题都在提醒你——基础不牢,笔试现场是真的会慌。这套题最值得参考的地方,在于它不靠超纲难题博眼球,而是把视觉算法工程师日常工作中最常用的知识,用一种“你必须真懂”的方式考了一遍。
这篇内容我打算从做题人的视角出发,把这套客观题涉及的知识点、常见易错点、备考方法和答题策略完整拆一遍。不管你是正在准备秋招的应届生,还是想检验自己基础是否扎实的从业者,这套题都能当一面镜子用。我会结合典型的题目形态和解题思路,把每一类考点掰开揉碎,顺便讲讲我当时踩过的坑和后来总结出来的复习方法。
1. 顺丰科技视觉算法岗笔试到底在考什么
视觉算法工程师这个岗位在不同公司干的活差别很大。有的偏自动驾驶,有的偏工业质检,有的偏内容推荐,而顺丰科技这类物流科技公司,视觉算法的落地场景非常具体。
1.1 物流行业的视觉算法应用场景
快递物流场景里视觉算法主要解决几类问题:快递面单上的文字识别(OCR方向)、包裹体积重量测量(3D视觉方向)、自动化分拣线上的包裹识别与定位(目标检测方向)、运输途中货物破损与异形件检测(异常检测方向),还有无人仓里AGV和机械臂的视觉引导(SLAM与位姿估计方向)。
这些业务场景决定了笔试的命题侧重点。你会发现这套题里几乎不会出现特别偏门的三维重建或者SLAM公式推导,更多是图像处理基础、卷积网络原理、目标检测模型演进这类“高频率使用、默认你已掌握”的内容。原因也很直接:公司招人是要到产线上干活的,那些天天用到的知识点如果不牢固,后面项目上手会非常痛苦。所以笔试阶段先用客观题把基础不扎实的候选人筛出去,是性价比很高的方式。
1.2 客观题背后的命题逻辑
客观题虽然只是选择题和判断题,但信息量其实不小。从题目分布就能看出一个团队的技术栈和关注点:图像处理占比多少,深度学习理论占比多少,数学基础占比多少,模型结构细节占比多少,这些都在暗示你入职以后要面对的工作内容。
我当时整理这套题的时候,把考点分成了五个模块:数字图像处理与经典CV、机器学习基础、深度学习原理、数学与优化基础、目标检测与分割任务。这五个模块基本上是视觉算法岗位笔试的“标准套餐”,只是不同公司的侧重比例不一样。顺丰科技的这套题里,图像处理和深度学习原理的比重最高,目标检测相关题目也占了不少,机器学习基础相对少一些,数学题则穿插在各类计算题里考察。了解这个框架以后,你会发现复习的时候完全有迹可循,不需要漫无目的地刷题。
2. 核心考点模块拆解:每个知识点都值得重新过一遍
很多同学复习视觉算法笔试喜欢直接刷LeetCode或者背八股,但客观题考察的往往是概念辨析和快速计算能力,背题效率很低。我把这套题涉及的五个模块按考频和重要性整理了一遍,逐个说明到底需要掌握到什么程度。
2.1 数字图像处理基础:高频但容易丢分的板块
图像处理基础是视觉算法岗笔试的必考板块,难度不大但陷阱不少。高频考点集中在滤波、边缘检测、形态学、直方图操作和色彩空间转换这几类。
滤波这块,高斯滤波、均值滤波、中值滤波各自的特性和适用场景必须要能说清楚。高斯滤波用加权平均的方式平滑图像,对高斯噪声效果好;中值滤波取邻域中位数,对椒盐噪声的抑制能力突出,同时能比较好地保留边缘;均值滤波实现简单但会模糊边缘。笔试里经常会给你一张带噪声的图和几类噪声类型,让你选对应的滤波方式,本质上考的就是这个。
边缘检测是另一个必考方向。Canny边缘检测的完整步骤要能默写:高斯滤波降噪、计算梯度幅值与方向、非极大值抑制、双阈值检测和滞后连接。Sobel算子和Scharr算子主要用于计算梯度,其中Scharr是对Sobel的改进,权重更大、对边缘响应更强烈。有一类题会考你“为什么Canny要先做高斯模糊”,答案是为了减少噪声对梯度计算的干扰,避免把噪声当边缘检测出来。
形态学操作也经常出现。腐蚀是求局部最小值,作用是收缩前景、去除小白点;膨胀是求局部最大值,作用是扩展前景、填补小洞;开运算是先腐蚀后膨胀,用来去除小的亮斑;闭运算是先膨胀后腐蚀,用来填补小的暗洞。这四个操作一定要分清先后顺序及各自用途,笔试中常以“下列哪个操作可以用来去除二值图像中的细小噪点”这类形式出现。
直方图均衡化考的是原理理解。它通过累积分布函数对灰度值做映射,让输出图像的灰度直方图分布更均匀,从而提升对比度。这里容易混淆的点是:直方图均衡化并不保证直方图完全平坦,它只是让灰度级分布更舒展。还有一道经典计算题会问你“3x3的均值滤波对图像反复执行,最终会得到什么效果”,反复平滑后图像会趋向于一个均匀的灰度区域,细节逐渐消失。
2.2 机器学习基础:混淆概念集中区
机器学习基础这部分,视觉岗位笔试不会考太深的推导,但基本概念必须非常清晰,尤其是几个容易混淆的概念组合。
损失函数是必考内容。分类任务里交叉熵损失和MSE的对比是高频中的高频。为什么分类不用MSE?核心原因是MSE对错误分类的梯度在饱和区会变得很小,收敛速度慢;而交叉熵配合Softmax的梯度形式简洁,在概率输出场景下有更好的优化性质。有一类判断题会考“精度高就一定说明模型好”,这是一个典型的陷阱题,在样本不均衡的场景下,精度高没有任何意义,比如99%都是负样本,模型全预测负样本精度也有99%。
过拟合的识别和应对也是必考方向。哪些手段能抑制过拟合:L1/L2正则化、Dropout、数据增强、早停、降低模型复杂度。这里要注意L1和L2的区别:L1产生稀疏解,倾向于把不重要的特征权重压成0;L2只是让权重整体变小,不会产生稀疏。还有一道容易做错的题,问“增加训练数据一定可以缓解过拟合吗”,答案是未必,需要看新增数据的分布是否与原始数据一致,以及是否引入了更多噪声。
评估指标的辨析一定要吃透。Accuracy、Precision、Recall、F1、AUC、mAP这些指标的定义和适用场景必须了然于胸。尤其在类别不平衡的检测场景下,Precision和Recall往往此消彼长,F1是两者的调和平均,而mAP则是目标检测里综合评估模型性能的标准指标。笔试中常会给你一组TP、FP、FN数量,让你计算Precision或Recall,这类题只要公式不出错基本没问题。
2.3 深度学习核心知识:计算题的重灾区
深度学习部分是整套题里真正拉开差距的地方,因为它既考概念又考计算。最常见的计算题是卷积输出尺寸和参数量计算。
卷积输出尺寸的公式必须烂熟于心:输出尺寸 = (输入尺寸 + 2 x padding - kernel_size) / stride + 1。如果除不尽,需要向下取整。比如输入11x11的特征图,用4x4卷积核,padding=1,stride=2,输出尺寸就是(11 + 2 - 4)/2 + 1 = 5,结果是5x5。这类题每次都必须一步步算,不能凭感觉猜。参数量计算则是kernel_height x kernel_width x input_channels x output_channels,还要注意是否包含bias,有bias就再加一个output_channels。
感受野也是一个常考概念。感受野是指输出特征图上某个位置对应输入图像上的区域大小。两层3x3卷积叠加的感受野等效于一层5x5卷积,三层3x3卷积等效于一层7x7卷积。为什么很多网络用堆叠小卷积核代替大卷积核?原因有三个:参数量更少(3x3两层共18个参数,5x5单层25个参数)、非线性更强、感受野更大。这个知识点在客观题里出现过不止一次,要特别注意。
Batch Normalization的作用常被简化为“加速收敛”,但笔试里如果遇到更细的题,得知道它是在每个batch内对特征做归一化,使其均值为0、方差为1,然后通过可学习的缩放和平移参数恢复表达能力。BN能有效缓解内部协变量偏移问题,允许使用更大的学习率,还具有一定正则化效果。
梯度消失和梯度爆炸的应对措施也是高频题。ResNet里的残差连接就是典型的缓解梯度消失设计,因为恒等映射的梯度可以无损回传。激活函数ReLU相比Sigmoid的优势包括计算简单、缓解梯度消失、产生稀疏激活,但ReLU也有神经元死亡问题,所以后续又出现了LeakyReLU、ELU这类变体。这套题里如果考激活函数,大概率是在考你这些对比维度的理解。
2.4 数学与优化基础:别在这些题上丢冤枉分
数学部分占比不大,但一旦丢分就很可惜。矩阵特征值和特征向量的定义要清楚:对于方阵A,若存在非零向量v和标量λ使Av = λv,则λ是特征值,v是对应特征向量。矩阵的迹等于所有特征值之和,行列式等于所有特征值之积,这两个性质是选择题里的常见考点。
优化算法方面,SGD、Momentum、RMSProp、Adam的区别要能区分。SGD收敛慢且容易震荡;Momentum通过累积历史梯度来抑制震荡、加速收敛;RMSProp对每个参数自适应调整学习率;Adam结合了Momentum和RMSProp的思路,是实践中用得最多的默认选择。有一类判断题会问“学习率越大收敛越快”,这个说法是错的,学习率过大会导致损失震荡甚至发散。
概率方面,贝叶斯公式要能熟练应用。给一个先验概率和似然概率,计算后验概率是常见的出题方式。信息熵的定义也要知道,熵越大表示系统不确定性越大。KL散度用于衡量两个概率分布之间的差异,它是非对称的,也就是说KL(P||Q)不等于KL(Q||P),这个非对称性是一个经典陷阱。
2.5 目标检测与分割:紧跟技术演进脉络
目标检测是视觉算法岗位笔试的重头戏,因为这直接对应业务场景。从R-CNN到Fast R-CNN再到Faster R-CNN的演进逻辑一定要理清楚:R-CNN用Selective Search生成候选区域,然后对每个候选区域分别做CNN特征提取和SVM分类,速度极慢;Fast R-CNN把特征提取提到全图层面,通过RoI Pooling直接从特征图上抠区域,速度和精度都有提升;Faster R-CNN引入RPN(Region Proposal Network)网络来生成候选区域,把整个检测流程变成了端到端的网络。这块如果出排序题,要能准确排出三代模型的演进顺序和各自改进点。
YOLO系列的特点是单阶段检测,直接回归目标框和类别,速度优势明显。从YOLOv1到YOLOv5(以及后续版本),改进的方向包括多尺度预测、Anchor机制、特征金字塔等。这里常考的一个问题是“单阶段检测和双阶段检测的核心区别”,双阶段先提候选框再做精细分类,精度更高但速度慢;单阶段直接回归,速度快但小目标检测精度相对弱一些。
分割任务里,FCN是图像语义分割的开山之作,用全卷积结构替代全连接层,可以接受任意尺寸输入。U-Net采用编码器-解码器结构加跳跃连接,在医学图像等小样本场景表现突出。DeepLab系列则引入空洞卷积来扩大感受野。客观题常考这些网络结构的核心设计思想,比如“U-Net的跳跃连接解决了什么问题”,答案是融合浅层细节信息和高层语义信息,改善小目标分割效果。
评估指标IoU和mAP也要重点掌握。IoU计算两个框的交集面积除以并集面积,范围是0到1。mAP则是先对每个类别计算AP(PR曲线下的面积),再对所有类别取平均。有一类题会给你两个框的坐标,让你手动计算IoU,这种题只要坐标系画对基本稳拿分。
3. 典型客观题实战解析:跟着题目过一遍思路
光讲知识点容易让人觉得自己都会,但一上手就懵。我从这套题的常见形态里整理了一些有代表性的题目,每一道都给出完整的解题思路,帮你把上一部分的知识点落到实处。
3.1 图像处理类题目实战
题目1:对一幅被椒盐噪声污染的灰度图像,下列哪种滤波方式效果最好? A. 均值滤波 B. 高斯滤波 C. 中值滤波 D. 拉普拉斯滤波
答案是C。这道题的核心在于椒盐噪声的特点是图像上随机分布的白点和黑点,中值滤波取邻域中位数,可以有效地把这种极值点剔除掉。均值滤波和高斯滤波对这种噪声虽然也有一定平滑作用,但会在去除噪声的同时严重模糊边缘和细节,效果远不如中值滤波。
题目2:对一幅800x600的RGB彩色图像执行3x3均值滤波,输出图像的尺寸是多少? A. 800x600 B. 798x598 C. 802x602 D. 无法确定
答案是A。这里有个容易忽略的点:如果卷积操作使用same padding(在图像周围填充边界),输出尺寸保持与输入一致;如果valid padding(不填充),输出尺寸才缩小。题目里没有明确说明padding时,通常默认是same padding操作。“滤波会使图像变小”是一个常见误区,但取决于边界处理方式。
题目3:直方图均衡化后的图像,下列描述正确的是? A. 直方图完全平坦 B. 对比度一定提升 C. 灰度级数一定减少 D. 变换函数是单调递增的
答案是D。直方图均衡化的映射函数是基于累积分布函数构造的,累积分布函数一定是单调递增的,所以D正确。A错在均衡化只是让直方图更均匀,很难做到完全平坦;B选项容易混淆,对比度通常提升但也不绝对,如果原图直方图本身已经均匀,均衡化后变化不大;C则明显错误,灰度级数不变。
3.2 深度学习与计算类题目实战
题目4:输入特征图尺寸为11x11,卷积核尺寸为4x4,padding=1,stride=2,输出特征图尺寸为? A. 4x4 B. 5x5 C. 6x6 D. 7x7
答案是B。套公式:(11 + 2x1 - 4) / 2 + 1 = (13 - 4)/2 + 1 = 4.5 + 1 = 5.5,向下取整再加1,实际计算顺序是(11 + 2 - 4) / 2取整后加1,(11 + 2 - 4)/2 = 4.5,向下取整为4,再加1等于5,所以是5x5。这类题必须把公式写出来,不要心算,尤其是除不尽的情况很容易出错。
题目5:一个卷积层的输入通道数为64,输出通道数为128,卷积核尺寸为3x3,不使用bias,该层参数总量为? A. 73728 B. 65536 C. 18432 D. 2048
答案是A。计算方式:3x3x64x128 = 9x64x128 = 73728。这类题一出来就要条件反射地写出公式:kernel_h x kernel_w x in_channels x out_channels。如果题目说包含bias,就在结果上再加out_channels。不看通道数直接算9x128的人不在少数,一定要仔细审题。
题目6:关于Batch Normalization,下列说法错误的是? A. 训练和推理时使用相同的归一化统计量 B. 可以允许更大的学习率 C. 对每个batch内的数据做归一化 D. 具有一定的正则化效果
答案是A。训练时BN使用当前mini-batch的均值和方差做归一化,推理时则使用训练过程中累计的全局均值和方差。如果把训练和推理时的统计量混为一谈,这个选项就是对的,但题目问的是错误说法,所以A是正确答案。BN已经成为卷积网络标配,这个细节必须掌握。
3.3 数学与机器学习类题目实战
题目7:矩阵 [[2, 0], [0, 3]] 的特征值之和为? A. 2 B. 3 C. 5 D. 6
答案是C。矩阵的迹等于特征值之和,这个矩阵的迹是2+3=5。如果单独算特征值也能算出来:对角线矩阵的特征值就是对角线元素,分别是2和3,和为5。这类题就是送分题,关键是要知道“特征值之和=矩阵的迹”这个快速计算的结论。
题目8:二分类问题中,正样本100个,负样本9900个,模型把所有样本都预测为负样本,则Accuracy和Recall分别是多少? A. Accuracy 99%,Recall 100% B. Accuracy 99%,Recall 0% C. Accuracy 1%,Recall 0% D. Accuracy 1%,Recall 100%
答案是B。Accuracy = 正确预测数 / 总数 = 9900 / 10000 = 99%;Recall = TP / (TP + FN),所有正样本都被预测为负,TP=0,所以Recall=0%。这类题给了一个非常典型的样本不均衡场景,也侧面说明了为什么只看Accuracy是不够的。如果面试官问你怎么评价这个模型,正确答案是不好用单一指标评价,应该综合看Precision、Recall、F1或者AUC。
题目9:Softmax输出[0.1, 0.2, 0.7]对应的one-hot标签是[0, 0, 1],该样本的交叉熵损失为? A. -ln(0.7) B. -ln(0.1) C. -(ln0.1 + ln0.2 + ln0.7) D. ln(0.7)
答案是A。交叉熵损失的计算公式是 -Σy_i * ln(p_i),其中y_i是one-hot标签。由于只有y_3=1,其他项都为0,所以损失等于 -ln(p_3) = -ln(0.7)。这道题本身不难,但能帮大家区分交叉熵和负对数似然的关系,以及one-hot编码下损失函数退化为只关注正确类别的概率。
3.4 客观题答题策略与时间分配
答题策略上,我的经验是第一轮先把所有有把握的题快速过一遍,标记不确定的题,第二轮再回来推敲。原因很简单:客观题一般题量大、单题分值不高,在一道计算题上死磕5分钟很可能导致后面简单题没时间做,性价比极低。
对于计算类题目,我的习惯是哪怕再简单的公式也在草稿纸上写一遍。卷积尺寸计算这类题非常容易因为记错公式而做错,特别是有padding有stride又除不尽的时候。手写一遍看似浪费时间,实际比心算出错后反复检查快得多。
对于概念辨析类题目,强烈的单选项往往藏着陷阱。比如“下列说法错误的是”,意味着至少有三个选项是正确的,这时候用排除法先把明显正确的划掉,再对比剩余两个选项的细微差别,准确率会提高很多。我总结的规律是:凡是出现“绝对化”表述的选项,比如“一定”“完全”“所有”,大概率是错误项;凡是出现“可以”“通常”“有助于”这类留有余地的表述,大概率是正确项。
4. 备考路线和实用建议
如果你正在准备类似的视觉算法岗笔试,这套题的复习路线可以按两阶段来安排。
4.1 两个月备考时间线
第一个月主攻基础概念扫盲。图像处理部分把冈萨雷斯的《数字图像处理》前几章过一遍,核心是滤波、边缘检测、形态学和直方图操作,课后习题里涉及概念辨析的题目都做一遍。深度学习部分以李沐的《动手学深度学习》为主,CNN章节要认真看,重点理解卷积计算的参数、感受野推导和BN原理,每章后面的练习至少完成计算题部分。这个阶段不求速度,但求每个概念都能用自己的话说清楚。
第二个月进入刷题和查漏补缺阶段。把历年各大厂的视觉算法客观题集中刷一遍,每道错题都要记录到错题本上,并且至少写清楚三个内容:错在哪、为什么错、正确答案的依据是什么。刷题的目的不是背题,而是找到自己的知识盲区。比如我当时刷完第一轮以后发现,ResNet的具体结构细节总是记混,后来专门花了一个下午把ResNet18/34/50的层数和通道数变化画成了表格,反复记忆后就再也不错了。
最后一个星期做模拟练习,严格控制时间,模拟真实的笔试场景。我建议用电脑做题而不是手机,因为很多笔试平台是在电脑上操作的,提前适应读题节奏和打字方式很重要。
4.2 资料选择与高频知识清单
资料方面我的建议是宁精勿多。以“Cs231n课程笔记+《动手学深度学习》+冈萨雷斯《数字图像处理》+历年真题”为核心就够了。网上流传的各种“面经汇总”可以作为补充,但不能作为主要复习资料,因为很多内容整理质量参差不齐,信息滞后或者错误的情况并不少见。
复习过程中建议整理一份自己的高频知识清单,把容易出题的知识点都列出来,反复自测。我当时的清单大概是这样的:图像处理部分包括高斯滤波、中值滤波、Canny步骤、直方图均衡化、腐蚀膨胀开闭运算;深度学习部分包括卷积输出尺寸、参数量计算、感受野、BN原理、梯度消失解决思路、ResNet和MobileNet的设计思想;检测部分包括R-CNN系列演进、YOLO核心思想、IoU计算、mAP定义、Anchor的概念。这些内容几乎覆盖了客观题80%以上的考点,把这份清单吃透了,笔试基本不会慌。
4.3 笔试现场的几个实用细节
最后说几个笔试现场容易忽略的细节。一是审题一定要慢,尤其是“下列说法错误的是”和“下列说法正确的是”,一字之差答案天壤之别。我在真实笔试里就吃过这个亏,看到“错误的是”直接按“正确的是”来选,丢分丢得非常亏。二是遇到不会的题先跳过,客观题一般答对得分答错不扣分,即使完全不会也要蒙一个答案填上,绝不能留空。三是时间分配上,概念题尽量控制在30秒内,计算题最多3分钟,超过时间就标记后跳过。四是如果笔试平台允许返回修改,做完以后一定要检查一遍计算题,这类题只要算错一步,答案基本就错了,重新算一遍也就是一两分钟的事。
从我个人的备考经验来看,这套顺丰科技的客观题合集并不是那种你做一遍就能背下来的题库,而是一个很好的知识体检工具。它的价值不在于具体的题目本身,而在于通过这套题暴露出来的知识盲区,才是真正值得花时间的地方。如果你能把上面这些考点和计算全部掌握,不光这套题能应对,其他公司的视觉算法笔试也基本能稳住阵脚。最后再分享一个小技巧:做题遇到不确定的选项时,先用自己的话把每个选项的核心概念复述一遍,很多时候说着说着正确答案自己就浮现出来了。希望这篇拆解能帮你在准备视觉算法岗位笔试的路上少走一些弯路。