商汤科技算法面经秘籍

《AI未来星球》陪伴成长的人工智能社群,价值过万的各种内部资源及活动,限时特惠中,点击查看。

求职跳槽福利:为了便于大家求职、跳槽的准备,大白将45家大厂的面经,按照知识框架,整理成700多页的《人工智能算法岗江湖武林秘籍》,限时开放下载,点击查看下载。


面经整理历程:经过一年多的努力,大白整理了超过3500篇,各类大厂的算法面经资料。

并将涉及到的知识点,按照知识框架,分类汇总,每个公司整理成一篇,比如本文的商汤科技面经

大家对照面经,可以了解心仪的公司,会根据你的简历,问哪些知识点?便于大家对掌握的知识,进行回顾梳理。

希望为大家在求职或者跳槽的道路上,提供一些帮助,为大家取得心仪的offer助力。

面经整理心得:大白也将整理所有面经的心得,写成了一篇文章,点击查看心得

其他大厂面经:国内其他大厂的面经汇总,点击查看目录

商汤科技面经整理:江大白

1 商汤科技面经汇总资料

1.1 面经汇总参考资料

① 参考资料:

(1)牛客网:商汤科技面经-24篇,网页链接

(2)知乎面经:点击进入查看

(3)面试圈:点击进入查看

面经框架及参考答案:

(1)面经知识框架:点击进入查看

(2)面经参考答案:点击进入查看

1.2 面经涉及招聘岗位

(1)实习岗位类

【见习研究院员】、【计算机视觉暑期实习岗】

(2)全职岗位类

【视觉算法研究员】、【计算机算法工程师】

1.3 面试流程时间安排

PS以上流程为大白总结归纳所得,以供参考。

1.4 商汤科技面试心得汇总

★ 感觉公司技术大佬很多,而且面试问的非常细,特别考虑你的思考和基础能力。主要考察整体把握和积累。特别是你接触的方面,比如mobilenet为什么快?有多少层,有多少参数,如果不是深入解除的话,很难重点记忆。

★ 最好根据项目的一个点,吸引面试官注意,给出一个轮廓,再不断细化,同时可以分点答题,思路清晰。

★ 比较硬核,不太好啃。文章和项目会剥茧抽丝,每一个细节都问的非常深入。

★ 在商汤基本上每个人都要熟悉Linux和C++,当然python每个人都会。

2 商汤科技面经涉及基础知识点

2.1 图像处理基础

2.1.1 讲解相关原理

● 简单介绍下SIFT,你怎么保证双目相机同时曝光?

● 光流图如何计算的?光流图应变如何计算的?

● 有没有什么数学方法能够去除特征矩阵中的噪声?

● bfs实现最大连通域?

● 对一个灰度图进行均值滤波操作,写一个函数,可以使用numpy,要求输入输出的图片和输入的图片的shape保持一致。

2.2 深度学习:CNN卷积神经网络方面

2.2.1 讲解相关原理

2.2.1.1 卷积方面

● 普通卷积、DW PW卷积计算量推导?

● 卷积的底层实现/加速技巧

2.2.1.2 池化方面

● Max Pooling 反向传播怎么算?ROI Align和ROI pooling有什么区别?

2.2.1.3 网络结构方面

● 网络的基础知识,如一些基础网络以及变体?

● 残差网络结构原理?

● detnet的原理?

● SENET原理,接在ResNet还有inception的什么位置?

● BN、IN、LN、GN原理,BN为什么有效?

● mobile net shuffle net具体结构,如何降低计算量,给了我一个DW卷积具体实例让我算降低了多少计算量?

● Inception v1为什么能提升性能?

● MobileNet v1、V2介绍?

● MobileNet V2中的Residual结构最先是哪个网络提出来的

● Resnet inception结构对比?

● 各种网络结构中,resnet为什么好?

● mobilenet为什么快?

