俺实习和秋招的面经

Posted by kevin on March 15, 2022

实习

平安科技 (拿到 offer)

sishijing204@pingan.com.cn

3.14 发送邮件

3.23 一面

面试官是 nlp 方向的,所以确实对图像了解的并不多,整个过程几乎都是让我在介绍我的工作

  1. 介绍一下这篇 CVPR 工作,细节一点
  2. 介绍一下和高通的项目
  3. CLIP 是一个什么样的东西?
  4. 这个 Language 是怎么和 Image 产生关联的呢?
  5. 你在 CVPR 这篇论文里做了什么贡献,idea 是谁的
  6. 代码能力怎样?简单讲讲 CVPR 这篇论文的代码框架,输入输出

整体来讲没问太多东西,但是他对这篇论文挺感兴趣的,总共聊了 40 分钟,结束之后当场就问我啥时入职,非常急迫的感觉,有点不太敢去 hhh,而且离学校也比较远

阿里云

3.15 内推

3.18 一面

主要是根据简历上面写的东西进行询问,要对自己写进简历的细节都了解清楚

  1. 自我介绍
  2. 和高通的项目是怎么验收的,部署工作是你做的吗?
  3. 高通项目有什么具体的性能指标要求吗?为什么选择用 TTFNet?
  4. CenterNet 为什么会对大目标检测效果不好呢?和最近的DETR相比他们分别有什么优缺点?
  5. 竞赛算法拿奖,你觉得和别人的代码相比有什么亮点?哪里是最创新的?
  6. 讲一讲CVPR论文,为什么利用CLIP可以做到消除背景,CLIP不是用来做分类的吗?
  7. 论文中的initial CAM是怎么生成的?

面试官人很好,整个过程比较愉快,但是竞赛这一块感觉他没怎么太听懂,确实不太好描述,视频面试的话可以准备一些图片会好一点。

3.22 二面

到这里就挖论文以及项目了

  1. 自我介绍
  2. 讲一下你的论文
  3. 介绍一下 CLIP
  4. 送到 CLIP 之前的 mask 是不是通过 CAM 那种方式也能做到呢?
  5. 详细介绍一下三个 loss,以及各自的涨点情况,比 sota 高了多少?
  6. 介绍一下高通项目
  7. 如何解决多尺度问题?回答:最直接的就是 FPN 了
  8. 那为啥不尝试 FPN 呢?回答:做过,效果不好,TTFNet 大物体的高斯核会重叠
  9. 多尺度融合呢?尝试过没?回答:xxx,然后引出了我们的 transformer attention 版本,把握主动权
  10. 10ms 的速度是在哪里测试的?最终端侧部署工作是谁做的?

做了两个题目,求 最大子数组和,leetcode 原题,一个多星期之前我还做过这题,但是第一次在线答题,很紧张,没想出用动归的方法,做完之后又来了一道求最大子数组的乘积

过了一天就跟我说二面过了,但是主管面想等我笔试做完再进行。

3.25 笔试

大概率无了,编程题第一题只拿了 83%,另外两道 0 分。(确实 G 了,问了面试官,只拿了 30 多分)

题目:

牛牛今年上幼儿园了,老师叫他学习减法。老师给了他五个数字,他每次操作可以选择其中的四个数字减一,减一之后的数字不能小于零——因为幼儿园的牛牛还没有接触过负数。

现在牛牛想知道,自己最多可以进行多少次这样的操作?

输入:

2
5 4 3 2 1
1 1 1 10000 1

输出

3
1
// 暴力,每次都让最大的四个数减一

vector<int> q(5);
int t;

int main() {

    cin >> t;
    while (t--) {
        for (int j = 0; j < 5; ++j)
            cin >> q[j];

        sort(q.begin(), q.end());
        int res = 0;
        while (q[2] > 0 && q[1] > 0) {
            q[4] -= 1;
            q[3] -= 1;
            q[2] -= 1;
            q[1] -= 1;
            res += 1;
            sort(q.begin(), q.end());
        }
        cout << res << endl;
    }
    return 0;
}

上海人工智能实验室 Open MMLab

3.15 内推

3.23 一面

本来投的是 razor 方向的算法研究员,后面给我分配到 deploy 部门去面试了,问了一下说是算法没过筛,然后就面吧,虽然部署方向做的不多,但是还是有些兴趣的。

  1. 介绍高通的项目,主要的 baseline 是什么,有什么提升?
  2. 做过哪些部署方面的活,有遇到过什么困难?转 onnx 有什么困难?
  3. 介绍下用 Libtorch 和 TorchMobile 部署的项目
  4. 主要用的是 C++ 还是 python?回答:训练网络用的是 python,本科用过一段时间 C++,然后引出了比赛
  5. 介绍一下比赛主要用到的知识点,都是用 C++ 调用 OpenCV 模块的 API 是吗?
  6. TensorRT 有用过吗?回答:没有用过,但是了解一些
  7. 编程题:给你一个整数数组 nums,里面的数字互不相同,返回该数组所有可能的子集(幂集),可以以任意顺序返回,但是不能包含重复的子集。(用回溯,leetcode 78 题)

3.28 二面

