旷视科技算法面经秘籍
《AI未来星球》陪伴成长的人工智能社群,价值过万的各种内部资源及活动,限时特惠中,点击查看。
求职跳槽福利:为了便于大家求职、跳槽的准备,大白将45家大厂的面经,按照知识框架,整理成700多页的《人工智能算法岗江湖武林秘籍》,限时开放下载,点击查看下载。
面经整理历程:经过一年多的努力,大白整理了超过3500篇,各类大厂的算法面经资料。
并将涉及到的知识点,按照知识框架,分类汇总,每个公司整理成一篇,比如本文的旷视科技面经。
大家对照面经,可以了解心仪的公司,会根据你的简历,问哪些知识点?便于大家对掌握的知识,进行回顾梳理。
希望为大家在求职或者跳槽的道路上,提供一些帮助,为大家取得心仪的offer助力。
面经整理心得:大白也将整理所有面经的心得,写成了一篇文章,点击查看心得。
其他大厂面经:国内其他大厂的面经汇总,点击查看目录。
旷视科技面经整理:江大白
1 旷视科技面经汇总资料
1.1 面经汇总参考资料
① 参考资料:
(1)牛客网:旷视科技面经-36篇,网页链接
(2)知乎面经:点击进入查看
(3)面试圈:点击进入查看
② 面经框架及参考答案:
(1)面经知识框架:点击进入查看
(2)面经参考答案:点击进入查看
1.2 面经涉及招聘岗位
(1)实习岗位类
【图像算法实习生】
(2)全职岗位类
【图像算法工程师】、【算法研究员】
1.3 面试流程时间安排
PS:以上流程为大白总结归纳所得,以供参考。
其他注意点:
● 最后的终面可能是某个大佬,比如孙剑,喜欢问细节,问得特别细,对细节比较在意。开始仍然是介绍研究经历,不过和其他所有面试相比,最大不同在于孙剑老师会不停的发问,不断challenge。之后便是向孙剑老师提问。整个下来大概45分钟。
● 最后的终面,也可能会让你基于项目在白板上画模型结构讲解(个人感觉比较侧重考察交流能力)。 也会问开放性题目,自己研究领域的一些问题,还有自己的看法以及解决思路。
1.4 旷视科技面试心得汇总
★ 一面问得很细,每一个项目的每个细节都要问为什么不用其他方法?
★ 问得很深入,基本都要非常理解才行,提到某个细节之后可能会深入问这个细节更细节的东西,千万别在回答的时候给自己挖坑。
★ 一面问项目技术问得很多,二面二面考基本功,数学算法和ML的熟练运用能力,问算法逻辑设计问得很多。
★ 三面问整体的项目,前沿知识,比如(最新的网络结构、精度最高的目标检测模型等)
★ 三面一般会问一些本质,感觉和一二面问技术细节不同,你可以不知道细节,但一定要清楚为什么这么做。同样会一些研究前沿的问题,主要还是要有自己的思考,调参侠真的不可取。懂一点高级的抽象数学还是最好。
★ 每一面都是概率/代码题,加项目实习经验,另外可以准备一下:个人职业规划、优缺点等以及一些提问问题(技术层面和其他层面都可以准备一下)。
★ 会结合自己负责的一个项目,在该项目中是如何安排整个进度以及项目开展中比较难的部分。
★ 总的来说,就是基础coding能力必须过关,至少offer上的题目以及leetcode一些关于数组和字符串的中等题得会,问科研部分会问的很深,很细节,会让在纸上画出model structure并给出原因,另外就是,最好能在自己领域做到相对深的情况下,去开阔视野,多follow其他领域的paper,尽量又深又广。做题过程中面试官会一直引导,就算刚开始不会也不要慌,重点是考察思考问题的方法和角度。
2 旷视科技面经涉及基础知识点
2.1 图像处理基础
● 图像旋转、旋转矩阵、像素点怎么填充?
● SIFT算子的尺度空间因子怎么设置?
● 讲讲Canny算子的算法?
2.2 深度学习:CNN卷积神经网络方面
2.2.1 讲解相关原理
2.2.1.1 卷积方面
● 空洞卷积的具体实现?
● 两个卷积核大小为(3,3),步长为(2,2)的卷积层堆叠,上层感受野大小是?
● Deformconv的原理?
● 问mobilenet_v2 1*1卷积作用?
● 常用扩大感知野的方法
2.2.1.2 网络结构方面
● Inception v1-v4的区别、改进?
● VGG16和Resnet152哪个参数量多?
● 说说Densenet的优势?
● 谈谈ResNet结构?ResNet 的特点
● 讲一下SENet的模块,为什么有性能提升,有什么好处?
● 模型轻量化了解吗,讲一下?mobileNet v1, v2。
● 介绍了解的神经网络(说了lenet,alexnet,googlenet,inception v1-v4, resnet,densenet,mobilenet)
● shufflenet结构
2.2.1.3 其他方面
● 讲讲梯度消失问题及其应对方案?(BN、Relu、初始化)
● BN优点,原理?各参数的意义?NCHW的特征图BN层参数?
● 什么是BN?BN 有啥优点?BN层怎么计算?讲讲BN的细节(过程,公式,作用)?为什么BN可以加快优化算法的速度?
● 问BN,详细介绍,问是否可以改进,训练和测试过程是否一样,测试中需要注意什么。均值和方差的计算是无偏的还是有偏的?
● Data argumentation怎么处理的?Noise Label怎么做?
● 反向传播的时候为什么会梯度消失?
● 多标签分类怎么解决,从损失函数角度考虑?
● 零样本分类问题。如果测试时出现一个图片是训练时没有的类别,怎么做?
● 一张图片多个类别怎么设计损失函数,多标签分类问题?
● 图像分类模型ResNet101相比ResNet50,residual block添加到哪里?为什么要这样添加?
● 细粒度分类:bilinear CNN ,细粒度分类 主要的难点及目前的方法 ,其他的细粒度task了解吗?
2.2.2 数学计算
● n*n的feature map上执行m*m的最大池化,步长1,padding m/2,设计算法并求时间复杂度
2.2.3 手写算法代码
● 手写BN的实现。注意BN的mean和std是在哪个维度求梯度的,mean和std是滑动平均的值。基于numpy实现 。
● 用你熟悉的框架写一下Unet结构
● numpy完成avepooling计算(积分图)
2.2.4 激活函数类
● 问了softmax损失函数
2.3 深度学习:RNN递归神经网络方面
2.3.1 讲解相关原理
● RNN 怎么反向传播?
2.4 深度学习:CNN&RNN通用的问题
2.4.1 基础知识点
● 输出值变成Nan了怎么办?估计是超过float32的数据范围了,需要对中间的数据进行归一化,比如BN,sigmoid函数等等。
● 对attention有系统了解过吗?讲一下各个modelde异同。SEnet, SKnet, CBAM, Non-local。
2.5 传统机器学习方面
2.5.1 讲解相关原理
2.5.1.1 数据准备
无
2.5.1.2 特征工程
① 特征降维
● PCA了解不,其优化目标是什么?最大化投影后方差+最小化到超平面距离--机器学习方面。
● PCA具体过程?PCA白化是什么?为何选择方差最大的方向进行新的特征选择 ?
● 介绍PCA,特征值分解,奇异值分解等等(描述了这两个分解的意义,特征值和特征向量的用途以及这两个分解的应用)。
② 特征选择
无
2.5.1.3 有监督学习-分类和回归方面
① 分类回归树(集成学习)
● 讲讲adaboost和random frost的相同之处和不同,各自应用范围,实际应用选择?
② SVM
● 对SVM的理解,为什么要用对偶问题(二次规划+核化)具体讲一下为什么要核化,核化的过程?
● SVM怎么用于回归?
● SVM 的损失函数,特点,对偶问题求解?
③ 决策树
● 决策树怎么做回归?没答出来。后来在他的引导下说是给回归定义一个损失函数,比如L2损失,可以把分叉结果量化;最终的输出值,是分支下的样本均值。
2.5.1.4 无监督学习-聚类方面
● Kmeans的原理?
2.5.2 手推算法及代码
● 推导SVM
2.6 深度学习&机器学习面经通用知识点
2.6.1 损失函数方面
● 详细讲一下 BCE LOSS,DIce Lloss, focal loss, triplet loss, center loss。
● 写Triplet Loss代码?
● 交叉熵公式写一下?
2.6.2 网络优化梯度下降方面
● 梯度下降法和牛顿法区别 ?
● Adam 和 SGD 区别,RMSProp 优化算法?
● SGD的形式
2.6.3 过拟合&欠拟合方面
● 过拟合是怎么造成的,如何解决?
3 旷视科技面经涉及项目知识点
3.1 深度学习:CNN卷积神经网络方面
3.1.1 目标检测方面
3.1.1.1 讲解原理
● 讲一下FPN为什么能提升小目标的准确率?
● 说一说SSD具体是怎么操作的?
● FPN多尺度层中的box如何进行ROIpooling?
● 讲一下DL中目标检测的类别和特点?(one stage、two stage)
● 为什么two stage比one stage慢,为什么two stage比one stage精度高?one stage在哪些具体方面检测精度不高(ROI+default box的深层理解)
● One-stage检测针对负样本太多有什么解决办法?
● 目标检测算法中one-stage方法中为了解决正负样本不均衡,除了focal loss和xxx还有什么方法?
● 目标检测one-stage方法中anchor预测出的位置是有偏移量的,而类别置信度是针对原始位置的特征并不是偏移后的特征,提出解决办法。
● Faster RCNN和SSD区别?
● Anchor的正负样本比是多少?
● 为什么项目中用 Faster R-CNN+FPN,Faster 和 YOLO 对比;为什么叫单步法,两步法?
● Faster RCNN中RPN改成SSD如何改进,如何选择特征层做ROI?
● 什么场景适合检测,什么场景适合分割?
● anchorfree 和anchorbase说一下,你说到fcos看过源码吗,说一下细节?
● roi pool 和roi align 区别?
3.1.1.2 损失函数
● 讲一下Focal loss 的2个参数有什么作用?
● yolo系列介绍一下 ,重点说一下损失函数?
● 除了smoothl1 bbox的其它损失函数有些什么了解吗?
3.1.1.3 手写代码
● IOU和NMS怎么算,写代码
● 给两个矩形,算IOU
● 给一张二值图像,1的四邻域有1称作联通的白块,找出所有联通白块的外界矩形
1 1 0
1 0 0
0 1 0
输出[(0,0,1,1), (2,1,2,1)]
3.1.2 图像分割
● 说一下deeplab?它与其他state of art的模型对比,它的亮点,deeplab还可以做哪些改进?介绍deeplabv3,画出backbone,deeplabv3的损失函数。
● 串联与并联的ASPP都需画出。论文中认为这两种方式哪种更好?
● mIOU(图像分割的通用评估指标)的代码实现?使用numpy(我直接用了python)
● 常用分割网络
3.1.3 异常行为识别
● 了解其他异常行为检测的算法吗?
● 异常行为定义,实际部署环境,怎么检测,速度如何保证?
3.1.4 姿态估计
● 姿态估计算法中Top-down方法与One-stage方法的不同,top-down方法准确率高的原因是什么?(比较侧重挖掘对该领域研究的理解深度。)
3.2 深度学习:RNN递归神经网络方面
3.2.1 自然语言处理NLP
● CRF后处理的目的?
3.3 强化学习
无
3.4 机器学习方面
无
4 数据结构与算法分析相关知识点
4.1 数据结构与算法分析
4.1.1 线性表
4.1.1.1 数组
● 一个数组里有很多数,只有一个只出现了一次,其他都只出现了两次,怎么找?那如果要找两个只出现了一次的数呢?
● 一个正整数组成的数组,分成连续的M段,问每段的数之和的最大值最小是多少?
例如:a=[10,6,2,7,3],M=2,答案为16,两段分为[10,6][2,7,3]
(x0,x1),(x1,x2),(x2,x3),(x3,x4),...,(xn-1,xn)矩阵计算的时间复杂度,有什么优化方法
● 求一个数组中只包含0,1使得其中0,1个数相等的最大子数组?
● 有一个数target,一个数组,数组中两个数的和是这个target,请找到这两个数?
● 连续子数组的最大和?
● 输入一个二维数组,输出是这个二维数组的最大子数组(也是二维)。最大指的是元素累加和最大。如果是本身,那么返回这个二维数组。
● 给一个数组,给一个值s。判断这个数组里是否存在子数组,其和等于s?如果有的话,有几个? N(n)复杂度
● 两个有序数组,返回并集的中位数 ?
● 一个数组,为1, 2, 3, ...n ,现在去掉了一个数,剩下n-1个数。求去掉的是哪个数。注意: 不准改变原数组,原数组无序空间复杂度O(1)。 第二问,如果去掉了2个数呢?
● 数组shuffle以及证明算法shuffle后产生的数组排列是均匀随机的?
● 输入一个二维数组,和任意两点坐标,输出这两点坐标(左上点,右下点)围成的矩形内所有元素和,用积分图方法。
● 对于给定的数组A,每次可以取出任意一个数A[i],同时要删除数组内所有等于A[i]-1和A[i]+1的数,直到数组为空,可以取出所有数的最大和为多少?
● 用numpy 实现 m*2 的矩阵中 每一组数(xi,yi) 与 n*2 的矩阵的每一组 (xj,yj) 的欧氏距离之和, 即有 m*n 组欧氏距离, 其中 i 从 0 到 m-1 , j 从 0 到 n-1
4.1.1.2 链表
● 链表反转?
● 链表的倒数第k个结点(双指针)
● 判断两个链表是否相交?
● 求两个链表的第一个公共节点?
● 链表排序(要求快排)
● 链表归并快排?
4.1.1.3 字符串
● 一段字符串的句子,由多个单词组成,返回颠倒后的句子?(单词不颠倒)
● 找到最长回文子串?
● 两个字符串序列的最长公共子序列?
● 寻找目标字符串的子串 (可不排序)
4.1.2 树
● 堆介绍,插入元素时调整的时间复杂度(变成二叉树,递归定义)堆排序、其他排序方法介绍和特点(按时间复杂度分了三种去介绍),最常用哪种?
4.1.3 排序
● 实现归并排序
● 编程求数组中的 Top K 大的数?
● 求一个数列中两个元素的最大和,找到这个两个元素?(Top K 问题)
● 手撕topk,用的堆
4.2 算法思想实战及智力题
4.2.1 算法思想实战
● 求一个数的方根,精度0.01?二分加递归
● a的b次方,最优解法
● 一个数开平方,如果开不了就取最近的平方根值,比如10开平方是3
● 十进制转二进制
● 区间合并就是[1 2 3 6 10 11 12]合并为[1-3,6,10-12]
● 连续子序列的最大和?
4.2.2 智力题
● 房子500万,每年涨10%,程序员工资100万,不涨,问多少年能全款买房(几秒钟估算了一下,永远买不起…)
● 一个人从原点出发,可以往左走可以往右走,每次走的步数递增1,问能不能到达一个位置x?如果能,给出走的步数最少的方案?
● 10只小白鼠,986瓶水,其中一瓶是毒药,如何一次性找到哪瓶是毒药?
● 掰巧克力,m*n格,掰成一小块一小块,不能叠着掰,最少需要掰多少次?(答案:m*n-1)
4.3 其他方面
4.3.1 数论
● 用拉格浪日乘子法将约束优化转化为无约束优化,直观解释一下拉格朗日乘子法?
● 设随机变量X1,X2,…Xn相互独立,且都服从(0,θ)上的均匀分布。求U=max{X1,X2,…Xn}数学期望?
● 二维直角坐标系上,给定N个点的坐标(float型),一个点C的坐标(float型),一个整数M。问:找一个正方形,它以C点为中心,且四条边分别与x轴和y轴平行,其内部至少包含N个点中的M个点(在边上也算),问这样的正方形边长最小是多少?
● 给定一个 [0, 1] 的均匀分布,求圆周率?
● 对极几何公式推导?
● 一个是两个均匀分布,求二者差的绝对值的期望?
● 已知a,b都服从均值为0,方差为1的正态分布,求max(a,b)的期望。
● 一个点位于零点位置,可以向负方向移动,也可以向正方向移动,概率都是1/2,Xt表示移动t步以后点p到零点的距离,计算Xt的期望,Xt^2的期望?
4.3.2 计算几何
● 怎么求一个三角形外界圆,三条边垂直平分线的交点即圆心,圆心到顶点的距离为半径?
4.3.3 概率分析
● 抛一个不均匀的硬币,设计策略能得到1/2的概率(抛两次)如果要求得到1/3和2/3呢?设计策略(抛四次,我想着抛6次,小哥哥提醒了)
● 一枚硬币,抛n次,问正面数大于反面数的概率? n是常数,不是无穷大。这题分奇数偶数讨论。偶数时写出概率的式子。奇数答案是1/2
● 一副扑克牌54张,给3个人发牌,把大小王发到了同一个人的概率?
● 一个半径为R的圆,用多少个R/2的圆可以铺满?
● 随机选3个点,使他们的平方和为1,要求选取的点等概率?
● 如何判断一个点在一个凸多边形里?
● 三个点在同一半圆上概率?
● 从n个数字中均匀采样出k个数字,无重复,并证明均匀性。如果n未知如何实现?如果概率都为k/n如何实现?
4.3.4 矩阵运算
● 矩阵m*n,从左上角到右下角,路径和最大?
● 已知矩阵高h,宽w,蛇形矩阵。写代码把他画出来?第二问,给定矩阵内一点y,x 在O(1)时间内给出该点的值?
● 最大子矩阵和
4.4 Leetcode&剑指offer原题
● Leetcode215:数组中第K个最大元素& 栈的最小数
5 编程高频问题:Python&C/C++方面
5.1 python方面
5.1.1 网络框架方面
5.1.1.1 Pytorch相关
● Tensorflow与Pytorch的区别?
5.1.1.2 Tensorflow相关
● TensorFlow 怎么在网络结构实现一个 if 判断?
● 用tensorflow计算Iou,写的python版本?
5.1.1.3 其他
● 用什么框架,各个框架的实现机制有什么不同?
5.1.2 基础知识
● Python多线程多进程?
● Python除了__init__()函数,还有什么自带参数的类的初始化?
5.1.3 手写代码相关
● 用Python实现n×k和m×k的欧氏距离,不能用循环?
5.2 C/C++方面
5.2.1 基础知识
5.2.1.1 区别比较
● Cuda里面host和device有啥区别?
5.2.1.2 讲解原理
● C++一些语法特性平时项目中会用到吗,比如多态、继承等?
● 什么是动态联编?
● C++,问了 map 等是用什么实现的。答:红黑树。(面试官:好了,我也不问你红黑树了),那你在想想还有其他实现的方法吗?平衡二叉树,差不多说了一下。
● 构造函数和析构函数的作用,析构函数何时被调用?
● C++中sort底层是什么,是否稳定,还有哪些稳定排序算法?
5.2.1.3 讲解应用
● Set map低层实现的数据结构是什么?
5.2.2 手写代码相关
● 用C++将一个类改造成线程安全的类?
● map,m[1]="str";这句低层是怎么实现的,发生了什么?
6 操作系统高频问题:数据库&线程&常用命令等
6.1 数据库方面
无
6.2 操作系统方面
● 问堆和栈,说了说栈的特点,怎么用的。
● 在计算机系统中,栈有哪些用处,具体解释了一下?我说了线程和进程。
● Linux的一些常用命令:我说了几个。他又问怎么按时间顺序打印出文件列表,按文件大小打印文件列表?
7 技术&产品&开放性问题
7.1 技术方面
● 各种深度学习训练技巧以及涨点的经验,问对此有什么insight,如何更好的解释?
● 无监督学习了解哪些?
● 1000个视频,无标签,怎么分类预测?
● 多标签识别怎么做?
● 数据不均衡怎么处理?
● 项目改进点,数据量少如何解决?
● 在原数据集训练权重上finetuning效果如何?
● 特征检索加速方式、模型加速方式?
● 场景题:许多图片数据,这些图片是由很多网络分割的,就像棋盘一样。每一个格子中可能存在一条小斜线(因为是直线,所以实际由两个端点就可以确定)。要求设计一个网络来检测出这张图片中的这些小短线?
要求:自己定义图片的尺寸,网络的模型,loss,评价指标。问的比较细,每一步的实现细节。
● 开放问题:一个二分类,如果只有正样本怎么做?
本文由 大白智能 作者:凯哲 发表,其版权均为 大白智能 所有,文章内容系作者个人观点,不代表 大白智能 对观点赞同或支持。如需转载,请注明文章来源。