● 怎么证明mobilenet的快是因为用了深度可分离卷积?mobilenet有多少层?mobilenet有多少参数?

● 了解哪些轻量级的检测器?

● 类别不平衡用Inception好还是Resnet好?

● 细粒度分类用inception好还是Resnet好?

2.2.1.4 其他方面

● 如何解决类内的检测?

● Batch Normalization的作用,BN的处理是否在通道层面?

● 关于BN层。可学习参数,BN层的作用,在训练阶段和预测阶段的有什么不同,了解GN吗?

● 梯度消失的原因是什么?

● 现有两个特征向量,怎么分析他们的相似度?

● 那么在反向传播时同一个mini-batch在共享卷积层的末端是否需要除以batch size?为什么?

● 多任务CNN训练过程中不同任务的数据输入顺序是怎样的?一个mini-batch中的输入是怎样组成的?

2.2.2 数学计算

● 给出feature map和卷积核尺寸,求参数量

2.2.3 手写算法代码

● numpy写个batch norm 层

2.2.4 激活函数类

● Softmax+celoss工程上如何防止上下溢出?

2.3 深度学习:RNN递归神经网络方面

2.3.1 讲解相关原理

● RNN为什么long-term dependency做不好?

2.4 深度学习:CNN&RNN通用的问题

2.4.1 基础知识点

● 注意力机制怎么实现?

2.5 传统机器学习方面

2.5.1 讲解相关原理

2.5.1.1 数据准备

2.5.1.2 特征工程

① 特征降维

● 讲讲PCA?矩阵中的特征值和特征向量是什么意思?

● PCA从特征值分解角度如何解释(建议要看下pca推导)

● PCA分解是怎么做的?

② 特征选择

2.5.1.3 有监督学习-分类和回归方面

① 分类回归树(集成学习)

● 随机森林介绍一下?

② SVM

● SVM是什么意思,手推SVM?

2.5.2 手推算法及代码

2.6 深度学习&机器学习面经通用知识点

2.6.1 损失函数方面

● 常用损失函数介绍,包括公式写出来,项目中用的损失函数,为什么?

● 介绍一下triple loss?

● 为什么smooth L1 Loss更有效?

● 不同任务的损失是如何设置的?

2.6.2 激活函数方面

● Sigmoid和Softmax的区别?

2.6.3 网络优化梯度下降方面

● 梯度优化过程原理介绍?

● SGD、Adam之类优化的原理?

● SGD 使用mini batch优化和使用所有优化样本优化哪个更好,为什么?

● 分布式:如何实现分布式sgd?

2.6.4 压缩&剪枝&量化&加速

● 如何修改轻量级的模型?

● 介绍Mimic知识蒸馏是怎么做的?

● 现在有些什么降低模型复杂的的方法,我说了两点,使用一些降低计算量的结构比如mobile net shuffle net,然后模型剪枝?

● 模型剪枝的方法,具体细节?

● Tensorrt 原理,如果不做量化,还可以加速吗?

2.6.5 其他方面

● 正负样本不平衡的解决?

3 商汤科技面经涉及项目知识点

3.1 深度学习:CNN卷积神经网络方面

3.1.1 目标检测方面

3.1.1.1 讲解原理

● 为什么说resnet101不适合目标检测?

● 小目标在FPN的什么位置检测?

● IOUNet的原理,能有多少提升?

● NMS和soft-nms、softer-nms的原理?

● 讲FPN经验,proposal怎么映射回多level featuremap上?

● 如何解决multiscale问题?

● FCOS这种模型的思想?

● anchor based和anchor free,anchor哪些缺点?

● 为什么要用 weight BCE+dice loss的损失,focal loss 了解吗?

● 视觉显著性检测和深度学习中常见的attention有什么关系?

● 检测、分割、分类熟悉哪些?分类网络有哪些?

● Faster-RCNN整个从输入到输出的框架流程,用的roi pooling还是roi align?