这次是 Open MMLab 社区 MMDeploy 方向的高级研究员吕晗小姐姐来面我,主要是考察我在高通以及抠图项目中的一些模型部署情况。

  1. 高通项目具体有哪些改进的点,所说的 work 的方法中,哪些是你做的(她以为我们是一个团队去做的,没想到只有我一个人)
  2. 部署的时候有遇到什么困难?(OP 不支持)
  3. 介绍一下 ONNX,你知道神经网络框架训出来的模型转 ONNX 格式底层是怎么实现的吗?(这个我真不了解,她说这个在模型部署领域是个很重要的知识点,我要去补一下 TODO)
  4. 除了提供 ONNX 格式的 model 给高通,自己有实际在端侧部署过网络吗?回答:在投论文比较速度的时候,将我们的模型和 yolo ssd 之类的全部都部署到了安卓端,用的是 Torch Mobile,然后介绍了一些是怎么部署的(面试官没有太了解 Torch Mobile,这个是能够比较快速部署的)
  5. 为什么要转成 TorchScript 格式呢?回答:部署在 IOS 应用上(后面面试官解释了 IOS 芯片上确实用 TorchScript,虽然我也不太清楚)
  6. 转 TorchScript 有哪些方式呢?回答:torch.jit.trace 和 torch.jit.script,知道这两种有什么区别吗?回答:不是很清楚,转模型的时候其中一种会失败,就换另一种。
  7. 知道模型部署的流程吗?有意愿加入哪一方面呢?我浅谈了一下,然后面试官给我介绍的很详细 mmdeploy 部门做的几个方向,模型转化(要能够支持各种芯片平台),C/C++ 推理框架接口开发,社区日常业务。然后我说我对 C/C++ 接口开发挺感兴趣,她就考了我一些基础知识。
  8. 深拷贝和浅拷贝的区别
  9. python 中有哪些内置的数据结构是 sequence (可以用索引取值)?回答:str,list,漏了 tuple 和 array
  10. 知道栈和队列的区别吗?用 C++ 实现一个 stack,包含 empty, push, pop 操作。然后我用了一个 vector 存数据,用一个 index 指针存放栈顶。然后面试官又让我实现索引取值 (stack[0]),然后我就说操作符重载,但是太久没写了忘了怎么写了,她表示能想到就可以了 hhh (参考 Leetcode 155 题)
  11. 然后面试官觉得我 C++ 有点手生,需要多练练,看我 python 用的更多就想让我去做模型转换一块,问我的意愿,然后也和我介绍了很多关于这个领域的知识,学到了不少东西。
  12. 反问阶段问了 mmlab 这种开源性质的工作每天都在干啥,然后就发现和公司做项目不一样,没有一个明确的 deadline,给个每月计划,然后按时交差就行了。
  13. 最终面试官建议我在工作时从下面这些方向循序渐进
    1. 从模型转化入手
    2. 掌握推理流程(推理引擎的特性)
    3. 自定义算子入手
    4. 做个端到端的部署过程

原本以为已经稳了,没想到反手进了人才库,想不通为啥,觉得回答的都还行。。

地平线 (拿到 offer)

3.25 一面

地平线的面试官是目前遇到的水平最高的,上来只问了我高通的项目,并且延伸得很广,对底层的考察也非常多。

  1. 在和高通合作的过程中,对轻量化有没有什么收获,一般会用什么进行模型轻量化?

  2. 如何加速 Faster RCNN?回答:通用的话,用轻量级的 backbone 以及将 FPN 和 Head 中的卷积换成通道可分离卷积,并且可以 cls 和 reg 两个分支共享一个卷积,然后提了一下 CenterNet v2 用了单阶段的检测器提取高质量的 Proposal,所以可以将 proposal 的数量降低,这样的话运行速度也会加快,因为少了很多低质量的 proposal 送去回归和分类

  3. 你们对 person 类的检测性能低,是由于什么因素呢?回答:感受野不够,并且人物高斯核重叠

  4. 数据集的大小是怎么样的?有看过里面三个类 (person,hand,face)的数量吗?以及数据集的场景有没有了解过?

  5. 如果还是单尺度做检测,如何提升 person 的检测效果?回答:提高感受野,然后说了 Dilated Encoder 以及我们尝试过的 Transformer Encoder 版本

  6. 物体中心重叠有什么解决办法吗?回答:暂时没什么好的解决方法,然后延伸出 CenterNet 也没有解决这个事,但是 FCOS 解决了这个事(强行让网络回归比较小的物体),然后又说这样不够优雅,Auto Assign 让网络自己去学习回归哪一个物体

  7. 假设 FCOS 中,两个物体中心重叠在一起,按照策略,这部分区域只回归小的物体,那么大的物体就被放弃了吗?回答:如果尺度相差不大的话可能被分到同一层进行回归,那么大的物体可能被放弃了,如果相差比较大的话应该就是在不同层进行回归,所以不会有影响。

  8. 如果让你在三类检测中再加一类人头检测,你有哪些做法,会存在哪些问题?(开放性)回答:

    1. 额外加一个分支检测人脸,问题就是可能会跟人脸撞了,互相影响训练
    2. 得到人脸之后往外扩充一个范围,将 ROI 区域拿去训练好的人头检测网络检测人头的坐标,问题就是人头检测器不能一起联合训练。(我现在觉得这个就是扯淡,应该不能这样干)
  9. 交付模型给高通的时候,部署方面有哪些问题呢?回答:op 不支持,需要手动修改或者利用 onnx simplifier 转化 op

  10. CenterNet 的高斯核的 sigma 是怎么确定?回答:(我记得的话是跟 CornerNet 一样的生成套路),也就是重叠区域的 box 面积要和 gt box IoU 大于 0.7,不知道对不对,有点忘了(对的,就是中心在高斯核内的矩形与 gt 的 IOU 要大于 0.7)

  11. 你了解 mAP 指标的计算过程吗?这个凭借着记忆说了一遍,但是面试官说讲错了很多,回去再复习一下吧

  12. 编程题:用 python 手写卷积

    X: (N_x, C, H, W)
    K: (N_k, C, h, w)
    

3.28 二面

