当前位置: 华文星空 > 汽车

入行自动驾驶需要哪些知识储备,学习自动驾驶需从哪方面入门?

2018-10-09汽车

1. 前言

由于前段时间在写毕业论文,陷入了打字疲倦期,加上过年摆烂,偷了一大波懒,一直没更新知乎。这段时间也有不少小伙伴私信或加我微信来催更。其中被问到最多的问题是,不知道怎么去入门自动驾驶(我也发现有不少童鞋想自学入局自动驾驶,这确实是一个比较有钱途的工作,新能源+智能汽车也是国家大力推荐的,缺点是有点卷,优点是钱多),于是乎就想简单写篇文章来介绍一下我自己的入门方法,大家也可以在评论区进行讨论和补充哈。
自动驾驶的知识需求还是比较广泛的,我个人比较喜欢将其分为基础知识、编程能力、算法能力三个部分,其中基础知识包括对自动驾驶的认知、深度学习、模型的搭建与部署、研究领域的知识、git的使用、计算机基础知识(计算机组成、多线程、操作系统)等;编程能力包括python、C++、pytorch、linux、LeetCode、ros、最好能掌握cuda、cmake等知识;算法能力即为你研究领域的一些重要论文,其如何创新,如何提高性能,需要多读精度论文,才能很好掌握。

2. 引言

在秋招面试的时候,有一位面试官看我了解的内容比较广泛,并且本身是车辆/机械出生,问我研究生是怎么转专业自学到自动驾驶的,问我推荐的学习路径是什么样的(说来好笑,车辆工程入局自动驾驶被认为是转专业,虽然我觉得他说的没错,研究生确实是从零开始自学的)。
我当时回复大致是这样的,当时的回复也获得了面试官的认可,下面序号代表先后顺序,可以给大家参考一下。先看B站入门,再读知乎等总结文章了解论文大意,然后粗读或精读论文(最好是开源论文,可以对照代码进行学习),开源代码和框架很重要(公司的框架与开源都大同小异),然后可以时刻关注一些分享会或者数据集竞赛的top论文。

  1. 跟B站大佬入门深度学习,李沐、吴恩达
  2. 看对口方向的经典知乎文章(如CNN系列、点云系列、BEV系列、transformer系列)
  3. 精读经典论文
  4. 看开源代码+开源框架(如openpcdet、openmmlab)
  5. 看aiday(如Tesla,引领时代的技术潮流)
  6. 看CVPR的分享会
  7. 看竞赛的top文章+代码(nuscenes、waymo榜单)

下面具体写一下如何入门自动驾驶,自动驾驶需要掌握哪些知识,并给一些我个人比较喜欢的学习资料。

3. 基础知识

3.1 自动驾驶基础


自动驾驶一般分为感知、决策规划、控制、包括仿真、数据几大块。在很多公众号或者知乎上都有相应的介绍。由于博主主要做感知和数据这个方面的,主要对这个方面进行知识介绍。大家可以根据自己研究方向去查找相应的资料。


3.2 机器学习与深度学习


自动驾驶离不开AI,AI离不开深度学习。深度学习算机器学习的一个子类,需要对机器学习有所了解,但是面试一般不会问。机器学习推荐看吴恩达大佬的B站课程 [中英字幕]吴恩达机器学习系列课程_哔哩哔哩_bilibili
深度学习需要重点掌握,是AI的基础。也可以看吴恩达的B站视频 【中英字幕】吴恩达深度学习课程第一课 — 神经网络与深度学习_哔哩哔哩_bilibili。博主最喜欢的深度学习资料是李沐大佬的动手学深度学习 00 预告【动手学深度学习v2】_哔哩哔哩_bilibili,建议反复观看,巩固记忆。视频里面可以找到课件和学习资料。


3.3 计算机基础


了解即可,不需要重点掌握。本人看过王道的计算机组成、操作系统、计算机网络等B站视频,如果是计算机专业,应该都非常了解了。王道计算机考研 计算机组成原理_哔哩哔哩_bilibili、王道计算机考研 操作系统_哔哩哔哩_bilibili


3.4 图像感知算法


感知算法,按需学习,我当初是看Bubbliiiing 和 李沐的B站UP主的视频入门的,非常推荐。Bubbliiiing的个人空间-Bubbliiiing个人主页-哔哩哔哩视频


3.5 模型部署


一般来说,模型部署在公司会有单独一个团队来负责优化,但是建议还是了解一些模型部署的内容,面试的时候偶尔会问。但是博主还没有学得很好,大家有不错的资料可以分享一下


3.6 git的使用


工作中必备的技能,如何去团队合作,如何管理代码。可以看看【狂神说Java】Git最新教程通俗易懂_哔哩哔哩_bilibili
当然,博主也写了一篇git的知乎,是自己实际使用的一些记录,可能改得稍微乱了一点。但是基本是自己使用中遇到的常用问题,基本能覆盖日常使用需求,大家也可以了解一下。精通Git:介绍及常用命令指南

4. 编程能力

对于程序员来说,编程能力自然是重中之重。面试基本都会出一道LeetCode编程题进行考察。编程的内容比较多,都建议大家掌握,包括python、C++、pytorch、linux、LeetCode、ros、cuda、cmake等。
编辑器推荐vscode,插件很多,网上资料多。


4.1 python


python是相对最简单的编程语言,但是也是日常快速开发中使用得最多的。因此需要首先掌握python的使用。python的资料很多很多,B站上就有一大堆,大家随意食用。黑马程序员Python教程_600集Python从入门到精通教程(懂中文就能学会)_哔哩哔哩_bilibili


4.2 C++


在面试中,优先使用C++,而不是python。(用python可能会被面试官吐槽)。C++也是必需技能,其应用更广泛,运行速度更快(面试也经常问到)。推荐黑马程序员的C++视频,比较基础易懂,内容也很全面,资料也很多,建议反复食用。黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难_哔哩哔哩_bilibili


4.3 pytorch


pytorch是深度学习必备,博主看的是 【莫烦Python】PyTorch 神经网络_哔哩哔哩_bilibili。这块内容建议搭配论文和开源代码或开源框架食用。在日常使用中能熟能生巧。


4.4 linux


linux是必备基础知识,基本操作必须会。B站资料很多,自行食用。


4.5 LeetCode


面试必备,工作中几乎无用。食之无味,弃之可惜。没事多刷刷LeetCode,hot100必须能自己独立做出来,面试大部分考里面的内容。
也可以搭配B站,或者其他总结资料一起看,资料很多。
一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解(马士兵)_哔哩哔哩_bilibili


4.6 ros


了解即可,用于通信,传递消息。实际工作大多离不开ROS。古月居的ROS教程是最经典的,推荐。
【古月居】古月·ROS入门21讲 | 一学就会的ROS机器人入门教程_哔哩哔哩_bilibili


4.7 cuda


了解为主,最好熟练掌握。实际工作中,写算子优化等需要用到,多并发能提高运行速度,充分使用GPU的能力。
CUDA编程基础入门系列(持续更新)_哔哩哔哩_bilibili
github项目包含代码、博客、课件pdf下载地址:https:// github.com/sangyc10/CUD A-code


4.8 cmake


C++的编译,搭配C++一起使用。推荐基于VSCode和CMake实现C/C++开发 | Linux篇,开篇-课程简介_哔哩哔哩_bilibili。

5. 算法能力

专业算法能力需要根据自己的领域自行寻找资料,多看论文,多记笔记。大力推荐readpaper,读论文神器。https:// readpaper.com
如果是深度学习领域,可以看看李沐大神的读论文系列,都是精品。跟李沐学AI的个人空间-跟李沐学AI个人主页-哔哩哔哩视频
如果是感知领域,可以看看博主之前写的一些内容,作为入门使用,最好能看论文。图像2D目标检测总结、点云3D目标检测总结、视觉transformer:VIT, swin transformer,DETR等、BEV系列一:BEV介绍和常用BEV算法简介

大家有什么疑惑或者推荐的资料,欢迎留言或私信讨论。PS: 为什么知乎写文章,标题上下必须额外空一行,不然会把正文和标题一起当做标题。不知道是不是我设置的问题,导致文章空位有点多。