商汤科技CV岗凉经

前言

楼主因为之前实习拿到商汤的offer,加了面试官微信。前几日面试官问我是否需要内推,就把我简历要了过去,然后商汤就给我打电话了,然后然后....就有了昨日被血虐的过程。

一面

  1. 针对项目提问,简历上所有的项目都问了个遍。其中我有用到ssd-mobilenetv1-coco的预训练模型,我自己finetune之后的map是0.956@IOU0.5,面试官问我map的误报率是多少...我一脸懵逼= =哎,菜是原罪。
  2. 问曰:熟悉目标检测吗?
    答曰:看过经典论文,但实际的项目做得不多。
    继续问:知道nms吧?把nms的代码写一下,并且分析一下时间复杂度。
    答曰:好的。
    于是我吭哧吭哧的写了一段,给面试官看,面试官提出了一些优化的点:不用每一次都排序,可以用 一个bool的vector记录哪个bbox会被留下来,我恍然大悟,于是又吭哧吭哧写了一段,如下:

    class Boundingbox
    {
     int x;
     int y;
     int w;
     int h;
     float score;
    };
    bool cmp(const Boudingbox &a, const Boundingbox &b)
    {
     return a.score > b.score;
    }
    float calIOU(Boundingbox a, Boudingbox b);//假设已经定义好这个
    void NMS(vector<Boundingbox> &bboxes, const int num, const int threshold)
    {
     if(bboxes.size() <= 0)
         return;
     sort(bboxes.begin(), bboxes.end());
     int i = 0, count = 0;
     vector<bool> flags(bboxes.size(), false);
     while(i < bboxes.size() && count !=num)
     {
         maxbbox = bboxes[i];
         for(int j = i 1;j<bboxes.size();j  )
         {
             if(calIOU(bboxes[j], maxbbox) > threshold) 
                continue;
             flags[j] = true;
         }
     }
     vector<Boundingbox>::iterator it = bboxes.begin();
     for(int i = 0; i<flags.size(); i  )
     {
         if(!flags[i])
             it = bboxes.erase(it)
     }      
    }

    分析上述代码的时间复杂度为o(N2),N为待选bboxes的个数。(ps:上述代码估计运行还是不行的,只是比伪代码稍微强一点,表明思路)

    好了,到这里我觉得我表现的还不错嘛,最起码这个nms的之前我只看过大概流程,但是也“差不
    多”写出来了,但是下面....

  3. 面试官:做个题吧,数组的最大子区间和。
    我心想:这个也太简单了吧,我得写慢点,于是我控制在五分钟之后才说我写好了。谁料该来的还是
    要来...
    面试官:如果数组是二维的咋办?就是一个矩阵,求里面最大的一个子矩阵的和。
    我: 思考了一下,写了个上面的二维版,面试官说不对。于是又问:那咱们换个问题吧,如果数组首尾相连咋办?
    我: 思考了很长时间....说可以把数组复制成两段来做,面试官说这样虽然可以,但是可能最大和区间会超过数组本来的长度...好吧确实是这样,面试官此间还多番提醒,仍未果。
    这题的答案,网上应该有,都是数组的最大子数组和的变种,我这般菜鸡,不会举一反三,不会触类旁通,真是丢脸呀。

二面

二面面试官竟然是实习时面我的,他认出我来了,我一开始并没有认出来,后面想起来脱口而出:诶呀你变帅了我都木有认出来!感觉这句话把面试官给雷到了,但这确实是心里话,他确实变帅了。

  1. 为什么没来实习?我blablabla
  2. 再讲一下你的毕设吧,我好像忘了。因为我的毕设是做视觉显著性检测,他问我和深度学习中常见的attention有什么关系,其实我觉得就是那个,但是我还是很怂的说不了解attention,怕给自己挖坑...
  3. 问了一点c STL里面的知识;vector删除(erase()函数),i 和 i更有效率?(我知道是 i但我不知道为啥啊!!!???)
  4. 下面的重点来了:定义一颗多叉树,并从{ 0 1;0 2;0 3; 0 4; 3 4; 3 5; 3 6}build这棵树
    好吧,我真的不会,装模做样的在草稿纸上瞎写了一波,面试官亲切的问怎么了哪里不会?我好想说哪里都不会....
    看我一副便秘般憋不出代码的表情,面试官问我是不是计算机专业的,我说不是,他说好吧那确实为难你了,那我们换个题吧?
  5. 给我讲下你简历里面你写的熟悉的这些东西吧?讲讲PCA?
    好吧,PCA我已经不太熟了,我大概说了下:是给数据降维的方法,计算数据矩阵的特征值,并保留特征值累加起来超过全部特征值和的90%以上的特征值对应的特征向量(这是我凭印象瞎说的,正确答案请自行百度= =),然后面试官问我矩阵的特征值和特征向量是什么意义?好吧我真的说不出个所以然,放弃了。
  6. 看我很受挫,面试官让我手推下svm,我按照自己的理解推了一遍,重拾了一波信心。

