车道线检测、跟踪的项目,主要是通过设置ROI(感兴趣区域)、调试算法阈值,通过人为设定规则的方式实现车道线检测。随着人工智能技术的发展,近几年在图像处理领域越来越多地采用深度学习的方式进行图像中物体的识别。使用深度学习的方法识别图像,不仅性能更为鲁棒,而且相比于设定规则的方式,识别率更高。
正文
先通过一张简单的图,认识工智能、机器学习和深度学习的关系。由图可以看出深度学习是机器学习的一个分支,机器学习又是人工智能的一个分支。
人工智能最早可以追溯到上个世纪五十年代,受制于当时的计算能力,人工智能技术并没有得到很好地发展;直到上世纪八十年代,计算机算力的大幅提高,人工智能才得以蓬勃发展,继而衍生出了机器学习技术,机器学习的出现,帮助人类解决了很多诸如垃圾邮件分类、房价估计等简单问题,也辅助解决图像识别等复杂问题,但准确度未能达到预期。直到深度学习(通过的神经网络进行机器学习)技术的出现以及并行计算技术的加持,使得图像识别等复杂问题的准确度得到了大幅提升,一举超越了人类识别的水平。越来越多的科学工作者、工程人员和资本投入到了深度学习领域。
人工智能主要是为了解决预测(回归)和分类两大问题。在生活中,预测的例子有很多,比如根据房屋面积等信息预测房屋的价格,或是根据前几年的销售额,预测今年的销售额等。分类的问题也有很多,比如判定股票的涨跌,图像中的物体(比如手写数字、字母)的识别等。
认识神经网络
提到神经网络时,我们总会看到如下由圆圈和线组成的网络,下面说一下这样绘制的原因。
人类的神经元通过多个树突接收数据,经过处理后,将信号通过轴突发出,与上述结构十分相似,因此我们搭建的网络图也被称为神经网络。
图片出处:优达学城(Udacity)无人驾驶工程师学位
通过一个房价计算的例子,解释一下这里的圆圈和线段。
在一个地区,决定一个房子最直接因素就是房子的面积,面积越大,房子的价格就越高。
即房屋价格 = 房屋面积*每平方米房价。我们用两个圆圈和一条线段可将这个关系表示为:
这是房屋价格最简单的计算方法。
但是房屋价格还受到其他因素的影响,比如是是否装修、家具等。
引入装修和家具的支出,得房屋价格 = 房屋面积*每平方米房价 + 装修面积 * 每平方米装修 + 家具支出 * 1。最终的房屋价格组成的图应该如下所示:
这就组成了一个预测房屋价格的基本网络。在这个网络中房屋面积、装修面积、家具支出是这个网络的输入,房价/平米、装修/平米为这个网络的参数,线段代表的是这个参数的乘法运算,房屋价格为这个网络的输出。
我们将上面的网络图做一个抽象表达,使其能够应用于除房价预测外的更多场景。如下所示:
对于这个简单的网络而言,x1、x2、b被称作这个网络的输入,位于这一层的数据被称为输入层(Input Layer);w1、w2被称作这个网络的参数;线段为参数的运算规则,这里既可以是四则运算,也可是复杂的函数运算;output为这个网络的输出,位于这一层数据被称为输出层(Output Layer)。
房价预测问题相对直观、简单,不需要太过复杂的网络即可实现。可一旦面对复杂的问题(如图像识别)时,无法通过简单的线性网络描述清楚,需要引入更多的参数和更为复杂的计算(比如sigmoid、relu等函数)。就出现了这种需要包含隐藏层(hidden layers)的网络。当网络越大时,整个网络所包含的参数就越多,网络也越复杂。网络越复杂,神经网络中的参数越难解释其作用,这就是深度神经网络被称为“黑盒”的原因。
神经网络的参数
房价计算的神经网络搭建好后,我们就可以通过向网络中输入房屋面积、装修面积、家具支出等信息,得到房屋的价格了。当网络的参数(房价/平米、装修/平米)越准确时,使用该模型预测得到的输出(房屋价格)也将越准确。因此合理的参数设置,决定着一个神经网络的好坏。
在深度学习技术普及前,神经网络的参数,是根据开发者的经验设置的。再通过真实的数据,带入验证,不断微调,使网络预测出的值尽可能接近真实值,进而得到越来越准确的参数。这种人为设置参数的行为在浅层的神经网络中尚可行得通,一旦网络参数达到千甚至上万级别时,这种方法变得不再可行。
为解决深层神经网络的参数调试方法,深度学习领域的专家提出了反向传播(Back propagation)理论。
数据由输入层传入,再经过隐藏层的一系列计算得到结果,并由输出层传出的这个过程被称为前向传播(Forward propagation)。反向传播的思路与前面提到的人为设置参数的方法类似,也是通过对比网络预测值与真实值之间的差异,进而微调网络。
不过反向传播的做法与人为设置参数有所不同,它需要计算预测值和真实的损失函数L,损失函数可以理解为预测值和真实值之间的差值,差值越大,损失函数越大。
完成预测值与真值的损失函数计算后,通过求取前向传播参数的偏导的方法,将损失函数对参数的偏导传递到前一层网络,利用这个偏导与一个系数(学习率)的乘积更新网络中的参数。随后继续传播到更上一层的网络,直到网络中所有的参数都被更新。
每有一组数据,就可以利用反向传播的方法进行一次参数的更新,这就是深度学习网络会随着训练数据量的增大,变得越来越准确的原因。
反向传播的理论在优达学城(Udacity)无人驾驶工程师学位的深度学习基础课程中做了详细的介绍,也可以参考CSDN的文章《一文弄懂神经网络中的反向传播法》,该文使用了一个简单的网络一步步阐述了反向传播的过程,浅显易懂。