地平线公司主要都是在做业务,所以会很看重项目,这个面试官也基本在问我的项目情况

  1. 高通大多数问的和之前的一些面试官差不多,记录几个不同的问题
  2. 高通用到的两个数据集是怎么样的?回答:都是从公开数据集中取出来的,然后说了一下数据
  3. 没有用 FPN 自动选择哪一层进行回归吗?回答:试过,但是效果不好,然后说明了高斯核重叠的问题
  4. 说一下联合数据集是怎么训练的,然后我就说屏蔽不存在的类别的 loss,面试官说他们那边也有很多这种类似的数据集,只有某一些类别,然后会打上 ignore 标签,并且表示我这种做法也没啥问题
  5. 你们 KD 具体是怎么做的,teacher 和 student 的 AP 相差多少,KD 之后有多少提升呢?回答:相差 5 个百分点,KD 之后提升了 2.8 左右
  6. MODNet 你们对数据怎么进行清洗的?xxx,然后面试官问,既然 COCO HumanParts 是 COCO 中有人的图片,那么直接用 COCO 和 COCO HumanParts 取一个差值不久得到了 COCO 中没有人的图片了吗?回答:还是会有一些会存在人(比如镜子里的人,比较小的人,很像人的建筑)。
  7. 讲一下 MODNet 的一个流程。(边缘预测,语义预测,alpha 预测,三个 loss)
  8. MODNet 最终的指标是在哪个数据集进行测试的?回答:业务上的数据集
  9. 你们的抠图项目如果图片中出现了多个人会一起抠出来吗?回答:会的,不需要进行特殊调优,本身训练集中就包含了多人的 case(不过这种 case 不是很多,但是我觉得网络有能力将所有人都抠出来,后来面试官问了一句有没有在一张背景上贴多个前景,我猜想他们是这么干的)
  10. 编程题:反转链表,直接 A

然后就是一些聊天,问业务,面试官就给我很系统地介绍了一下地平线做的智能驾驶相关业务,一个是车内感知,一个是车外感知,还有一个忘了。说我做的高通项目和车内感知很像,然后抠图项目他们也有在做,MODNet 他们也在用,而且改了很多结构,进行了很多减枝操作。最后让面试官给了我一些建议,他让我可以去了解一下智能驾驶大公司(例如 Tesla)公布的一些解决方案以及 case,总之 28 号面的两场都挺愉快的。

腾讯微保 (已放弃)

3.25 一面

本来是不想面的,跟 HR 说了但是没回复我,又已经答应面试了,就上了。整体体验十分差,HR 电话打不通,微信是假的,发信息也不回,浪费我一个小时.

主要就是问项目,大多数时间是我自己在讲,高通和 matting 都问了,估计看不懂论文就没问,然后做了两题,先让我讲思路,然后问我多久能做出来,然后他就走了,到时间过来,全程没有让我开摄像头,感觉面试官十分敷衍。

过了一个星期 hr 发信息给我说一面过了,约二面。。。不想面了

编程题1:

1.实现函数,输入数字(小于一亿的int),输出中文表示
# 输入:50321
# 输出:五万零三百二十一

编程题2:

(有序数组,时间复杂度小于 logn,那么就是二分法)

2.有序数组中的单一元素
# # 给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。(要求小于logn时间复杂度)
# # 示例1:
# # 输入:
# [1,1,2,3,3,4,4,8,8]
# # 输出:
# 2
# # 示例2:
# # 输入:
# [3,3,7,7,10,11,11]
# # 输出:
# 10

群核科技 (酷家乐) (拿到 offer)

3.29 一面

原本以为是个装修公司,没想到图形学和计算机视觉都搞,这个公司主要是做产品的,类似 AutoCAD 这种设计工具,听了面试官的介绍之后觉得还挺不错的,面试官的水平也挺牛的,出乎了我的意料。

  1. 介绍一下高通项目,面试官说从下面一些角度来介绍,我觉得他的思路很清晰,赞
    1. 动机,想解决什么问题
    2. 数据集
    3. 用的方法
    4. 最终的效果
  2. 用 MobileNet 是为了轻量化吗,最终模型体积有多大?
  3. CenterNet 变体工作有没有了解,然后我说怎么变都还是那样,引出了 CenterNet v2 是个加强版的 RPN
  4. 列举一些 AnchorFree 检测器,FCOS,ATSS,AutoAssign,reppoint(fsaf,FoveaBox)
  5. KD 的概念,要解决什么问题,让大网络进行剪枝和蒸馏有什么异同之处?
  6. Swin transformer 看了没有,他和 VIT 那些有什么不同之处?面试官想要的回答:在 window 里面做 self-attention,而不是全图做
  7. 讲一下弱监督,半监督,全监督,无监督,元学习的概念
  8. 编程题:字符串中不含重复字符的最长子串的长度 “abcabcbb” -> 3 (直接滑动窗口做)

4.1 二面

这次是未来的 mentor 来面我,水平挺牛的,问的问题都很到点上。面试完后了解到这家公司是独角兽,顿时刮目相看了

  1. 介绍一下 matting 这篇论文的做法
  2. 介绍一下 matting 对数据清洗的流程
  3. matting 的 groundtruch 是 0 或 1 的二值图吗?(这里是我介绍的时候口误,gt 是 0-1 的连续值)
  4. 这篇 CVPR 论文是二作,你在里面充当什么角色
  5. 讲一讲这篇 CVPR 论文
  6. 接下去就是考一些知识点的概念
  7. 线代中特征值和特征向量是什么意思
  8. 讲讲无监督的概念,举例一种无监督算法并介绍。回答:k-means
  9. PCA 的目的是什么,是怎么做的
  10. Adam 和 SGD 的区别,SGD 怎么改进使它不陷入局部最小值
  11. 代码题:手写 NMS

4.2 三面