三面

可能是实习时肯定过我吧,不好打脸,还是给了三面。三面应该是个大佬,在***,于是微信语音面了一波。

  1. 问我什么时候毕业,毕业要求达到没?
  2. 问我对计算机视觉任务中比较熟悉哪一类,是检测,分割,分类还是什么?
    我突然我发现我好菜,我竟然一个都不敢说熟悉,检测知道些理论但实际项目没咋做过,分类倒是做过实际项目,但是感觉论文没有看太多,分割就是论文和项目都没咋做过。于是我硬着头皮说了分类。
  3. 分类网络有哪些?我从LeNet到resNet和mobilenet都说了一遍,然后着重问了我两个问题:
    (1)resnet为什么好?(我用csdn博客上看到的一个理解解释了一波,被反驳了,后面我问应该怎么理解,面试官说是因为shortlink接口可以减轻梯度消失,这个我不知道咋理解啊?我说这个我知道,面试官又问我梯度消失的原因是什么,我说了一波激活函数导数那个解释,但是面试官说后面都用relu函数了,导数是1或0,为什么还会有梯度消失?不知道不知道真的不知道吗,求各位大佬解答= =)
    (2)mobilenet为什么快?(分析了一波深度可分离卷积)怎么证明mobilenet的快是因为用了深度可分离卷积?(不知道咋回答...)mobilenet有多少层?(不记得)mobilenet有多少参数(不记得)

总之三面就是各种不知道,不清楚,全程很尴尬= =

总结

凉经。

#面经##商汤科技##算法工程师#
全部评论
残差网络可以缓解梯度消失,在论文中解释的很清楚啊。可以用如下公式解释: xl+1 = xl + F(xl, Wl) xl+2 = xl+1 + F(xl+1, Wl+1) 依次类推,可以得到第L层的输入为: 设损失函数为则: 从上式可以看出,从第L层到它之前的任意l层有两条传播路径,第一条传播路径不经过任何中间层,这对梯度消失起到了缓解作用。另外,在一个mini-batch中,一般来说,对于所有的样本都是-1的可能性不大。这就意味着即使所有的weights都取很小的值,梯度也不会消失。 至于为什么既然relu的梯度只有0和1,为什么还会梯度消失,可以举一个简单的例子。 假如f(x) = 0.1x,g(x)是relu函数。 x1 = g(f(x0)) x2 = g(f(x1)) 那么: x2 = g(f(g(f(x0)))) 假设这个复合函数中relu全部都在正半轴区域,即梯度为1的区域。我们会得到: 神经网络中不只relu这一种变换,其他的变换同样可以影响梯度值。故relu只是相对于其他激活函数可以缓解梯度消失,并不能消除。
7 回复 分享
发布于 2018-09-20 21:52
3 回复 分享
发布于 2018-09-23 21:37
那大佬到底凉没凉?
点赞 回复 分享
发布于 2018-09-26 21:34
一天就面试完三面了吗???
点赞 回复 分享
发布于 2018-09-25 21:38
请问您是面的实习还是正式岗
点赞 回复 分享
发布于 2018-09-23 15:24
商汤面试官问我神经网络为什么可以用BP训练 回答: 高度非线性,但是可微可倒,根据链式法则可以训练 问:怎么证明链式法则?? 懵逼……
点赞 回复 分享
发布于 2018-09-22 10:57
resnet好在容易优化吧,fx -x 比 fx 好优化。其实很深的网络只要初始化得好,也是可以训练的,https://arxiv.org/pdf/1706.00388。
点赞 回复 分享
发布于 2018-09-20 21:11
请问是上海岗还是北京岗?
点赞 回复 分享
发布于 2018-09-20 20:49
resnet恒等映射导数为1.另一项不为-1就不会梯度消失?
点赞 回复 分享
发布于 2018-09-19 12:07
最后那个用relu,是不是因为网络加深,分布在变化,比如你数据服从高斯分布,正好那时候集中在relu的小于0的区域?估计不对,我瞎想的
点赞 回复 分享
发布于 2018-09-19 11:25
怕了怕了
点赞 回复 分享
发布于 2018-09-19 11:23
不愧是第一ai公司
点赞 回复 分享
发布于 2018-09-19 11:10

相关推荐

机械打工仔:我来告诉你原因,是因为sobb有在线简历,有些HR为了快会直接先看在线简历,初步感觉不合适就不会找你要详细的了
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
点赞
99
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务