Udacity

Udacity 无人驾驶工程师 学习笔记 1

2018-07-27  本文已影响1882人  程序员Delton

学什么

过去一周里学习了 Udacity 无人驾驶课程的 1-4 课,大约是课程的 1/5。在这四课组成的第一个项目里,主要教学了最基本的计算机视觉相关的知识。使用的例子是「车道识别」。从这个大前提上你基本就已经可以猜测到,这识别出来的东西,基本上是不可用的了(逃

但这个构建了接下来学习内容的基础:

作为最开始的几节课,这个设计是很好的,达成了两个目的:「复习」和「劝退」。作为无人车的进阶课程,这几个基础都是比较好的复习了基础知识。第二节的内容也是体验课的内容,同时快速跳跃地带过这些东西,也可以让完全听不懂的学生赶紧放弃。这不是什么坏事,总比学了两个月,然后一头雾水,这时候学生的浸没成本已经非常大了,学下去还是不学下去回成为很大的难题。

怎么学

就像所有计算机工程类学习的过程一样,这课很好做到了 理论 <=> 实践 的循环渐进。听几分钟课,给你一个小测试,一个单元后让你用学过的知识做一个综合的小项目:输入视频,输出标注车道的视频。

样例输入 样例输出

简单来说就是构建一个 pipeline,使用简单的 CV 方法来进行处理。我的处理方法其实挺简单的:

  1. 用 OpenCV 的 VideoCapture 读入视频
  2. 通过辅助方法转换成 Python generator
  3. 对 generator 进行枚举
    1. 由于车道是白色和黄色的,先把黄色和白色像素剥离出来
    2. 进行高斯模糊,然后进行 canny 处理
    3. 通过遮罩过滤出关键区域(ROI)
    4. 通过霍夫变换找到直线
    5. 计算直线斜率,过滤掉斜率过小的线(横线)
    6. 和原始帧进行合成叠加
    7. 用 OpenCV 的 VideoWriter 编码并输出视频流
剥离白色和黄色像素 Canny 过滤 ROI 通过霍夫变换找到直线 过滤斜率过低的线

感受

从设计一个无人玩具车到设计一个商用的无人车中间有很多步骤。写出一个这样简单的 CV 程序容易,但写出一个便于扩展、便于测试、便于调参的程序就变得很难了。

一个非常让我印象深刻的地方在于,虽然在做课题前,Udacity 提供了一个样例的框架。那个样例项目写得... 可以说是非常糟糕,甚至连代码风格都不统一,一会注释 # 后面加空格,一会又不加。但课程并不排斥你对 pipeline 进行重构,也鼓励你对已有的设计模型进行改进。我整个 pipeline 的实现完全是另起炉灶,完全没有复用样例项目的任何代码,很顺利通过了 review。

另外就课程安排上来看,Udacity 这门无人驾驶课使用这种传统 CV 方法进行车道识别也只是一个样例,之后会学习到更复杂的端到端的进阶车道识别方法。整体来说,这门课的设计还是比较务实的,虽然我还不知道能不能达到课程宣传时给人的预期,但是就目前来看,至少没有填鸭式、背诵式的教学,还是比较重视理解原理和基础知识的,我想给参加课程的学生带来了务实的学习态度,这点是相当重要的。

听讲、做选择题习题、做项目然后批改审阅,这和传统的教育几乎流程上是一致的,只是 Udacity 把这门课搬到了网上。对于一些入门型的课程,或者是工具型的语言、框架教学,另一些有着交互式编程体验的课程可能更具有「互联网教育」的优势。但是相反,像是这种比较偏向主观实践、复杂应用型的课程,能够隔着屏幕就能上到这样高质量设计的课程,在其它的课程中,特别是线下学习中恐怕是难有机会的。这也算是我对大家如果想从 Udacity 上报考课程的一个私人建议了。

一点我比较不满意的地方是,课程中涉及到的一些数学公式,在视频中虽然做了一些可视化,但是并不是十分直观。如果自己没有手动推一下式子,光看视频可能理解起来难度有点大。而对数学的可视化应该来说是视频载体的优势所在,是普通教学中很难做到的。如果能加强一下这方面的设计,做到和 3Blue1Brown 那种感觉的对数学的可视化,可能对于理解的帮助会大很多。

另外,如果想比较顺畅地体验 Udacity 的课程,你可能不止需要准备梯子,还要准备个非常稳定的梯子。实际上,中国版的 Udacity 视频已经从 Youtube 搬了回来,像是在线编程的 Workspace 服务在国内不是很稳定。当然事实上,学个神经网络,查一下 Google Tensorflow 的文档,要写好代码谁能不需要梯子呢?

广告时间

如果你也想报名 Udacity 的课程可以从 这里 报名,购买任何课程(除小程序开发)使用 delton0416 作为优惠码可以获得 300 元的折扣。

上一篇下一篇

猜你喜欢

热点阅读