三面 leader 面,群核科技 AI 部门负责人来面我,气场很足,问的问题十分戳到点子,让我感觉这家公司的水平真的挺不错的,很有好感。

  1. 介绍一下高通这个项目,你觉得最大的创新点是什么(我说了联合数据集训练策略),他开始有点没听明白,后面我说最后是 num_class 个二分类,屏蔽一些二分类的 loss,他就懂了,提出了自己的一些见解,觉得我这个有点像 multitask learning,但是我感觉不太一样吧
  2. 觉得你有什么优点,有什么短板(这个问题问的我很慌,我就说容易被打扰,他就继续问下去。。。),下次直接说:1. 涉猎太广泛,比较喜欢了解各种计算机知识导致有时候对自己专业不是特别精通。 2. 任务没有正反馈时,比较容易疲倦气馁。3. 英文写作水平还比较低
  3. 介绍一下 CVPR 文章,在里面扮演的角色,老师给的 idea 吗?
  4. 这篇论文的第三个 loss,你们是不是得根据先验获得物体对应的背景类呢?这样是不是不太自动化?
  5. 来我们这里的一个期望是什么,想获得什么?
  6. 想做偏工程一些还是偏科研一些?我说偏工程,然后他说觉得我的工程经验已经非常丰富了,跟我聊了他关于科研和工程的一些看法。做科研主要是要找对方向,并且要有人讨论帮忙,科研和工程本质上都是一样的,都得不断的思考,工程性的东西可以很快获得成就感,但是科研走对路了的话也是能获得成就感的
  7. 你未来的规划是什么?
  8. 反问:做的业务基本已经知道了,面试官又介绍了一遍,然后说工作挺有意思的,如何让网络去学习空间的点线面
  9. 主要就是以上这些,面试官关于科研和工程的关系跟我聊了很久,作为过来人给了我很多建议,挺感谢的。

腾讯 AI Lab

这边招人主要是做图像生成 research 的,虽然没有相关经验,但是可以去蹭一波面试经验,面试官挺牛的,对 research 有自己独到的见解。

3.30 一面

  1. 你的科研习惯怎样,拿 matting 这个项目来说,你是怎么去推进这个项目的
  2. 介绍一下高通的项目(每次我说完一个东西之后会说效果,以及不足,并且分析原因,面试官说我这点非常好,但是在说数据集联合训练的时候给出 hand 精度提高的原因是因为加入了更多 small scale 的样本进去训练,他觉得这个理由不太 convince,应该从 feature 的层面去分析原因,hand 和 face 得出来的 feature 应该是很不一样的,不能单从 scale 的角度去证明 hand 提升的原因)
  3. 既然 face,hand,person 三个类的 scale 相差很大,为什么不将他们分开检测呢?再多用一层 featuremap 只检测人体(这个其实高通也跟我提过,当时觉得麻烦不想做,不过应该也是一个可行的方法,可以构思一下面试的时候应该怎么回答这个问题)
  4. CNN 和 Transformer 有什么不同的地方呢?
  5. 有做过图像生成么,或者 GAN 有做过吗,是用于什么场景呢?(自己玩过 DCGAN)
  6. 然后面试官介绍他们的 research 主要做的东西,CG 转高清人脸视频,问我做这个的话有什么优势?我只能说我的学习能力很强了,毕竟没有做生成相关的经验。
  7. 问手里还还有没有项目在做,过去换方向做 GAN 的话导师会不会同意之类的
  8. 然后就说通过的话后续会安排二面考察工程能力

4.6 二面

这次有两个面试官一起考察,上来直接做了两题,应该凉了

  1. 给你一个 H*W 的灰度图,以 k 为窗口大小进型不重叠滑窗,可以产生 (H/k * W/k) 个 patch,对每一个 patch 提取特征:算出梯度的方向,然后将对应的角度 (0-360) 划分成 9 个区域,输出梯度方向在每一个区域的概率(也就是输出的 tensor shape 为 [H/k, W/k, 9])
  2. 给你一个 NCHW 的向量,求每一个像素对其他像素的自相似度,也就是 self-attention 在 softmax 前面进行的操作
  3. 然后就是另一个面试官了,随便问了我一下平时工程习惯,怎么组织训练代码,测试代码,以及模型保存什么信息,怎么命名之类的,想规范的话就是组织一个 train 脚本,然后通过 argparse 传入不同的参数,保存的时候多保存一些信息,如 epoch,optimizer 之类的。
# 计算 2D 或者 4D tensor 相似度
import torch

def sim(query, key, eps = 1e-8):
    input_dim = query.dim()
    assert query.dim() == key.dim()
    if (input_dim == 4):
        B, C, H, W = query.shape
        query = query.reshape(B, C, -1) # B,C, H*W
        # 用 permute 会出错,因为只是转置一部分
        query = F.normalize(query, p=2, dim=1, eps=eps).transpose(1,2) # B, H*W, C
        key = key.reshape(B, C, -1) # B, C, H*W
        key = F.normalize(key, p=2, dim=1, eps=eps)
        similarity = torch.matmul(query, key) # B, H*W, H*W
        assert similarity.max() < 1.001 and similarity.min() > -1.001, 'cosine similarity ranges [-1, 1]'
        return similarity
    elif input_dim == 2:
        B, C = query.shape
        # 用 permute 会出错,因为只是转置一部分
        query = F.normalize(query, p=2, dim=1, eps=eps) # B, C
        key = key.permute(1, 0) # C, B
        key = F.normalize(key, p=2, dim=0, eps=eps)
        similarity = torch.matmul(query, key) # B, B
        assert similarity.max() < 1.001 and similarity.min() > -1.001, 'cosine similarity ranges [-1, 1]'
        return similarity
    
input = torch.randn(16, 256, 8, 8)
print(sim(input, input).shape)
input = torch.randn(16, 256)
print(sim(input, input).shape)

腾讯音乐

4.2 一面

