vivo图像算法工程师双非研究生可以吗_我的自动驾驶工程师成长之路

知乎上有这么一个提问,985车辆工程想往无人驾驶方向发展,大学期间应该学习哪些知识。我在高赞答主 @冰锐 的详细回答下面评论:这么大堆的罗列知识点不是指路,而是劝退。

985车辆工程想往无人驾驶,智能车,车联网方向发展,大学期间应该具体自学哪些课程and知识?​www.zhihu.com
vivo图像算法工程师双非研究生可以吗_我的自动驾驶工程师成长之路_第1张图片

没想到我的这条评论收到了12个赞,比一些我认真写的文章获赞还多。而正是这12个赞让我越来越不安起来。总觉得自己该写点什么回答一下如何从车辆工程转向自动驾驶的问题。真正写一篇综述很难,每一个人都有自己的成长道路。不如借由我的成长之路给大家总结一点点经验。


首先,自我介绍一下。我是2003年从非211/985大学机械工程专业本科毕业的。第一份工作是生产线上的设备维护工程师,也就是维修工。工作2年后决定出国留学读研,后有幸得到在瑞典查尔莫斯理工大学汽车工程专业学习的机会。在校期间主修计算流体力学和汽车被动安全,依然是机械背景。从2011年起我在沃尔沃汽车瑞典研发中心开始工作,一直从事主动安全和自动驾驶的仿真和验证工作。所以我的背景和经历完全可以回答如何从车辆工程转向自动驾驶的问题。


从知识结构来看,在瑞典的研究生阶段的编程能力对学习的帮助很大。工程类专业大多数课程都是有编程作业的,往往是用Matlab来完成。我在做完毕业论文之后对自己Matlab的编程很有信心,确定自己Matlab的水平在同学中是比较好的。这对我之后的发展很有帮助。除了普通的Matlab编程之外,我在学校期间去旁听了专门开给博士生的“高性能计算”课。这门课的前三分之一都是讲如何提高Matlab的运行速度,可以说是终生受益。2008年毕业后直接赶上了经济危机,在学校混了一段时间Project Assistant的工作后,又申请了一个“复杂自适应系统(complex adaptive systems)“的硕士项目,至今没有读完,但几门关键的课程,比如Artificial Neurnal Network,Stochastical Optimazation, Agent Based Simulation,对后来从事自动驾驶相关的工作非常有帮助。在2010年的时候学习神经网络是没有

import pytorch as pt

可以用的。我们需要看着老师的讲义,用C/C++来从头实现一个简单的神经网络算法。即使现在的Chalmers学生,在机器学习的课上好像也不需要这么一步一步地从头实现了。

2011年7月,我开始了在沃尔沃汽车的工作,也开始了不得不快速的学习各种新知识的历程。第一个项目是对视觉传感器进行建模,然后通过计算机渲染3维场景达到车载摄像头拍摄的效果,也就是photo realistic rendering。我当时密切关注好莱坞大片的特效技术,如何渲染,如何制作动画,等等。图像渲染圈的经典著作Real Time Rendering是我曾经每天抱在手边的书。但不仅如此,为了测试车载摄像头的机器视觉算法,我还需要了解各种物体检测的算法,已经如何测试和评价这些算法。为了收集交通标示的数据集,我还带着学生自己做交通标示识别算法,从其他数据源提取交通标示,再应用的实际测试中来。如此一番,在加入沃尔沃的最初2年,也就是2011年到2013年,我对computer generated image, photo realistic rendering,computer vision,machine learning, virtual reality, augmented reality,这些后来爆火的技术已经基本了解并且有了一定的实践经验。

从2013中期,我的工作转向了整个ADAS系统的模型在环(MIL)仿真以及仿真环境的开发。所有的开发在Matlab及Simulink中实现。可悲的是,我虽然对自己的Matlab技能信心满满,但对Simulink一无所知。我不仅要学习Simulink,还要承担起team leader的角色带领几个顾问一起开发。仿真场景的生成,仿真场景的格式,新一代仿真器开发的技术路线,以及开发团队的管理模式,所有这些都是我从2013年到2016年末要思考和学习的事情。在这不到3年的时间里,我不仅熟悉了Simulink,还学习了Matlab/Simulink的Code Generation,间接参与了现在OpenScenario仿真场景格式的制定,规划了沃尔沃MIL仿真器未来几年的发展方向,开始了测试自动化的部署,而且在业内比较早地开始了传感器统计模型(sensor statistical model)建立的尝试。也是在这期间,我开始接触到了敏捷开发,我的团队成为沃尔沃内部最早应用Scrum的团队之一。据我所知,这在整个汽车行业应该也算是比较早的。

2017年初,我离开沃尔沃加入Zenuity(其实还是一家子),开始ADAS软件在环(SIL)仿真器和仿真工具链的开发工作。编程语言从Matlab转到C/C++,并辅以Python。在大型集群上处理大量数据变成了家常便饭,slurm,elastic search,等等各种buzz word不停的从各位同事的嘴里冒出来。离开了Matlab,突然发现那些ADAS的开发人员甚至不用IDE,编译和连接操作都是直接写CMAKE。这让我一个汽车专业毕业的野生程序员非常不适应,各个工具又不得不从头学一遍。仿真软件要整合各个部门开发的各种不同模块,一旦发生错误,我们又是debug的第一步。这其中能学到的知识真是不胜枚举啊。比如我需要了解CAN总线和Flexray总线的详细工作原理和仿真器中的实现,才能向自动刹车功能的开发工程师解释我们仿真的精度。如此一番,不仅增长了知识的深度和广度,我也为再一次的职业发展做好了准备。

2019年7月,我再次回到沃尔沃汽车,成为自动驾驶功能的设计和测试工程师。算是对我之前所有知识的总结和融会贯通。同时给我机会将在过去9年的工作中沉淀出的对自动驾驶测试的理解转化成公司的自动驾驶功能测试战略。


流水账一般地写了自己9年的职业发展,罗列了很多学到的和用到的知识点。实际上,我身边的每一个同事的成长轨迹都不完全相同,大家的skill set也不完全相同。自动驾驶领域无法向网络应用程序开发一样培养出全栈工程师,每个人只能了解其中的一点或几点。

回顾我的大学本科生活,我个人认为影响最大的是我连续2年参加全国大学生数学建模竞赛。正是这两年培养了我Matlab编程的基础,写研究报告的基础,自学的能力,自己梳理知识体系的能力。其他的具体知识点都是在具体学习和工作的过程中逐渐加入到我的skill set里的。

如果能在大学4年中培养出不错的编程能力(Matlab足够)和强大的自学能力,一个汽车工程专业的学生里自动驾驶工程师只差一个机会。

你可能感兴趣的:(vivo图像算法工程师双非研究生可以吗_我的自动驾驶工程师成长之路)