计算机视觉算法竞聘者的职业技能需求

2022-03-02  本文已影响0人  CV算法恩仇录

原创:王稳钺
资料来源:二可

有很多对计算机视觉方向竞聘者对于CV面试过程当中需要具备哪些技能不太了解,本文主要介绍计算机视觉面试中主要的考核技术点。

1. CV算法岗的总体能力需求

首先CV的应用领域非常广泛。比如无人车,其中会需要车道线的检测等;比如利用GAN来实现老照片修复、美颜等。现在还有一些比较前沿的应用——元宇宙,其实在之前被称为虚拟现实领域,它背后其实隐藏着大量的理论。比如虚拟的物体,它如何能够像真实物体一样,定在某一位置,不随着设备的移动而移动,其实这背后是非常复杂的数学原理,需要实时地去计算它的相对位置。还比如与虚拟场景的交互,这就需要非常准确地去定位到指尖的位置点。其实现在的大趋势是人们已经不再满足于应用在二维场景当中,而是希望可以应用在三维场景当中。

已经下定决心或者有打算在CV领域深耕的话,那么可能会有一定的疑惑,就像CV有这么多的应用,怎么可能能够把它全部掌握呢?其实答案就是没有可能。所以在面试过程当中究竟会碰到什么样的问题呢?实际上对于算法岗的要求,尤其是关于面试的部分,主要是四门“功课”。这四门功课中第一门是传统AI。传统AI比较重要的是分工具考察。下图中打勾的部分是一定要完全掌握的。其中KNN和NN是不一样的东西,都需要掌握。SVM这部分打了半勾,面试当中是直接考代码层面的话是基本没有出现过的,可以稍微忽略代码,但是文字层面、数学层面要能掌握最好。

完全掌握包含着三重含义。首先,需要做到语文层面的文字描述,比如KMeans是什么,如何做的,一步步的需要用文字描述出来。第二重含义就是需要把文字的内容幻化成数学的部分。比如一些数学公式必须知道,比如Linear regression中的损失函数,BP中二次方程的求导,sigmoid求导等。虽然现阶段如果不是涉及到那种最内核的写工具的职务的话,一般情况下咱们是不用自己去写这部分的,但是它作为这个行业的基本功是属于敲门砖性质的。虽然可能不用,但是不代表你不能不会,所以这部分也是需要掌握的。所以数学是第二个层面。第三个层面是要有能力根据数学公式或者根据文字描述,无论前两个层面怎么样编排,能够写出代码。

下面展示了传统AI部分真实案例,这些内容是完全可以出现在面试当中的。

第二门“功课”是传统CV。这一部分内容比较少,但其实传统CV包含的内容非常丰富,但是面试中考核的不多,因为传统 CV 的绝大部分领域都能够被深度学习或者现代的方法所替代,而且效果要远远好于一些经典的算法。一般情况下是分重点考察,这个重点其实就是特征点的提取。

其中SIFT是最重要的,是应该掌握的。首先语文层面要能够描述出来SIFT是什么,它的理念是什么,它的步骤是什么,它的类似结果是什么,它的作用是什么……其次,其中有一些细节,如果能达到数学层面,就更好了。比如求导如何求、泰勒公式怎么展开、插值如何插出最优解等。

其中打叉的部分——频域,如果没有时间,就不用去了解了。之所以涉及到频率,是因为传统CV它是脱胎于电气工程专业的。因为传统CV一般我们叫做图像处理,是一种二维的信号处理。一开始的时候计算机视觉是一大批做电气工程的人,在这个领域里面耕耘。而这个领域里面的人,他最熟悉的内容就是把时序或者叫空域的信号转变成频域,因为空域当中的卷积操作可以换成频域当中的乘积操作。所以这样的转换会让后续的操作变得非常便捷。但是现在由于计算能力的提升,现在的很多算法已经脱离频率,所以频率在这个现代的应用是比较少的。

下面展示这一部分可能出现的面试内容。

第三门“功课”是现代CV/DL部分。这部分内容就非常多了。之前提到的所有例子,比如无人车、无人机等等,实际上都只属于这个部分。所以这就是为什么不是有一些项目,或者在某一个公司做了一定的实习等等,面试就能成功。因为 CV 考的是四门功课,而这些都只是一门功课而已,所以其实还是挺有风险的。

当前CV/DL部分,实际上是分学科考察,并不是掌握所有内容,而是要精通至少一个领域。所以这就需要选定一个钟爱的领域,然后在这个领域中深耕。但这前提是必须掌握好基础,比如CNN基础,一些经典的网络结构是必须要掌握的。

