PCL(Point cloud library)
Ubuntu Linux 16
系统之所以会用Linux,很大的原因是应为SLAM在嵌入式平台上面的安置,所以尽量编写在inux下编写,同步arm编程环境的读者有兴趣可以去参考下搭建交叉编译环境 。
#OpenCV的安装
参考本菜的博客中,C++安装opencv的部分
Eigen C++线性代数计算库的安装
在slam的运行当中,会大量的使用到线性代数,为了省去手动写遍历去遍历代码,需要借助eigen去对opencv进行计算
关于Eigen的安装配置,请移步参考博客
机器学习/深度学习框架的安装
主流框架
- Caffe
- Microsoft Cognitive Toolkit(又名CNTK 2)
- MXNet
- Scikit-learn
- Spark MLlib
- TensorFlow
- Theano
- Keras(一个Theano和TensorFlow深度学习的前端)
- DeepLearning4j(Java和Scala在Hadoop和Spark之上的深度学习软件)
辅助运算框架
- Eigen(C++)
- Numpy(python)
- Matplotlib(python)
- Scipy(python)
- CUDA
- OpenCL
- Boost
除此之外笔者还用过一些比较少见的辅助框架,主要使用在语音识别当中
- HTK
- Sphinx
注:下载HTK时需要注册一个账号,邮箱请使用国外邮箱,如OutLook,Gmail等邮箱才能接收到来自HTK官方网站欧洲的来信。
加州大学库有一个的各类型的开源辅助计算框架
CUDA,Boost,GPU并发运算库的安装在windows下请直接去PCL官方下载库,A卡架构的盆友可以使用OpenCL并行计算库
在图像的处理中,可以不直接依赖于OpenCV,我们所要做的,只是获取图像进行处理,所以我们只需要从摄像头获取点云数据和实时图像,将它拿给Caffe等进行计算就ok了,Caffe框架提供了一个完善的Machine Learning运算库,在模式识别,机器学习,深度学习,迁移学习上都有相当高的造诣。 接下来一讲,我们来分析和区分一下上述几种学习的区别,和应用领域(昨晚和学长交流时问到几种学习的区别和应用领域)
迁移学习(适应) 强化学习(反馈) 深度学习 (特征)
迁移学习(领域适应Domain Adaptation)
将从源领域(Source Domain)学习到的东西应用到目标领域(Target Domain)上去。源领域和目标领域之间往往有gap/domain discrepancy(源领域的数据和目标领域的数据遵循不同的分布)。 迁移学习能够将适用于大数据的模型迁移到小数据上,实现个性化迁移。 迁移什么,怎么迁移,什么时候能迁移,这是迁移学习要解决的主要问题。
- 样本迁移 Instance-based Transfer Learning
- 特征迁移 Feature-based Transfer Learning
- 模型迁移 Model-based Transfer Learning
- 关系迁移 Relational Transfer Learning
下面是四种学习方法所需要的数据量对比
强化学习(Reinforcement Learning)
就是智能系统从环境到行为映射的学习,以使奖励信号(强化信号)函数值最大。 强化学习不同于连接主义学习中的监督学习,主要表现在教师信号上,强化学习中由环境提供的强化信号是对产生动作的好坏作一种评价(通常为标量信号),而不是告诉强化学习系统RLS(reinforcement learning system)如何去产生正确的动作。由于外部环境提供的信息很少,RLS必须靠自身的经历进行学习。 通过这种方式,RLS在行动-评价的环境中获得知识,改进行动方案以适应环境。 ##永动机器学习
CMU大学的例子,用中文来说是永动机器学习,这个机器不断在网上扒一些网页,在每个网页里面都学到一些知识,把这些知识综合起来,变成几千万条知识,这些知识又会衍生新的知识。那么我们看到从下到上是随着时间,知识量在增长。但是它到了某一个程度实际上是不能再往上走了,因为知识会自我矛盾。这个时候就需要人来进行一部分的调节,把一部分不正确的知识去掉,去除自我偏差(有偏数据),这种偏差可以体现在统计学的一个重要概念中,就是我们获得的数据也许是一个有偏数据,我们可能建了一个模型,对大部分的数据都有用,但其中有一些特例。我们如何来处理这些特例,如何来处理我们训练数据和应用数据之间的偏差,这是我们下一步要研究的内容。
深度学习
End