欢迎光临散文网 会员登陆 & 注册

学习三维点云,应该学什么

2020-07-02 17:13 作者:深蓝学院  | 我要投稿


本篇文章整理自三维点云课程开课仪式上黎嘉信博士的寄语,该寄语关于学习新知识的态度,相信会对大家有很大启发和收获。

各位同学晚上好,欢迎来到三维点云这门课。这门课一共有九次课,涉及的内容会比较多,包括一些经典的数据结构、传统机器学习理论以及深度学习等等。

大部分算法实现起来其实并不复杂,但背后的原理也不简单,或者说不同的实现方法会有不同的效率。我们在讲解的时候会偏重于算法背后的逻辑和原理,而作业全部是需要代码实践算法的具体应用。

下面跟大家分享3点心得:第1点是学习能力和工程能力;第2点是想象能力;第3点是对深度学习和传统方法的理解。

1 学习能力和工程能力

学习能力。在学习能力这一点上,我觉得最基础的就是要习惯去看文档和源码,比如这门课需要用到Open3D等一些可视化的库,或者一些基础的矩阵运算库。

第一期课的时候就有同学问用Open3D做可视化怎么划线、怎么划点?说实话,我对这个问题是比较震惊的,因为我觉得Open3D的文档做得相当好,里面有且不止有一个例子。

当然,通常情况下在群里问这类问题也是会回答的,你就会觉得“这样挺好的呀,因为不用自己看文档并且能很快解决,难道不好吗”。

其实,我觉得这是不对的,看文档是一种最基础的能力,而且是需要锻炼的。看文档的时候同时也可以锻炼一下自己看源码的能力,比如说PCL的代码文档其实做得不怎么好,经常需要自己去看源码。所以,总结起来就是纸上得来终觉浅,绝知此事要躬行。

工程能力。我觉得很重要的一点就是要变通。

举个例子,在第一期课程时,要做激光雷达在自动驾驶场景下的地面检测实战项目,地面是水平的。然后有同学就问“用RANSAC这个方法提取地面,但RANSAC提取出来的有可能是垂直的平面(比如建筑的墙体),那此时该怎么办”,这个问题就好像说你拿着一个棍子,进电梯横着拿的时候被门卡住了进不去,然后问怎么办?那能怎么办?你把棍子竖过来不就进去了吗?

同样的,对RANSAC也有太多的办法去做变通,比如说出现垂直面的时候,你就放弃这组参数重新采样,重新求解不就完事了吗?再比如把检测出来的垂直面里面的点删掉,再跑一次RANSAC,那通常你会得到水平面,而不是垂直面。

当然做变通的前提是你要理解这个算法在做什么事情,如果你不知道的话,当然就没有办法做什么变通了。但如果只是跟着课件上的步骤去写代码,那就不叫理解了。我们要能够在脑袋中想象出来这个算法的关键动作,这才叫理解。

正因为如此,我们本门课程的实践作业,核心算法都不允许大家直接调用PCL的函数,而是自己写代码实现。

2 想象力

很多问题和算法的公式很复杂,很难做到说分分钟就写下来,但是我们可以将这些理论和公式通过想象来转化成直觉。

比如说第一节课的PCA和KPCA,来来去去就是找一个方向,投影数据原始空间不行,那就找另外一个空间。那以后我们遇到SVM,就会发现这些直觉是通用的,那么这就是举一反三。

此外,点云算法里面有很多操作是在三维空间甚至高维空间,这种高维空间的想象能力也需要我们去慢慢培养。比如说八叉树在递归算法的时候看着很复杂,但其实它的核心思想就是:一个球体跟一个正方体的空间关系,有没有相交,有没有一个包围另外一个。如果能在脑海里面去想象出八叉树的构建过程,以及最邻近搜索是怎么去遍历这个空间中的结构,那么这个问题就可以转化成一个几何问题,而且是在脑海里面可以构建、可以想象的问题,那么八叉树就会变得非常简单。

3 深度学习与传统方法

关于深度学习和传统方法。这门课70%是关于传统方法,为什么呢?

第一个原因是点云和图像不太一样,点云是三维的,所以很多几何和优化的解法可以用起来;第二个原因是我们对深度学习的看法,应该要足够的冷静。

巴菲特一句经典语录“别人恐惧的时候我贪婪,别人贪婪的时候我恐惧”,那这对于深度学习来说也是合适的。当每个人上来都说深度学习,当高中生都会用Pytorch, Tensorflow甚至发CVPR的时候,我们就应该反思一下我们要怎么对待深度学习。

前几年,学术界的一个趋势是能不能把算法做成端到端,现在变成了为什么要做到端到端。我觉得这是个好事,对于一些已经知道怎么去建模怎么去求解的问题,如果非要用深度学习来解决,那效果不一定比传统方法好。

比如:点云配准。最近有一些论文是用深度学习做ICP,从学术的角度上看这是非常有意义的,但从工程的角度看,几乎没有落地的应用,因为传统方法安全可靠,可以解释,而且效果还好,成本还低。

所以通过这门课,我希望大家能够对点云相关的算法有一个整体的概念,能够在科研或工作过程中多思考一下“为什么要用深度学习,哪些地方要用深度学习,什么地方更适合用传统方法”,这种冷静的思考才能将深度学习用在刀刃上,发挥最大的作用。

还有另外一个原因,就是我觉得深度学习比传统方法要简单很多,只要你能理解反向传播,那么很多深度学习都是大同小异,所以学起来会更简单一点。

4 Trick

还有最后一个问题要跟大家分享一下,我的看法就是关于所谓的工程Trick,就是一些奇技淫巧。三维点云这门课的重点是每一个算法的原理,而不是工程实现的Trick,尽管我会尽量讲解一些我知道的工程Trick,但是大家要知道工程领域千差万别。

即使同一个问题在不同的场景下的Trick也是不一样的,我自己是做自动驾驶、无人机的,所以我知道一些具体场景下具体的Trick,但是我不知道机械臂做物体抓取的Trick呀,那是不是就意味着我去面试一家做机械臂的企业时,我就会被摁在地上摩擦?我相信不会,所以工程能力和学术能力不是你知道多少Trick,更多的是你对各种算法的理解有多深入,变通的能力有多强。

工程Trick是无穷无尽,而算法的理论是有限的,所以千万不要去追求所谓的Trick,而忽略了理论,所以遇到这门课第三、四节课满屏的公式,大家不要跳过公式看结论,而是要将公式好好地消化成直觉。总的来说,这是授之以鱼还是授之以渔的问题,Trick是可以吃的那个鱼,但理论知识和变通能力是有三点水的那个渔。

文章由该期课程学员陈方圆 和 hqc2020整理

学习三维点云,应该学什么的评论 (共 条)

分享到微博请遵守国家法律