估计是招人去做移动端 APP 的,问了一堆移动端模型压缩的问题,几乎是没有研究过的领域。。。

  1. 首先问了一下导师以及我们组是不是有博后在带,巴拉巴拉
  2. 直接问高通项目了,问是在高通什么平台进行的测试
  3. 知不知道 npu 和 gpu 加速的区别
  4. 移动端模型压缩有哪些方法?我说了通过硬件优化特定算子,指令集加速,模型剪枝,蒸馏,算子融合,转格式用推理框架
  5. TensorCore 有知道吗?TensorRT 加速的原理是什么,为什么会加快推理速度
    1. 支持 FP16,INT8,减少计算量又能保持精度
    2. 算子融合,层融合
  6. 高通模型前向 10ms 是在什么平台进行的测试?理论计算量是多少?测试 FLOPs 的时候是不是多帧测量?
  7. 高通的 npu 架构是很强的,不能单看高通的数据,你有没有自己在移动端部署过这个模型?是什么型号的芯片?
  8. TorchScript 中的 script 和 trace 有什么区别?
  9. 用过移动端框架 NCNN 吗?TNN,NCNN 会比 TFLite 效率更高的原因是什么
  10. 你有用到蒸馏,说一下你蒸馏是怎么做的,你有用过剪枝吗
  11. 抠图的项目有和抖音这些软件进行过速度和效果对比吗?。。。
  12. 反问环节,面试官说我移动端的知识还需要再学的深入些(我压根没学过。。)

字节跳动 (拿到 offer)

4.2 一面

好家伙,面试官周六晚上八点开始面,直接给我面了两个小时,十点结束,我人都傻了,不过可以看出来这个面试官涉猎很多方向,并且能很好地指出我项目中存在的问题,非常有经验。

  1. 介绍高通项目,提出了哪些改进
  2. 模型对大物体检测性能不好,如果是由于感受野的话为什么不直接用一层比较小的特征图来专门检测大物体呢?(高频问题! 想清楚下次怎么回答,这次把锅甩给高通了)
  3. 高通模型 10 ms 的速度,是在哪里测的呢?分辨率有多少?(512*512),面试官表示很震惊,没见过能跑的这么快的
  4. 你有用到蒸馏,是怎么用的,有关注最近的蒸馏文章吗,讲一些工作的大概做法。
  5. CVPR 这篇文章你是在里面负责什么?有没有涉及到代码的编写呢?然后聊了一会儿说大规模预训练结合到下游任务现在是个非常好的方向
  6. 讲讲 CVPR 这篇论文,你对弱监督了解多少,简单介绍一下(然后就从传统 CAM 到增哥的工作大概讲了一下有什么变化)
  7. MODNet 主要流程大概是怎么样的呢?如果要对他进行改进的话,你觉得有哪些是可以改的?回答:可以做一些剪枝,去掉一些分支(Low resolution 用于检测简单场景,High resolution 和 Fusion branch 用于检测复杂场景),然后换深度可分离卷积
  8. MODNet 的 loss_c 是什么意思?(引用之前的文章的 composition loss,就是要让 gt RGB 合成图和 pred 的 RGB 图的每一个像素值都尽可能的一样,保证预测的完整度,这个面试官应该自己部门也做过 MODNet 相关业务,问的挺多的)
  9. 给个业务场景,比如 matting 这边的话,假设有大量的 noisy label(经过模型标注的伪标签),如何将这些伪标签利用上呢?回答:如果是分割任务的话可以用 CRF 或者 Random Walk 来 refine 一下标签;或者参考文献将 noisy label 和 精细的 label 一起训练提升效果;或者用 noisy label 先训一个模型,作为预训练权重,然后再用精细的 label 进行 finetune;然后问面试官给点提示,他说他也没做过,只是一个开放性问题,然后说如果是他的话,可能会用不确定性来将 noisy 的部分给干掉。
  10. 移动端部署加速的话你能想到用什么办法吗?回答:剪枝,蒸馏,特定算子优化,算子融合,量化,用推理框架,用指令集加速(NEON 在 ARM 平台可加速),根据场景选择 npu 以及 gpu (然后我就引出我和华为有过合作,用过他们的 npu,在效率上会比 NVIDIA gpu 快很多)
  11. 编程题:Leetcode 组合总和II,开始用滑动窗口做,发现有点困难,后来直接用回溯就行了。

4.7 二面

这个面试官水平挺高的,但是很多东西问的太细了,有些答不上来,并且最后的题目也挺变态的,太麻了。

  1. 详细介绍一下高通这个项目
  2. MobileNet 里面有 BN 层吧,在部署的时候有对 BN 层做什么处理吗?回答:应该将 Conv BN ReLU 三层融合为一个算子了,这样的话可以加快速度
  3. CenterNet 假设两个极值点靠的很近,就相差几个像素,怎么区分这两个物体呢?
  4. CenterNet 是怎么获取极值点的?:先对 heatmap 进行 pad,再用 3*3,stride=1 的卷积核进行 maxpooling,得到 hmax,hmax==heatmap 的部分即为保留下来的极值点
  5. 动态损失权重为什么不直接在 GT 上操作,为什么要重新生成一个 mask 呢?回答:这样也是可以的,但是我们其实只是想要最靠近中心的那部分区域的损失加大,因为这部分才是分类正样本的区域,旁边的区域本身的权重就比较小,再乘上系数的话可能也没有太大影响,如果要让他生成符合我们目的的高斯核的话就得修改 sigma,稍微麻烦一些
  6. 详细介绍一下抠图这个项目
  7. 为什么不适用一个大型的模型来对你们的业务数据集进行推理呢?(这样确实是可以的,而且应该效果会更好,但是之前没想)回答:MODNet 的模型比较方便直接使用,其他的可能没有开源或者效果不怎么好,我们这样推理出来的七八百张图片也够用了
  8. 抠图最终的数据集有多少张?前景图有多少张?
  9. 你们合成数据时就直接将前景贴到背景上去吗,有没有做什么操作?回答:直接贴,后来他说背景和前景的光照度对比度之类的,我就说我们找的背景都是很亮的,和前景没有太强的对比度,不过可以去看一下有没有论文解决这种合成数据的问题,问到的话可以说一说
  10. 语义分割领域中,一般有什么方法来处理不太精细的边界问题吗?回答:CRF,RandomWalk,面试官问我知不知道原理是什么?直接跪
  11. 两个数据集,一个有 3 个类标注,一个有 1 个类标注,bs=16,如何每次都 sample 出一半 A 数据一半 B 数据?回答:重写 sampler,他问具体怎么实现?讲了我的一些思路,但是应该讲错了,再次跪
  12. 做分割时,假设我们用的是 512 分辨率训练,测试用一张 4k 或者 8k 的图片推理上采样回原图后,边界模糊怎么处理?回答:用类似 canny 的 nms,其实是错的,这种 nms 针对的是边缘区域,但是我们的分割图并不是边缘。好的做法有将图片切 patch 送入网络中进行推理,不过这样子的话推理时间会增加。另一种做法呢,面试官跟我说可以用引导滤波。又跪了
  13. 一般移动端模型轻量化有哪些方法?这个我刚好复习过,所以讲了很多方法。没想到他接着问,说一下剪枝的具体做法,说一下量化的具体做法,int8 缩放系数是怎么设定的。
  14. 讲讲 CVPR 论文,你们是怎么获取到与类别相对应的背景类的呢?回答:先验知识
  15. 编程题:用 SGDm 求 X**2 + 2*x -3 = 0 的解,破防了。

