我,女生,AI工程师

本文是作者在2018年12月13日众智汇社群分享的记录。由@kellie 记录整理。

作者: 刘培 AI创业企业算法工程师

西安电子科技大学光电图象专业,硕士

毕业后就职于爱立信

2018年初加入AI创业企业,从事图象处理领域的研发工作

2017年8月17日,主讲人曾经做过一个分享:《我,女生,程序员》,讲述了自己从非计算机专业转行成为程序员的经历。

在今年初,主讲人再次前进一大步,成为了AI工程师。本文呈现给大家这一年的工作历程。


偶入人脸识别领域

开始做AI人脸识别其实非常偶然,因为我之前做程序员也不久,大概刚好一年的时间,但是到后来我觉得重复性太强了。

于是,去年冬天的时候我就考虑能不能离开换一份工作。我就开始把简历收拾了一下,准备去找新的工作。

在读研究生的时候,我的方向是偏图像处理的,我在简历上突出了这块,打算寻找偏工程类的图像方向的工作。

可能由于西安的市场工作还不是很丰富,一直都没有找到合适的,直到一个多月之后,我现在的老板找到了我,并和我进行了沟通。于是,在去年4月份,我加入了这个团队。

加入团队,从0开始

进公司之后,发现公司的同事们都特别厉害。在西安你很难碰到北大的同事或者中科院的同事,幸运的是我竟然碰到了。我从他们身上学到了很多,当然,很多基础性的工作就落到了我的身上。

数据采集

我来公司的前两个月一直没有接触跟技术相关的工作,而是在外面做数据采集。

大家都知道数据是推进算法精度的一个非常重要的资源,只有在大量数据上训练,我们得到的模型才会趋于精准。

我们公司是做三维人脸识别方向的,网上的数据库大部分都是图片是二维数据,三维数据需要三维采集设备去采集。

我们去了很多很多地方,因为现在人们的安全保密意识都非常强,所以我们在采数据的时候困难重重。

我们都是通过熟人、朋友去联系一些单位,给他们发礼品,鼓励他们去采集。我们也去了乡村、高校等,给他们送杯子。虽然困难,但是也挺有意思的。

我提到的数据可能跟你们提问中的数据不一样,我们采的数据是人脸,人脸点的彩色信息,位置信息会通过采集设备变为数据存储下来。

采集数据的两个月让我体验了非常不同的生活: case1:有的村民为了多要我们的一份礼品就向我们发火,甚至准备打架。 case2:有的年纪特别大的老人看到我们采集数据会送礼物,他们竟然坐着轮椅让家人推着过来。 因为采集的那几分钟要做姿势,做表情,对老人来说,也是很难熬的,而且90高龄的老人,听不到你的指令,做的表情也没什么差别。我们为了不让他们不舒服,就很友好的把礼品直接给他们,不让他们参与了。 case3:我们坐高铁的时候会把三维设备都紧紧放在怀里,因为摄像头都是玻璃,特别容易震动而导致一些镜头参数改变,很多次在路上我们一直都很奇怪的被大家盯着。 case4:还有6月份,我们去铜川交警队所在的一处道路管理处,是一排路边搭的石棉瓦房,里面非常的闷热,就在里面去采集数据。 但是我们几个年轻人也不觉得很累,相反会觉得这是不同于我们平时做研发,一个很难得的体验。

数据处理

数据采集之后还得我们自己来处理,还好有几个实习生可以让我来“欺负”一下。

为了能够快速地处理这些数据,我们经常用Python写一些批处理的工具进行特定的处理。

有的时候担心中间意外断掉,我们会下载一个TeamViewer远程控制软件,可以通过家里的电脑控制公司电脑的程序。所以睡觉前做的事情,除了敷面膜,还要看程序有没有断掉,有没有异常出现。

之后再对这些数据进行筛选,把不符合标准的数据删除,比如模糊不清或者脸部信息不完整的数据。

删除完之后,我们会写程序对数据进行矫正——把人脸放正,有时为了增强数据规模和数据姿态的丰富性,我们要做一定的数据增强。

数据标注

做完数据处理之后,我们要对数据进行标注。

举一个简单的例子,如果这个人戴眼镜,我们就给这张照片标“1”,如果这个人没有戴眼镜,我们就标“0”。 因为现在深度学习的很多训练都是建立在监督学习的基础上,通俗地说,机器识别出的结果判定为“1”的概率和判定为“0”的概率进行比较,概率较高的就被判定为最终识别的结果,所以我们要进行数据标注。 但是试验的数据集都非常大,我们不可能逐一点开文件,手动标注在文档里,再把文件关掉,然后再打开再标注,所以我们要写一些标注工具。这些标注工具通过界面展示出你的图片,我们看了这张照片直接按“1”或“0”,就会自动生成所需要的标准格式文件。

因为现在市场上有很多标注公司,他们是对成千上万的数据进行标注,但对我们初创公司来说还没有能力去购买这些资源,我们员工在空闲时间就会多标注一些,所以需要把标注工具尽量开发得非常顺手。

自己标注的数量级还是太少,更多的时候,在做二维人脸识别的时候是和一些外国的数据库糅合在一起用,比如WIDER FACE。

这些数据库是自带标签的,比如男是“1”,女是“0”,这些标签通常是放在文件名里的,我们就需要开发一些程序来读取这些标签,再生成我们所需要的标注文件。

这是我们基本的标注工作。

模型训练

数据标注并处理好之后,我们就可以开始训练了。训练框架目前很流行的有Pytorch、TensorFlow、Caffe。

我们选择的是caffe,它有一个很好的优势——模型和数据集都是分开的,数据集都做成了固定的格式,放在这个平台里,按照选定的网络结构,进行训练,训练完就可以生成一个固定的模型,放在测试代码里检测,直接可以得出识别结果。

接下来就是神经网络体现作用的时候了。

关于神经网络,在网上有很多资源可以帮助大家理解神经网络里卷积、池化、激活函数、损失函数、学习率这些概念,在这里就不一一给大家解释了,我自己理解的也不是很深。

今天就是想为大家去展现一个模型训练流程,这样大家在有了一个宏观概念之后,再去细分、研究和补充,会有一个非常好的效果。

我举一个例子:识别人是否戴眼镜的任务。 我们当时准备了10万个戴眼镜的和10万个没有戴眼镜的数据,我们对它们进行筛选、处理和标注,都准备好之后,我们准备在Caffe上进行训练。 在决定选用什么神经网络模型的时候,因为这是个二分类问题,也比较简单,所以我们选了一个简单的网络结构,层数比较少。 我们把学习率也设到了0.001,我们发现损失函数Loss是越来越小的,也就是收敛的。 Loss可以理解为,预测的函数和真实的函数的差,如果它越来越小,就说明我们训练出的模型是越来越拟合真实分布的。 模型出来之后,我们在自己搭建的测试平台里面去测试,得出概率,然后通过比较概率大小来决定判别结果。

目前我们在人脸比对和人脸库搜索等方面还需要很大的努力。

我最近在做很多工程类的事情,比如用Qt来做工程终端界面、之前做了一些H5的东西以及微信小程序,在创业公司你可能不能很长时间在做一件事情,所以我当时接触的不是特别深。

AI新人的职场感悟

来分享一下来到这边快八个月的时间我的一些感受。

算法并非高不可攀

我以前觉得算法非常难,高不可攀,但是现在当我参与到公司的一些算法训练的项目中,我有了一些感知,我觉得这些东西也不是那么抽象,所以非常有信心。

我希望每一个程序员,当你们想做一件事情的时候,就勇敢地去做,这些事情都没有想象中那么难,也并没有太高的门槛。

市场上,大家可能都会愿意选择研究生去做算法,可能也是看中了他们在研究生的一些数学积累。但是如果你可以由面到点地去学,我相信只要积累得足够深,你也是一个非常合格的算法工程师。

不要给自己设限

我们公司有一个男生,比我还小,前段时间公司需要一个安卓版的应用,他之前跟我们都是做算法的,从来没有接触过工程,但是他承担了下来。 他快速的学习能力是建立在他去分析新问题的思路上——先整体再微观,先实现基本功能再逐步充实,所以他是可以做到的。

我希望听到分享的同学们,不要给自己任何限制,只要你想做,那你就可以做到的。我觉得外界的传言有时候还是要屏蔽掉一些的,你只管去做,不懂就问。

与优秀者为伍

在公司还有一个非常好的感觉,同事们都很棒,他们总是用一些很高的要求来要求自己。

比如交大的一个小同学,他坚持用很优秀的人的习惯去要求自己,要求自己每天看书,给自己买了特别多的书,对书中的内容分析得很透彻,并且做了笔记,即使工作了还像一个学生一样——我觉得这种状态非常好。

其实工作也是一种生活方式,如果我们能够享受其中,我觉得已经离成功不远了。所以从这些很优秀的人学到了非常好的品质,学到了他们的坚持,学到了他们的认真,学他们对一个问题不解决不放弃的劲儿。

Q1:机器学习对硬件要求高吗?普通开发者学习AI的难度主要在哪一块?

A1:深度学习要大量训练数据的话,至少对GPU有要求,硬件目前还没有特别了解。

普通开发者学习AI的难度,我认为还是不高的。如果你们具有一定的工程能力的话,可以在GitHub找一些人脸识别或者语音识别方面的代码跑一跑,跑通之后再逐步去挖掘。

这个时候就需要去看一些数学方面的东西,现在网上的资源比较多,也挺容易理解的。

我觉得让一个没有工程经验的人直接去学可能不是很快,但是有工程能力的人去学AI相反会比较快。


Q2:训练模型用了多少服务器资源?多少时间?多大数据量?

A2:识别是否戴眼镜的任务,我训练了20万次,大概两三个小时。我们的电脑如果在训练模型的话,基本上你就别干其他事情了。


Q3:你入门AI花了多长时间,通过哪些资料学习的?

A3:入门AI,我之前也看过一些书,比如吴恩达的公开课,但是我觉得你真的想入门AI的话,不如去一个公司实习。


Q4:训练模型用的是阿里云的服务器吗?作为个人开发者学AI,需要怎样的配置?

A4:我们公司用的是自己配置的服务器,具体怎么样的配置,你可以私下问我,我去问一下公司负责搭建服务器这块儿的同事。


Q5:有很多开源AI框架,如TensorFlow,做工程还需要读论文并实现它吗?

A5:我们现在经常是需要看最新的论文,比如CVPR之类国际上比较有名的会议的期刊和论文。

我们做工程,就是发现他们有一些新的网络结构,有多少其他的层,我们对比一下,把网络结构改一改,试一下,看效果有没有提升。

我们经常是需要这样去读论文并实现它的,非常像在学校做科研,但是比科研会效率高很多。

大家有一定工程能力的话,真的可以去GitHub上找一些开源的源代码,把它配置好,跑一跑,做一做,比开始去补很多基础会快得多。

先宏观再微观是一个非常好的学习方法,对整体的一个模型有了感知之后,再去探究和测试局部的意思会比较好。


Q6:初学者,Caffe(作者采用)和TensorFlow如何选择?

A6:我个人后期非常喜欢Pytorch,因为我在做程序员时用的是Python,所以我觉得Pytorch还是非常好用的,Tensorflow可能做NLP比较多。


Q7:但是实习也需要基础模型知识的,面试官要问模型,如果一开始就去GitHub上找项目做的话,这样对模型的理解还是很浅的。而且直接看代码会觉得很困难,怎么样学习才对呢?

A7:因为我当时自己看书非常累,不知道他们在干什么。

后期我们公司有一个工作了好几年的大牛带我做了一个项目,告诉我先采集、处理和标注数据,然后在搭建好的一些模型里训练,并且在搭建好的代码里测试和验证,这个流程走完之后,我好像突然可以理解识别是怎么回事了。

之后我开始探究每一部分是做什么的,把相应模型的代码打开发现这个模型里面全放的是神经网络的层数,一层卷积之类的。这时我就提问为什么要加这几层?他会说层数多的话可能会提升拟合的精度,但也有可能过拟合之类的。我就再去查什么是拟合和过拟合。

万事开头难,这个过程可能每个人都无法避免,有时候可能需要一个契机,有时候可能需要你厚积薄发,很多路可能都没有办法去避免,所以我相信如果你没有合适的实习机会的话,你可以在网上去多找一些工程,总会有顿悟的那一刻。


Q8:专属女生的一些顾虑。

A8:”女生不适合做程序员,女生更别想着有去做AI工程师”——我觉得这些都是谬论。

女孩,有自己的优势,即使女生要面对生孩子问题。知识都是循序渐进的过程,我们积累了,有自己的体系之后,是不需要时刻具有非常强的精力和脑力去支配它的,它无非是生活中我们需要解决的一些问题罢了,所以希望每个女孩都要有信心。

现在成功的女生很多,我之前在赤兔上关注到了潇洒姐——趁早的王潇,我觉得她非常积极,而且做了非常好的事业。

我们把女生遇到的问题,转换一下心态,看做人生的不同体验,我们在生育孩子的几年好好照顾孩子。

在工作时,努力把工作做好,这样我们的资本就无形增加了。我们在市场上是有主动权的,就能够产出对社会有价值的一些技术。


Q9:你们公司有算法研究专家、做工程专家,分工明确吗?

A9:我们公司有单独的算法研究专家,有专门做工程的。

但是在开始招聘的时候,可能因为想把算法做到最好,算法工程师比较多,专门做后台、做终端的工程师就非常少。

现在我们公司在向工程方面倾斜,要成为一个产品,工程必须要过硬。

我前段时间做了一个微信小程序,类似于我们的颜值分析、微笑检测的一些属性,过两天可能就会发布了,到时候我可以发出来让大家体验一下。

我之前也没有做过微信小程序,花了一周时间按照教程做了一个,感觉挺有意思的。在创业公司,各种可能性都会发生。不要给自己设限,更不要给自己的方向去设限。


Q10:招人的标准是什么样的?有什么事情做好了是加分项?

A10:如果从公司来看,我觉得还是一个人的劲儿!

我们老板特别看重的一个人的钻研精神,即使一个人什么都不会但是TA很有那种把一个问题抠得透彻的精神,老板也愿意要。

还有就是解决问题的思路和方法,你是怎么去看待一个问题的,即使你不会,你觉得你怎么做可能会解决。

加分项当然是有比较好的机器学习或者数学基础,因为现在数学思维是非常重要的。

我们公司是做三维人脸识别的,目前在市场上这个领域的研究还是非常少的,在这个方向上我们还是很占有优势的。

如果大家有想了解我们公司的,或者是想跟我联系的,也可以在这里面跟我们联系。我们也可以跟市场上有需要的公司进行合作,帮大家去实现智能化。

原文发布于微信公众号 - 悦思悦读(yuesiyuedu)

原文发表时间:2019-01-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券