十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

2018迅雷计算机视觉校招笔试解析:基础考点与备考经验

2018迅雷计算机视觉校招笔试解析:基础考点与备考经验 2018年那个秋天我在牛客网上点开迅雷校园招聘计算机视觉岗位在线笔试A卷的时候心里其实没底。那时候计算机视觉已经热得发烫但真正能把基础概念吃透的人并不多。迅雷这家公司很有意思它做下载起家后面又深挖视频云和内容分发对CV岗的考察并没有一味追求花哨的模型结构而是在基础扎实度上反复做文章尤其是传统图像处理、卷积网络原理和经典检测算法题目设计得相当有针对性。如果你正在准备算法岗或CV岗的校招笔试或者想看看2018年互联网公司对计算机视觉基础能力的考察方向这篇复盘应该能帮你少走不少弯路。1. 整体题目结构与考察逻辑1.1 题型构成与时间分配先说一下这份卷子的整体感受。A卷整体时间在90到120分钟之间题目分为三类单选题、多选题和编程题另外还会穿插两到三道简答题。单选的覆盖面很广从线性代数到概率统计从图像滤波到卷积神经网络的参数计算基本是地毯式排查知识面。多选题的难度明显上了一个台阶选项之间的区分度很高稍不留神就会多选或者漏选。编程题一般是两道一道偏传统算法一道偏图像处理或数组操作。简答题通常集中在目标检测、特征提取这些CV核心话题上。我当时拿到题之后的第一反应是这份卷子不是在考你背过多少篇论文而是在看你有没有真正动手算过、真正用过这些方法。比如感受野的计算、卷积输出尺寸的推导、反卷积的作用这些都不需要你读过原论文但你只要做过一次卷积操作或者画过一次网络结构图就一定能答对。从考察逻辑来看迅雷作为视频云服务商比较关注基于内容的视频理解和图像分类落地所以深度学习基础、图像基础、特征工程这三块是大头。偏门冷门的方向比如光流估计、点云处理基本没有涉及。1.2 在线笔试的实战环境差异在线笔试和现场笔试最大的不同在于你需要在自己的电脑上完成答题同时浏览器会监控屏幕。编码时只有基础的编译器没有自动补全所以平时习惯用IDE写代码的人需要提前适应裸写代码的节奏。笔试过程中可以使用本地调试但一旦切换窗口次数过多系统可能提醒甚至判违规这一点要注意。我的建议是笔试前先安装好本地Python环境以及OpenCV、NumPy库方便在编程题里快速验证图像处理算法的思路。不要依赖在线编辑器自带的运行环境它经常缺包或者版本不对。2. 计算机视觉核心考点拆解2.1 卷积神经网络基础计算题卷积神经网络的参数计算是A卷里躲不掉的内容而且每次考法都不太一样。常见的有四种考法给定输入尺寸和卷积核参数求输出尺寸给定网络结构求感受野给定网络求参数量以及比较不同卷积方式的计算量。先说输出尺寸公式。假设输入尺寸为H卷积核大小K填充P步长S输出尺寸由下面的公式计算得出。[ O \frac{H 2P - K}{S} 1 ]举个例子输入224×224×3卷积核7×7S2P3那么输出尺寸就是(224 6 - 7) / 2 1 112通道数看卷积核数量比如64那么输出就是112×112×64。这道题之所以容易错是因为很多人把padding和S的优先级搞混。先算分子H 2P - K取整后再除以S最后加1。还有就是在S不能整除的情况下向下取整这是很多在线笔试的隐藏坑。然后说感受野计算。感受野这个概念面试官特别爱问因为它是理解卷积网络结构的基础。从最深层往输入层递推公式是[ RF_{i-1} (RF_i - 1) \times S_i K_i ]比如两层3×3卷积S均为1第一层感受野是3第二层感受野就是(3-1)×135。这就是为什么很多人说两层3×3卷积等价于一层5×5卷积但参数量更少、非线性更强。A卷里有一道题问1×1卷积的作用这也是高频考点。1×1卷积可以改变通道数、实现跨通道信息交互同时它实际上是一种通道维度的全连接操作。在ResNet的Bottleneck结构里先用1×1降维再用3×3卷积最后用1×1升维就是为了减少计算量。2.2 经典网络结构与特征提取方法2018年的时候ResNet、VGG、GoogLeNet已经是家喻户晓了DenseNet和SENet也开始被频繁提及。迅雷的笔试更倾向于考VGG和ResNet的对比比如VGG为什么用多个小卷积核替代大卷积核ResNet的残差结构解决了什么问题。这里有个容易混淆的点残差结构解决的是梯度消失问题吗严格来说它缓解的是深层网络退化问题也就是训练误差反而升高的问题。梯度消失当然也有缓解但核心贡献是让梯度可以跳过中间层直接传播使数十层甚至上百层的网络变得可训练。特征提取方面笔试除了深度学习还会捎带考察SIFT、HOG这些传统特征。HOG对光流和边缘方向敏感适合行人检测SIFT具有尺度不变性适合图像配准和拼接。它们的区别一张表就能说清楚。特征核心思想关键特性典型应用SIFT尺度空间极值检测尺度不变、旋转不变图像拼接、物体识别HOG梯度方向直方图对光照变化鲁棒行人检测LBP局部二值模式灰度不变性、计算快纹理分类、人脸识别Haar矩形特征差值特征简单、配合级联人脸检测2.3 目标检测算法演进脉络简答题里最可能出现的就是让你对比Faster R-CNN和YOLO这两种检测框架。这个问题可以从多个角度展开两阶段和一阶段、精度与速度的取舍、锚点机制、后处理方式。Faster R-CNN的核心贡献是引入了RPNRegion Proposal Network把候选框生成这个过程也交给网络学习实现了端到端的训练。它先粗略找出可能包含物体的区域再对这些区域做分类和回归所以精度高但速度偏慢。YOLO的思路完全不同它把检测当成回归问题一张图直接划分成网格每个网格预测若干个边界框和类别概率。没有显式的候选区域生成过程速度快了非常多但对小目标和重叠目标的检测效果不如Faster R-CNN。R-CNN系列的三个版本演进也是一个经典考点。R-CNN用选择性搜索生成候选框再对每个候选框分别做卷积速度很慢Fast R-CNN引入ROI Pooling把整张图的卷积结果复用大幅提升速度Faster R-CNN的RPN把候选框也并入网络从而实现了真正意义上的端到端检测。如果你自己动手训练过这些模型就会发现从Faster R-CNN到YOLO的演进不只是在改网络结构而是整个设计哲学的转变。两阶段方法追求定位精度一阶段方法追求速度和精度的平衡这也是工业落地场景中做技术选型的核心依据。3. 典型题目实战解析3.1 选择题经典实例先说一道印象非常深的选择题题干是这样输入特征图大小为32×32×16经过一个3×3卷积padding为1stride为2最后接一个2×2的最大池化步长为2。问输出特征图的宽和高是多少。这道题的陷阱在于不能用32直接除以2再除以2来做必须先算卷积输出。(32 2 - 3) / 2 1 16最大池化后是8。如果你跳步计算就容易得出16这个错误答案。这个考点就是公式的准确性。另一道常见的选择题是关于反向传播中梯度消失的原因。选项里会有网络过深导致梯度连乘越来越小、激活函数导数小于1、权重初始化不合理、学习率过大。正确答案是前三者学习率过大一般会导致梯度爆炸或者震荡不是梯度消失的直接原因。这种多选题最能拉开差距。3.2 编程题完整代码编程题我记得有一道是实现一个简单的二维卷积操作输入是一个单通道矩阵和一个卷积核要求输出卷积结果。如果直接用Python实现核心代码可以这样写。def conv2d(image, kernel, stride1, padding0): h, w len(image), len(image[0]) kh, kw len(kernel), len(kernel[0]) padded_h h 2 * padding padded_w w 2 * padding padded [[0] * padded_w for _ in range(padded_h)] for i in range(h): for j in range(w): padded[i padding][j padding] image[i][j] out_h (padded_h - kh) // stride 1 out_w (padded_w - kw) // stride 1 result [[0] * out_w for _ in range(out_h)] for i in range(out_h): for j in range(out_w): region [padded[i*stride m][j*stride n] for m in range(kh) for n in range(kw)] result[i][j] sum(region[m] * kernel[m // kw][m % kw] for m in range(kh * kw)) return result这道题考察的点很明确padding的正确处理、stride的索引计算、维度匹配。我建议你用NumPy实现一遍再手写一遍两道都写顺了笔试基本不会卡壳。如果题目加了batch和channel就再加两层循环注意维度顺序。另一道编程题更偏传统算法一般是动态规划或者二分法。有一道很典型的题给定一个数组找出连续子数组的最大和要求复杂度O(n)。这个就是经典的Kadane算法。def max_subarray_sum(nums): if not nums: return 0 max_ending_here nums[0] max_so_far nums[0] for num in nums[1:]: max_ending_here max(num, max_ending_here num) max_so_far max(max_so_far, max_ending_here) return max_so_far笔试的时候不能只是把代码写对还要分析空间复杂度。如果直接开一个和原数组等长的dp数组空间复杂度是O(n)但最优解只需要两个变量空间复杂度O(1)这就能体现你对算法的理解深度差距就是这样拉开的。3.3 简答题高分策略简答题一般不会要求你写长篇大论但需要逻辑清晰、关键词到位。比如问“请简述Batch Normalization的作用”你至少要写到四个方面加速收敛、缓解梯度消失、对初始化不那么敏感、有一定的正则化效果。如果问你“为什么目标检测中常用非极大值抑制NMS”你要先解释NMS做了什么在检测出的众多候选框中按置信度排序然后移除与最高置信度框重叠度过高的其他框再在剩余框里重复这个过程最终保留每个物体最合适的框。如果不做NMS一张图里同一个物体会出现几十个重叠的预测框无法直接使用。我在笔试里总结出的简答题回答公式是背景一句话原理两三句公式或流程两三句优缺点和适用场景三四句。控制在四到六行左右既不冗长又能覆盖到采分点。4. 高频易错点与避坑指南4.1 卷积计算的隐性陷阱卷积计算最大的难点不是公式记不住而是对padding和stride的组合理解不透彻。很多人在padding1、stride2这种配置下会算错因为直觉上觉得自己在扩大输入不会减少那么多但实际公式算出来就是会缩小。还有一种考法是在计算量上做文章。比如问两个3×3卷积和一个5×5卷积在相同输入下的计算量对比。两个3×3卷积的感受野等价于一个5×5但是计算量更小。假设输入通道和输出通道都是C一个5×5卷积的计算量是25×C²×H×W两个3×3卷积是18×C²×H×W后者节省了接近30%的计算量。4.2 深度学习原理常见误区反向传播的梯度计算是笔试选择题里的常客很多人会在链式法则的系数上栽跟头。如果你对sigmoid函数求导不熟建议背一下sigmoid的导数是σ(x)(1-σ(x))这个值最大只有0.25。多层连乘之后梯度衰减非常快这就是梯度消失的数学根源。另外还要区分L1和L2正则化的区别。L1会让部分权重变成零产生稀疏解相当于特征选择L2是让权重整体变小但不会为零。有些题目会问“哪些方法可以防止过拟合”选项里有数据增强、Dropout、早停、权重衰减、正则化。除了这五样增加训练数据也可以但增加模型复杂度反而会过拟合。4.3 时间分配与答题次序在线笔试的得分策略很简单先做有把握的题再做需要推敲的题最后攻克没思路的题。我建议的顺序是单选前10题、编程题第一题、多选、简答、剩下的题。编程题如果20分钟内没有思路必须先跳过后面时间再回来补。有一类题我不建议轻易跳过就是计算卷积输出尺寸或感受野的题目因为只要掌握公式就能拿分这种分数放弃太可惜了。反倒是那种描述很含糊、选项全是“以上都正确”的题目可以直接标记放到最后。简答题放在多选题后面答还有一个原因是大脑在从“区分细节”切换到“组织表达”时需要时间提前写下关键词也能防止写着写着跑偏。我当时就是把“归一化”“平移不变性”“锚点”这些词先写在草稿纸上再逐条展开效果很好。5. 备考路径与实用心得5.1 知识体系怎么搭建如果是快速准备这种校园招聘笔试我还是建议搭建一个自己的知识金字塔。最底层是数学基础包括线性代数里的矩阵乘法、特征值分解概率论里的贝叶斯公式、高斯分布中间层是机器学习基础包括模型评估指标、SVM、决策树、聚类上层是深度学习包括卷积网络、循环网络、训练技巧、目标检测和分割。刷题方面LeetCode上高频的数组、字符串、动态规划、二分查找题要刷得特别熟练不用刻意追求难题笔试难度通常在LeetCode Medium偏下。牛客网上有大量往年校招笔试真题尤其是机器学习算法岗的题库价值很高不过做题时不要只看题解要动手算一遍。5.2 简答题如何准备才稳准备简答题不能靠背而是靠理解之后用自己的话复述。比如“请解释ROI Pooling的作用”如果你只背了定义一旦题目变成“ROI Pooling的量化误差来自哪里”就会卡住。ROI Pooling把感兴趣区域的边界量化到特征图网格上这个过程本身有位置偏移这就是量化误差的由来。后面的ROI Align用双线性插值替代量化就是针对这个问题的改进。一个比较实用的方法是做索引卡片。每张卡片正面写一个概念或算法名字背面写四行内容定义、核心公式或流程、优缺点、典型应用场景。每天抽二十张过一遍坚持两周以后简答题基本上看到题面就能自动想出回答框架。5.3 笔试与面试的综合衔接笔试结束后大概一周内会收到面试通知所以笔试复盘一定要做。我当时把A卷里所有做错的题整理成了一个Excel分了三列题目、我的错误答案、正确思路。面试时被问到类似问题我能直接说出当时踩坑的经历反而给面试官留下不错的印象。计算机视觉岗位的面试通常包含项目深挖、现场算法题和论文问答三个环节。笔试中暴露出的薄弱点比如传统特征提取不熟、NMS原理说不清很可能就是面试官追问的方向。所以笔试复盘不仅仅是改错更是一次针对性的查漏补缺。结束前的一个小建议我后来发现计算机视觉笔试最核心的能力其实是“把公式推导到熟练、把流程描述到清晰”。很多人栽跟头不是因为不会而是因为平时都是用框架调用接口从没自己算过卷积尺寸没自己推过感受野。准备任何校招笔试时多动手算一算多手写一下过程比盲目刷一百道题更加有效。尤其是卷积计算和反向传播这两个基本功只要你真的写一次推导过程记忆会牢固很多。希望这份复盘能对你的校招之路有点帮助。
返回列表