以为凉了,没想到竟然在 6 天之后收到了三面的消息!!!

4.19 三面

  1. 介绍高通项目,应用场景是怎样的
  2. 为什么不用 FCOS 等后面出来的 Anchor-free 检测器
  3. 对 FCOS ATSS 有了解吗,介绍一下
  4. 高通模型有自己部署在移动端吗?用的是什么框架?其它一些框架有没有了解过
  5. 介绍一下抠图项目
  6. 有对抠图做一些部署方面的处理吗
  7. 视频抠图中一般会出现什么问题?回答:画面光影抖动,导致抠图效果差。怎么解决这种问题?回答:收集几帧的数据,利用不确定性判断改区域历史像素的方差,方差大说明抖动厉害,结果不太可信,需要对历史像素进行加权。
  8. 开放题:假设会议软件中,背景抠图,但是只想抠主体的人,对非主体的人不想抠,如果还是用 MODNet,可以怎么改进呢?回答:1. 识别关键点进行解算 pnp 得到距离,只扣距离最近的人(但是思路是错的,万一两个人叠在一起就 gg)。2. 实例分割加抠图加距离解算。3. 面完后突然想到可以用 ROI,识别到人之后就把识别范围缩小到主体周围区域。
  9. 其他 CV 领域了解过吗,实例分割,GAN,看过那些文章或者做过什么项目
  10. 将 GAN 应用到检测分割当中提升性能你会怎么做?回答:用在蒸馏中,引入 GAN 的判别器,让学生的分布尽可能地与老师的分布相似,这样才能骗过判别器,同时也达到蒸馏的目的
  11. 讲讲论文,然后说我们的做法是比较 trick 的,已经有好几个面试官这么说了
  12. 开放题:抖音里面的机器人怎么识别?回答:根据动作,记录点赞关注的次数,然后利用聚类算法,对账号分为 k 类,如果点赞关注很多的话,特征的聚类中心会往机器人那一类靠近,然后再去进行下一步判别
  13. python:GIL 了解过吗?
  14. 如果数据集特别大,PyTorch 有什么策略可以加快 IO 的效率吗?回答:num_workers 多线程,preload,pin_memory
  15. C++:堆和栈的区别,vector 的内存管理模式

4.20 HR 面

HR 面了我 1.5 个小时,我看别人都是半个小时走个过场,怎么我面了这么久,一面我也面了两个小时,从来没见谁面过这么久。。这次是 hr 和另一个面试官一起面的,估计是 leader,但是全程都是 hr 在和我聊

  1. 学习、生活、家庭自我介绍
  2. 项目是怎么来的,有自己找过项目做吗
  3. 怎么平衡项目和生活的,做项目会不会耗费很多时间
  4. 为什么要从自动化转到计算机,当时怎么不转专业或者双学位
  5. 以后想留在深圳吗,有女朋友吗,女朋友也想留在深圳吗
  6. 爸妈的情况,对你留在深圳是什么态度
  7. 来我们这里有什么规划呢
  8. 你对自己未来的规划是怎么样的
  9. 你对实习的 mentor 有什么期望吗,希望从他那里获得一些什么
  10. 说说你显著的优点和缺点
  11. 接到一个项目你是怎么安排进度的呢
  12. 介绍一下你做过的这些项目
  13. 这么多奖项中,说一个最让你自豪的奖项:RoboMaster
  14. 你觉得你们机器人队伍能够打败其他队伍的原因是什么呢
  15. 这么多奖项中,说一个让你觉得最难拿到的奖项:RoboMaster
  16. 机器人队的规章制度是怎样制定的
  17. 有想过当管理人员吗
  18. 以后有机会往上爬的话,更想当偏管理一些还是偏技术一些? 四六开
  19. 你的抗压能力表现在什么地方,知道字节的上班时间表吗(正常是晚上九点下班)
  20. 想进来做工程是吗,如果可以发论文的话,你愿意吗
  21. 你觉得对师弟师妹来说有成为一个榜样师兄吗
  22. 你觉得自己前三面的表现怎样,觉得三个面试官怎样
  23. 三面的表现满分十分,打多少分,我说打七分,因为一些开放性的问题没有回答得特别好,面试完了之后想到了更好的解决方案。然后 hr 跟我说对自己自信点,前面的表现都挺好的,我就有些放心了
  24. 啥时入职,实习多久,说让我可以早点过来,公司就在学校旁边
  25. 有没有其他 offer,或者在流程中的

还有很多问题都记不得了,反正网上能找到的应该都问了 一遍,一个半小时底裤都被问没了,然后晚上看牛客很多同学都被 hr 挂了,然后我就很慌

vivo (拿到 offer)

一面

不知道啥时一面的了,也没有记录,当时面试官迟到了很久都没有进来,我向 HR 打电话也打了四五个才接,跟我说面试官可能忘记了,然后要去提醒他,我当时想着 MMLab 应该稳了,就直接跟 HR 说要不就不面了吧。然后过了一会儿面试官打电话过来说面试,我想着面就面吧。。

然后过了两天就收到了 MMLab 的感谢信。。。

4.12 二面

直接是 hr 面,hr 还迟到了,聊家常

  1. 本科成绩怎样,学校保研率怎样,你怎么保研的,团队有多少人,排名第几
  2. 在比赛中负责什么,强度怎样
  3. 比赛中跟别人有过分歧吗?怎么解决?
  4. 你觉得你是个怎样的人?
  5. 如果别人让你看代码 debug,但是你在做自己的事,怎么办?
  6. 家里是哪里的,父母做什么,家里生了几个,以后想在哪发展,父母意见怎样?
  7. 深圳最吸引你的地方是什么?回答:开放包容
  8. 目前有投递其他公司吗?在什么样的流程了?
  9. 什么时候到岗?
  10. 介绍薪资待遇

美的 (拿到 offer)

进行了一次电话面试就直接拿到 offer 了,基本上就是对着我的简历进行提问,记录一些其他公司没有问过的问题

  1. 为啥用 CenterNet 不用更先进的 YoloV5 呢?回答:没有 nms,并且代码结构更简洁,改模型也更方便
  2. CVPR 这篇论文中,如果图里有多标签怎么办?回答:一个类一个类进行循环计算四个 loss

腾讯 ieg

4.18 一面

本来投的是 CV 岗,后来安排到 ieg 的游戏前沿部门去了,还是客户端开发,压根不熟的领域,然后面试官跟我说进去不是做开发的,看我有深度学习的背景就要了我的简历,进去为游戏业务做超分应用。面试官人很好,特别好说话,我回答不出来也一直说没关系没关系。主要是对 cpp 和 python 相关知识的考查。

  1. 简要问了一下项目,问帧率怎样
  2. 堆和栈的区别
  3. 链表和数组各有什么好坏之处
  4. #define 和 const 有什么区别(#define 没有类型,const 会对类型进行检查)
  5. 引用和指针有什么区别
  6. 多态是怎么实现的呢?虚表
  7. cpp 是类型安全的语言吗?不是,可以强制转化类型
  8. stdcall 有了解过吗,有没有了解过设计模式(这个真不太了解)
  9. python lambda 函数的应用场景(解耦)
  10. with open () as,这个是什么原理?上下文管理器
  11. os 和 sys 两个库有什么区别?一个针对操作系统,一个针对 python 解释器

上海人工智能实验室 Open GVLab (拿到 offer)

上海人工智能实验室-商汤联合实验室

4.20 一面

  1. 讲一下高通项目
  2. 为什么不用 Anchor-based 的方法,在工业界其实还是 Anchor-based 的用的多,因为召回率高
  3. 讲讲 CenterNet 这种用点来检测的方法和 Anchor-based 相比的优点在哪里
  4. 抠图和分割有什么区别,抠图的前景背景代表什么 (面试官纠结这个问题纠结了十分钟,明明一个很直观的问题搞得很复杂,我都差点喷人了。。)
  5. MODNet 语义的部分是怎么预测的,人的姿态千变万化,他为什么能够那么好的预测出来?因为 Backbone 使用了 Human Segmentation 的预训练权重,引入了先验知识
  6. 抠图你用了 MAD,MSE 指标,还了解其他指标吗?不了解,他表示还有结构上的指标,梯度那些
  7. 更多的就忘了,本来也没打算记的,反正问了一个小时,没做题,他表示商汤更加注重学术,看我做了这么多项目工程能力应该也不错。总体来讲,面试体验中等偏下

4.21 二面

  1. 从三个方面讲一下高通项目:动机,方法,效果
  2. 你用到了 Transformer Encoder,你觉得他和 global attention 或者 self-attention 有什么区别呢?为什么选择他?回答:一开始借鉴开源代码,别人是这么做的确实有效果,然后就直接用了,而且 Transformer Encoder 里面本身就含有 self-attention
  3. CenterNet 能解决两个物体的中心点重叠在一起的问题吗?回答能或者不能,回答:不能,但是 COCO 里这种现象非常少,后续的 FCOS 也用多尺度的方案解决了这个问题
  4. 你用到了蒸馏,那么你觉得蒸馏和直接用 GT 相比,有什么好处?回答:蒸馏提供了一个更加 soft 的 label,可以使网络更好地去拟合。
  5. MODNet 是一个 Trimap Free 的还是 Trimap Based 的算法?介绍一下他的大概流程
  6. 抠图方面,怎么让一个小数据集训练出来的模型更具有泛化性呢?回答:1.贴多种多样的背景,2.在分割预训练模型的基础上进行 finetune,可以提供一些语义上的先验知识,3. 用在大数据集上训练过的大模型来蒸馏这个模型
  7. 有些问题忘了。。然后介绍部门,表示过去的话应该还是做抠图相关的研究,不仅仅做学术研究,可能还要落地
  8. 编程题:手撸 IOU 计算公式

秋招

蔚来提前批

7.15 一面

一直在听我讲论文和项目,用了 40 分钟吧,只问了一道 python 的题目,我还答错了。。

在一个长度为一百万(1000000)的列表中搜索某个元素是否存在,用 list, set, dict 哪个数据结构的速度是最快的呢,为什么?

7.29 二面

也是半小时结束战斗,现在记不太得问了些啥了,也没问啥吧,详细介绍了一下在字节做的项目,然后手写堆排,写完之后我 g++ 写成了 gcc,编译没通过,尴尬。。讲了一下思路之后,面试官:代码还得练练

突然记起来了一些:

  1. 你认为现在目标检测的瓶颈在哪里,以及目标检测未来的发展趋势是怎样的
  2. 知识蒸馏现在的发展介绍一下

insta360 影石

7.29 一面

这个面试官好顶,一题都没做问两个项目问了 80 分钟。

  1. 介绍字节做的项目和科研
  2. 你们的相机是怎么部署的,有什么讲究吗,FOV 有多少,怎么确保每一个机房都能够适配?
  3. 你前后处理操作是怎么包含进模型里面的?
  4. ByteTrack 比较 heavy,你们这种场景下需要用到 feature 吗?回答:我们只是用了 IOU 的匹配策略,并没有提取 feature 作为 cost
  5. 介绍一下 ByteTrack,还好我看过
  6. 卡尔曼滤波器的状态量和观测量是什么你了解吗?
  7. 带速度的卡尔曼怎么建模呢?我就说是不是高阶卡尔曼,面试官说是这个意思
  8. 假设拥挤场景下,利用 NMS 的阈值筛选之后有一些虚框或者漏框,在 tracking 的时候导致 id-swtich,如何解决这种情况?
  9. NMS 你清楚吧,对他的改进有做了解吗?我介绍了 Soft-NMS 的思路,其实面试官上一个问题应该就是想让我说对 NMS 进行改进
  10. 介绍高通做个这个项目
  11. 请教一下为啥不用 CenterNet 原本的沙漏网络呢,或者直接对沙漏网络做一个裁剪?回答:MobileNet 试过以后效果不错,符合预期,就没有去做了,而且自己裁剪的话就没有预训练权重了
  12. 假设有个场景,需要让你去将手、脸、人体当成一个 instance 的整体,你会怎么做?回答:因为之前没有这种数据集,所以我们可以借助骨架点检测网络,再通过检测出来的框与单一的个体进行匹配
  13. 高通算法部署在什么平台,测速在哪里测的
  14. (打开笔试题)你的编程题最后一题没做出来呀?我回复我觉得答案错了,然后跟他讲了思路(动态规划最小路径和),然后面试官觉得没啥问题了
  15. 笔试是 C++ 写的,考个 C++ 问题,你们的相机 sdk 库出问题了,发现是内存泄漏,你怎么知道是什么情况造成的呢?怎么样不借助第三方工具检测出哪一行或者哪一个变量引发了内存泄漏?答案:一般都是 new 了变量之后忘记 free 造成的泄漏,具体实现检测的话可以定义一个 wrapper 函数,在 new 一个变量的时候就打一个 log,结束之后从 log 里面找哪个变量没有被释放。我想回答的是跟 python 的装饰器那样做,其实理论上是一样的。
  16. 你给别人提供一个模型,别人业务上需要确定一个 score 阈值,你怎么给别人推荐?回答:根据他的业务需求来,想要高召回的模型的话阈值可以调低些,高准确的话阈值可以调高一些
  17. 你对今后从事的工作有什么看法或者计划
  18. 对我们公司有什么了解吗,有什么亲朋好友在这里吗
  19. 反问阶段,部门是干啥的:做目标追踪的(怪不得问那么多追踪的题目),然后介绍了很多
  20. 反问阶段,部门作息怎样:96(6.5)5,早来早走

8.4 二面

  1. 详细介绍抠图项目
  2. 抠图部分有试过人体部分只用分割模型,头发丝部分才用抠图模型吗?没试过,但是这样的话就有个问题,如果人背着包或者拿着什么东西的话,不能很好地分割出来。
  3. 你对腾讯视频的虚拟背景有什么看法?回答:我现在的背景比较干净,所以抠得比较好,但是背景复杂或者有人经过的话,其实会将后面的人也抠出来,作为客户的话,其实我只想要抠出来的结果是我自己,不想把其他人抠出来,然后问我怎么做,我说用 pnp 解姿态,通过几何运算得到每个人到相机的距离,保留最大距离的个体,这样的话需要通过关键点来求解 pnp,可以借助一个人脸关键点检测网络。然后面试官问我对显著性检测有没有了解,其实跟抠图任务差不多,但是用显著性检测来做这个功能的话就得收集一批数据了,将人体作为一个显著性的目标。用显著性检测确实也是一个可行的方法,或者可以借助深度估计网络来一起做这个事情。
  4. 介绍高通项目,这三个类需要进行关联吗?回答:不需要,首先是没有这种标注的数据集,如果要关联的话得借助其他的网络例如骨架点检测网络来辅助检测
  5. 介绍字节的检测项目,如何解决低召回和误召回问题
  6. 介绍一下 FP,TP,FN 分别是什么意思
  7. 为什么选用 ByteTrack,有用到 ReID 特征吗,介绍一下 ByteTrack
  8. 还知道哪些 tracker,稍微说一下
  9. C++ 有哪三种继承方式,protect 继承的时候,派生类能访问父类的哪些类型的成员变量?
  10. 打开 leetcode 做了一题 “数组中只出现一次的数字”
  11. 反问阶段:部门氛围,公司对部门的重视程度,对同类竞品的调研程度

二面结束之后,过了两个小时就约第二天 HR 面了,希望顺利! 翻了很多帖子,都说 Insta360 的氛围确实很不错。

8.5 HR 面

超参数

OPPO

大华

百度

TP-Link

腾讯