● RPN的原理?

● 说一下SSD的原理,和faster-rcnn的异同点?

● faster-rcnn的回归目标是如何定义的?用的什么loss?

● 常用的目标检测算法,one-stage和two-stage的区别?

● CornerNet介绍,CornerPooling是怎么做的,怎么解决cornernet检测物体合并为一个框的问题?

● 目标检测在工程中应用有没有遇到一些问题?检测类别冲突怎么办?

● 为什么ssd比faster rcnn慢,介绍r-fcn,介绍ohem?

● 目标检测的回归loss是什么,为什么这么用?

● 单阶段比双阶段难训练?

● 讲一下Faster RCNN的RPN,为什么前景背景分类用sigmoid而不是softmax,讲一下FPN,region proposal时怎么知道roi 是属于哪一个feature map的。

● 简单介绍centernet和cornnet?

● 使用ssd-mobilnetv1-coco的预训练模型,finetune后的map是0.956@IOU0.5,map的误报率是多少?

● 针对小目标,目标检测的解决措施?

● anchor-free为什么重新火起来?

● nms很耗时吗? 时间复杂度? 一般预测时会有多少个候选框?

● NMS是怎么做的简述?

● yolo的V1,V2,V3有什么不同怎么改进的?

3.1.1.2 损失函数

● Focal loss具体怎么操作?

● Focal loss是如何进行难分样本挖掘的?(公式我有点忘了,就说了大概,主要思想是说出来了,因为是取幂,对于简分样本损失会比较小,取幂后会更小,反传时更新梯度会很小很小,基本可以忽略,但对于难分,取幂后还是很大)

3.1.1.3 手写代码

● nms的代码手写,并分析时间复杂度,比如O(N2)

● 目标检测中的IOU计算(给定两个框的左上角和右下角坐标,结构体自己定义),如果用GPU实现的流程(分block和thread等)

3.1.2 目标追踪

● SiamRPN原理讲一下?

3.1.3 图像分割

● 聊语义分割的发展点,分割的发展可能性,无监督学习在分割的应用?

● 如何解决分割的样本不均衡的问题?

● 如何解决车道线分割有车阻拦视线导致分割结果断裂的问题?

● 讨论语义分割未来可能的发展点?

3.1.4 关键点检测

● 在人脸关键点和检测中的mimic是怎么做的?为什么不在logits输出上做?用l2 loss吗?

● 人脸关键点使用pose做multitask为什么landmark会有提升?

● 如何利用OpenCV实现的人脸对齐?

3.2 深度学习:RNN递归神经网络方面

3.2.1 自然语言处理NLP

● 懂马尔科夫吗?

● 深度学习中提取词向量算法列举、原理、作用以及大致一个发展历程?

3.3 强化学习

3.4 机器学习方面

4 数据结构与算法分析相关知识点

4.1 数据结构与算法分析

4.1.1 线性表

4.1.1.1 数组

● 求数组中出现次数超过一半的数字?

● 旋转数组,找最小值,能否用递归做?

● 数组的最大子区间和?如果数组是二维的怎么办?就是一个矩阵,求里面最大的一个子矩阵的和,如果数组首尾相连怎么办?

● 用一个3*4的二维指针数组,完成数组顺时针翻转?

● 有序数组合并?

● 最大连续子串的区间?

● 无序数组中,只有1个数重复了奇数次,其他数都重复了偶数次,如何找到?

● 多个数组,都是有序的,想求topk?

● 给你一组乱序的数组a,要找出一组l,r,使得a[r]-a[l]最大?

● 寻找数组中唯一/唯二只出现一次的数?

4.1.1.2 链表

● 单链表的翻转?

● 链表倒数第k个节点?

● 写一个链表的快速排序,自定义结点。

4.1.1.3 字符串

● 两个栈实现队列,并计算时间和空间复杂度?

4.1.2 树

4.1.2.1 二叉树

● 定义一颗多叉树,并从{0 1;0 2;0 3;0 4;3 4;3 5;3 6}build这棵树?

● 判断二叉树是否包含另一二叉树?

● 之子形打印二叉树?

4.1.2.2 堆

● 从一百万个数里面找前1000大的(堆排,建一个大小为1000的小根堆),除了堆排呢?(快排,二分+partition)

4.2 算法思想实战及智力题

4.2.1 算法思想实战

● 两个queue实现stack

4.2.2 智力题

● MxN的方格中有多少个正方形、多少个矩形、有多少种不同面积矩形?

● 在没有能量损失的理想台球桌上任意击球,满足什么条件下球必然进洞?

● 给定n*n的正方形,每个点都有权值,有些点是障碍物,问从左上角走到右下角的最小花费?

4.3 其他方面

4.3.1 数论

● 斐波那契数列及优化?

4.3.2 计算几何

● 已知二维平面上有很多点,求出最多有多少点在同一条直线上?

4.3.3 概率分析

● 已有两个能生成0到1之间的数,并且这些数是均匀分布的随机生成器,给定一个任意的三角形,如何能在三角形内等概率随机的生成一个点?(然后对于多边形呢)

4.4 Leetcode&剑指offer原题

● Leetcode200或695:相似,不同是把1当作了海,0当作岛屿(没有本质区别),然后统计岛屿面积,将岛屿面积小于给定阈值t的全置为1。

5 编程高频问题:Python&C/C++方面

5.1 python方面

5.1.1 网络框架方面

5.1.1.1 Pytorch相关

● 使用Pytorch对cifar10数据集分类的整个代码流程,构建模型的过程是怎么样的?

● pytorch 多gpu训练机制的原理,优化器以及网络参数保存机制?

5.1.1.2 Tensorflow相关

● 对于tensorflow和pytorch的了解,越多越好?

● tensorflow训练执行过程,forward的代码过程?

5.1.2 基础知识

5.1.2.1 区别比较

● list和tuple的区别?

● Python is和==的区别?

5.1.2.2 讲解原理

● Import 搜索过程?

● python常用的库报一遍?

● python里如何实现类似c++里引用?(在函数里改变基础类型,这里回答可以用list传入,进行修改)

● python装饰器?

● python类似引用?

5.2 C/C++方面

5.2.1 基础知识

5.2.1.1 区别比较

● 浅拷贝和深拷贝?

5.2.1.2 讲解原理

● C++多态、引用和指针区别、类的概念?

● C 里多态虚函数?

● vector的相关问题?

● 虚函数怎么实现的,怎么用的?

5.2.1.3 讲解应用

● cpp中的delete和mallow的区别?

● cpp中vector的底层实现原理,如何进行内存分配?

● 一个cpp程序的内存分配是什么样的?

6 操作系统高频问题:数据库&线程&常用命令等

6.1 数据库方面

6.2 操作系统方面

6.2.1 线程和进程相关

● 假如文件中有很多文件,每个文件中又有很多文件,如何删除全部文件?

6.2.2 常用命令

● github的常用操作:上传、合并、分支之类的?

● linux的常用操作:查看文件大小、删除文件、查看文件行数?

7 技术&产品&开放性问题

7.1 技术方面

● 比赛中如何解决样本不平衡,以及用了什么训练技巧,为什么能起作用,其原理是什么?

数据增广方法?

● 你认为目前video和知识蒸馏这两个方向的挑战和可以改进的地方在哪?

● 你觉得网络模型和硬件平台是什么关系?

● 怎么计算视差的,说一下SGBM原理,你怎么根据立体像对同名点计算大地坐标?

本文由 大白智能 作者:凯哲 发表,其版权均为 大白智能 所有,文章内容系作者个人观点,不代表 大白智能 对观点赞同或支持。如需转载,请注明文章来源。

发表评论

This site is protected by wp-copyrightpro.com