更深层次的分类可以见下图,CV/DL包含了很多算法,挑一个领域或者把某一个领域的应用在其他的领域里面,比如说创造了一个新的网络架构或者创造一个新的训练的方法,这都是可以的。底层业务端这些内容主要是针对那些比较想做工程的,这其中会涉及到了对网络进行量化或者蒸馏或者减值的操作。因为一些直接从算法端拿来的网络可能会非常的大,但是应用的场景如果是一些移动设备,要跑一个非常大的模型是跑不动的。所以这些算法是需要掌握的,这些是属于底层业务端的。还有应用端,包括分类、跟踪 、检测识别、定位、生成对抗、活体检测等等。

一般来说,可以从底层业务端或者应用端选择一个或以上的算法来复习。因为毕竟竞争的人都是挺厉害的,所以一个方向话可能略显单薄。比如在面试之前只做过一个项目,而对方直接两页纸,这就比较难竞争。所以建议选择一个以上方向项目。

下图展示了一些建议。不要单独选择分类方向,分类的话一般情况下比较简单。但是要真正把分类当做科研去搞的话,它可以搞出非常多的内容。但是这部分毕竟是具有很强的研究性,它可能比较难,所以对如果是科研导向,完全可以选择分类,然后把它做深做大。但如果仅仅是想做工程师,想把分类快速地应用到产品当中,那么就不建议单独选择分类。如果是刚起步,可以选择分类作为入门选择。其次一定要选择感兴趣的方向,不然可能会在一个领域里面越扎越深,然后越深越痛苦。

下图展示了当前CV/DL部分面试中可能出现的真实例题。

2. CV算法面试中的代码能力要求

接下介绍的就是在算法面试当中,有一门功课毫无价值,一点用都没有,但是就是要考的内容,这部分的对应内容叫做Coding Test,也就是第四门“功课”。这一部分无与伦比的重要,因为它在整个面试过程中具有一票否决权。可以参考两个网站,Lintcode和Leetcode,前者是中文网站,后者是面向全球用户的所以是英文网站,这时两个不错的刷题网站。刷题一定不能按部就班的刷题,一定要按模块刷,下面展示了重要的模块以及重要的例题。

对于这一部分,强烈不建议自学,因为它的内容太多,根本不可能在短时间内靠自己的能力学会。

3. CV算法岗的简历实例分析

接下来就展示一下面试官回如何看简历,如何写出一份好的简历。

Github是非常好的,因为这个东西写出来的话会直接给这个给面试官一个感觉是在做一些事情了,而且也可以直接看出编码风格。算法工程师也是比较重要的,因为有一些博士生可能面试的内容就不是工程师,可能面的是研究员或者科学家,这是不太一样的,因为有的职位就是面向研究的,主要工作任务就是发论文,在一些大厂当中这会比较常见一些。如果你写的是工程师,那在面试中就会问一些工程方面的内容,这是有区别的。

这里写了熟悉很多的算法,这些内容是个双刃剑。写了非常多的话,说明可考的点就非常多。那么一旦考到不会的,就有可能去质疑是不是在吹牛。尤其是写了解逻辑回归、决策树、SVM等,决策树如何决策,树如何分,这些内容都有可能考,写出来的就一定要会。还有一定模型优化的能力。什么叫一定的模型优化能力?做到哪种程度了呢?这是有歧义的。还有六级成绩,457并不算很高的分数,就可以不用写在简历中了。所以总体而言,对于这一页的建议是可以把职业技能把它归并到项目经历当中来去体现。

这一页中工作经历、教育背景、项目经历其实写的非常不好。首先工作经历和项目经历,这俩都是经历,可以将它们整合到一起。教育背景可以整合到基本信息中,,为什么要在工作经历和项目经历中间插入教育背景呢?工作职责中领导安排的其他工作,这是和技能完全没有任何关系的,完全不需要出现。一定要让简历显得比较的清爽,显得有的放矢。这就需要在描述时要尽可能的客观真实。

这部分写的就不错,如何做到在描述时要尽可能的客观真实,就需要有名词和数据。例如用什么东西达到了什么效果,比什么模型好了多少。非常简单的一句话就概括了会什么算法、用这个算法取得了什么优秀的效果,这是最专业的方式。

自我评价中数学基础牢固,这也没有必要去写,占地而且如果真的考了一个导数不会,就说明不牢固,其实完全没有必要出现。

在写项目经历的时候,一定要做到写的东西自己是了解的。比如上图中的三维位姿,这里面突然出现了一个跟之前的技能不太相符的一个东西,很刺眼。这里面突然涉及到了三维,这是一个比较有风险的事情。这个风险其实并不来源于经历,但是这个经历无形当中增加了挑战,因为以前都是二维忽然升级到三维,面试官会很兴奋,他就会开始考察。所以既然写了的东西,就一定要去了解。

希望通过阅读本文,可以帮助到对计算机视觉算法感兴趣,想要从事计算机视觉算法相关职业的同学。

上一篇下一篇

猜你喜欢

热点阅读