【面试】商汤科技 - CV研究员
第一轮面试分为2次,流程大致都是如下:
自我介绍+项目介绍+项目深挖和项目中相关基础知识+算法题+数学题。
感受就是面试官都很专业,而且面试完可以给我原来的项目带来更深的思考和更多的想法,这回大论文有救了!
有意义的问题总结如下。
项目相关
我的多任务CNN模型是共享卷积层+分支结构。但是我的训练是单张图片输入,不存在以下问题,下面的问题都是为了考察我假设出来的。
关于多任务CNN的更多任务,可以参考这篇文章《共享相关任务表征,一文读懂深度神经网络多任务学习》。
-
多任务CNN训练过程中不同任务的数据输入顺序是怎样的?一个mini-batch中的输入是怎样组成的?
这里有提到应该把主要任务放在每个epoch中的最后一步训练,类似于前面用辅助任务做预训练,后面再finetune的思想。 -
不同任务的损失是如何?
带权重求和。 -
那么在反向传播时同一个mini-batch在共享卷积层的末端是否需要除以batch size?为什么?
-
详细介绍一下Batch Normalization。
关于Batch Norm,目前看到最好的文章介绍时《Batch Normalization 学习笔记》
面试官还会反复问我BN的处理是否在通道层面
另一个任务是关于微表情的
-
TIM是什么?什么是视频插值?
TIM: Temporal Interpolation Model,Github源码 -
光流图如何计算的?光流图应变如何计算的?
-
如何利用OpenCV实现的人脸对齐?
-
介绍一下triple loss
算法题
-
无序数组中,只有1个数重复了奇数次,其他数都重复了偶数次,如何找到?
从头到尾亦或,就能找到。
【附加题】是否需要以什么样的顺序?
不需要,亦或满足交换律和结合律。 -
无序数组中,只有2个数重复了奇数次,其他数都重复了偶数次,如何找到?
先亦或一遍得到一个二进制结果S,然后S中为1的位数,只需要知道某一位为1的位数k(如 00101100,其中1对应的位数分别为2、3、5,所以k可以取2或者3,或者5),然后将S与数组中第k位为1的数进行异或,异或结果就是a或b中的一个,然后用S异或,就可以求出另外一个。 -
两个栈实现队列,并计算时间和空间复杂度。
假设有栈A和栈B,push操作都在A,pop操作都在B,pop的时候判断栈B是否为空——不为空就直接pop栈B的栈顶元素,为空就把栈A所有元素放入栈B再pop栈B的栈顶元素。
C++
-
谈谈什么是虚函数
-
纯虚函数和虚函数的区别?在内存上有何区别?
智力推理题
- 在没有能量损失的理想台球桌上任意击球,满足什么条件下球必然进洞?
这是一道有理数多边形的问题,有一则光照问题视频来介绍这个问题。
至于这题的解答,可以参照知乎上这个解答《理想情況下,对于任意一种台球布局,是否存在一个击球方案,一杆就能使所有球进洞》。
参考
- 共享相关任务表征,一文读懂深度神经网络多任务学习. https://www.jiqizhixin.com/articles/2017-06-23-5
- Batch Normalization 学习笔记. https://blog.csdn.net/leayc/article/details/77645877
3 The Illumination Problem - Numberphile. https://www.youtube.com/watch?v=xhj5er1k6GQ&feature=youtu.be - 理想情況下,对于任意一种台球布局,是否存在一个击球方案,一杆就能使所有球进洞. https://www.zhihu.com/question/55327433