时间为友,记录点滴。
本来还想在特征点检测的道路上再走一走,学习一下Harr级联或者HOG什么的,但总有些概念感觉绕不过去。择日不如撞日,撞日不如今日。我们先揭开机器学习中的一个小角,看看大热的机器学习到底是什么东西。
啥是机器学习?
如今机器学习在中国的大热,还是要感谢2016年Alpha Go和李世石的那场人机围棋对决。外行人人谈AI,内行深度神经网络大红大紫。人工智能,机器学习,深度学习的关系
从关系上看,机器学习仅仅是实现人工智能的其中一种方式。所谓机器学习,我更愿意把机器拟人化,跟人类学习一样,可以从经验(数据)中去成长(学习),然后可以解决实际的问题。这个过程就是学习。人的过程就是人的学习,计算机的过程就是机器学习。
我们可以用这么定义:
机器学习=数据+算法+硬件
机器学习的分类
硬件:
我们结合上面的公式,先来看看硬件:CPU GPU 专用芯片最开始的机器学习当然是写成程序运行在CPU通用处理器上了;
但是随着深度学习的发展,人们发现GPU的架构更适合做深度神经网络这种大量的简单运算(要么NVIDIA的股票biubiu地飞);
后来,人们发现可以为某个算法单独设计一款ASIC,这样的运算能效比比GPU更高(要么Bitcoin能挖这么快);
数据和算法:
为什么把数据和算法放一块呢?因为他们总是相辅相成,特定的数据就需要有更优的算法来匹配。
在机器学习的算法世界里,如OpenCV的传统算法一样,浩如烟海,如果真的有人想要搞懂大部分的算法,一定是惊为天人了。听说下面这个哥们用numpy手写了好多。ddbourgin/numpy-mlgithub.com
OpenCV中的机器学习
OpenCV的ml模块实现了很多算法,包括朴素贝叶斯、K近邻、SVM、决策树、Boosting、GBT、随机森林、神经网络等。其大多继承自同一基类,训练和预测的接口都是train(),predict(),使用较为方便。
我们进入到代码里面瞅一瞅:
在源码的\opencv-4.1.1\opencv-4.1.1\modules\ml\include\opencv2\ml.hpp文件中有提到: