Udacity 无人驾驶工程师 学习笔记 1
学什么
过去一周里学习了 Udacity 无人驾驶课程的 1-4 课,大约是课程的 1/5。在这四课组成的第一个项目里,主要教学了最基本的计算机视觉相关的知识。使用的例子是「车道识别」。从这个大前提上你基本就已经可以猜测到,这识别出来的东西,基本上是不可用的了(逃
但这个构建了接下来学习内容的基础:
- 如何使用 Python 构建无人车的 Demo?
- 如何使用 OpenCV 做最简单的图像预处理?
- 计算机视觉的基础数学知识回顾,例如:霍夫变换
作为最开始的几节课,这个设计是很好的,达成了两个目的:「复习」和「劝退」。作为无人车的进阶课程,这几个基础都是比较好的复习了基础知识。第二节的内容也是体验课的内容,同时快速跳跃地带过这些东西,也可以让完全听不懂的学生赶紧放弃。这不是什么坏事,总比学了两个月,然后一头雾水,这时候学生的浸没成本已经非常大了,学下去还是不学下去回成为很大的难题。
怎么学
就像所有计算机工程类学习的过程一样,这课很好做到了 理论 <=> 实践 的循环渐进。听几分钟课,给你一个小测试,一个单元后让你用学过的知识做一个综合的小项目:输入视频,输出标注车道的视频。
样例输入 样例输出简单来说就是构建一个 pipeline,使用简单的 CV 方法来进行处理。我的处理方法其实挺简单的:
- 用 OpenCV 的 VideoCapture 读入视频
- 通过辅助方法转换成 Python generator
- 对 generator 进行枚举
- 由于车道是白色和黄色的,先把黄色和白色像素剥离出来
- 进行高斯模糊,然后进行 canny 处理
- 通过遮罩过滤出关键区域(ROI)
- 通过霍夫变换找到直线
- 计算直线斜率,过滤掉斜率过小的线(横线)
- 和原始帧进行合成叠加
- 用 OpenCV 的 VideoWriter 编码并输出视频流
感受
从设计一个无人玩具车到设计一个商用的无人车中间有很多步骤。写出一个这样简单的 CV 程序容易,但写出一个便于扩展、便于测试、便于调参的程序就变得很难了。
一个非常让我印象深刻的地方在于,虽然在做课题前,Udacity 提供了一个样例的框架。那个样例项目写得... 可以说是非常糟糕,甚至连代码风格都不统一,一会注释 #
后面加空格,一会又不加。但课程并不排斥你对 pipeline 进行重构,也鼓励你对已有的设计模型进行改进。我整个 pipeline 的实现完全是另起炉灶,完全没有复用样例项目的任何代码,很顺利通过了 review。
另外就课程安排上来看,Udacity 这门无人驾驶课使用这种传统 CV 方法进行车道识别也只是一个样例,之后会学习到更复杂的端到端的进阶车道识别方法。整体来说,这门课的设计还是比较务实的,虽然我还不知道能不能达到课程宣传时给人的预期,但是就目前来看,至少没有填鸭式、背诵式的教学,还是比较重视理解原理和基础知识的,我想给参加课程的学生带来了务实的学习态度,这点是相当重要的。
听讲、做选择题习题、做项目然后批改审阅,这和传统的教育几乎流程上是一致的,只是 Udacity 把这门课搬到了网上。对于一些入门型的课程,或者是工具型的语言、框架教学,另一些有着交互式编程体验的课程可能更具有「互联网教育」的优势。但是相反,像是这种比较偏向主观实践、复杂应用型的课程,能够隔着屏幕就能上到这样高质量设计的课程,在其它的课程中,特别是线下学习中恐怕是难有机会的。这也算是我对大家如果想从 Udacity 上报考课程的一个私人建议了。
一点我比较不满意的地方是,课程中涉及到的一些数学公式,在视频中虽然做了一些可视化,但是并不是十分直观。如果自己没有手动推一下式子,光看视频可能理解起来难度有点大。而对数学的可视化应该来说是视频载体的优势所在,是普通教学中很难做到的。如果能加强一下这方面的设计,做到和 3Blue1Brown 那种感觉的对数学的可视化,可能对于理解的帮助会大很多。
另外,如果想比较顺畅地体验 Udacity 的课程,你可能不止需要准备梯子,还要准备个非常稳定的梯子。实际上,中国版的 Udacity 视频已经从 Youtube 搬了回来,像是在线编程的 Workspace 服务在国内不是很稳定。当然事实上,学个神经网络,查一下 Google Tensorflow 的文档,要写好代码谁能不需要梯子呢?
广告时间
如果你也想报名 Udacity 的课程可以从 这里 报名,购买任何课程(除小程序开发)使用 delton0416 作为优惠码可以获得 300 元的折扣。