【面试】商汤科技 - CV研究员

第一轮面试分为2次,流程大致都是如下:
自我介绍+项目介绍+项目深挖和项目中相关基础知识+算法题+数学题。
感受就是面试官都很专业,而且面试完可以给我原来的项目带来更深的思考和更多的想法,这回大论文有救了!
有意义的问题总结如下。

项目相关

我的多任务CNN模型是共享卷积层+分支结构。但是我的训练是单张图片输入,不存在以下问题,下面的问题都是为了考察我假设出来的。
关于多任务CNN的更多任务,可以参考这篇文章《共享相关任务表征,一文读懂深度神经网络多任务学习》

  1. 多任务CNN训练过程中不同任务的数据输入顺序是怎样的?一个mini-batch中的输入是怎样组成的?
    这里有提到应该把主要任务放在每个epoch中的最后一步训练,类似于前面用辅助任务做预训练,后面再finetune的思想。

  2. 不同任务的损失是如何?
    带权重求和。

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

  4. 详细介绍一下Batch Normalization。
    关于Batch Norm,目前看到最好的文章介绍时《Batch Normalization 学习笔记》
    面试官还会反复问我BN的处理是否在通道层面

另一个任务是关于微表情的

  1. TIM是什么?什么是视频插值?
    TIM: Temporal Interpolation Model,Github源码

  2. 光流图如何计算的?光流图应变如何计算的?

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

  4. 介绍一下triple loss

算法题

  1. 无序数组中,只有1个数重复了奇数次,其他数都重复了偶数次,如何找到?
    从头到尾亦或,就能找到。
    【附加题】是否需要以什么样的顺序?
    不需要,亦或满足交换律和结合律。

  2. 无序数组中,只有2个数重复了奇数次,其他数都重复了偶数次,如何找到?
    先亦或一遍得到一个二进制结果S,然后S中为1的位数,只需要知道某一位为1的位数k(如 00101100,其中1对应的位数分别为2、3、5,所以k可以取2或者3,或者5),然后将S与数组中第k位为1的数进行异或,异或结果就是a或b中的一个,然后用S异或,就可以求出另外一个。

  3. 两个栈实现队列,并计算时间和空间复杂度。
    假设有栈A和栈B,push操作都在A,pop操作都在B,pop的时候判断栈B是否为空——不为空就直接pop栈B的栈顶元素,为空就把栈A所有元素放入栈B再pop栈B的栈顶元素。

C++

  1. 谈谈什么是虚函数

  2. 纯虚函数和虚函数的区别?在内存上有何区别?

智力推理题

  1. 在没有能量损失的理想台球桌上任意击球,满足什么条件下球必然进洞?
    这是一道有理数多边形的问题,有一则光照问题视频来介绍这个问题。
    至于这题的解答,可以参照知乎上这个解答《理想情況下,对于任意一种台球布局,是否存在一个击球方案,一杆就能使所有球进洞》

参考

  1. 共享相关任务表征,一文读懂深度神经网络多任务学习. https://www.jiqizhixin.com/articles/2017-06-23-5
  2. 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
  3. 理想情況下,对于任意一种台球布局,是否存在一个击球方案,一杆就能使所有球进洞. https://www.zhihu.com/question/55327433
posted @ 2019-08-19 18:57  LvJC  阅读(1013)  评论(0编辑  收藏  举报