前言:一篇好文章的诞生,需要你不断地搜集资料、整理思路,本站小编为你收集了丰富的卷积神经网络的深度主题范文,仅供参考,欢迎阅读并收藏。
(江苏科技大学电子信息学院,江苏镇江212003)
摘要:在实际交通环境中,由于运动模糊、背景干扰、天气条件以及拍摄视角等因素,所采集的交通标志的图像质量往往不高,这就对交通标志自动识别的准确性、鲁棒性和实时性提出了很高的要求。针对这一情况,提出一种基于深层卷积神经网络的交通标志识别方法。该方法采用深层卷积神经网络的有监督学习模型,直接将采集的交通标志图像经二值化后作为输入,通过卷积和池采样的多层处理,来模拟人脑感知视觉信号的层次结构,自动地提取交通标志图像的特征,最后再利用一个全连接的网络实现交通标志的识别。实验结果表明,该方法利用卷积神经网络的深度学习能力,自动地提取交通标志的特征,避免了传统的人工特征提取,有效地提高了交通标志识别的效率,具有良好的泛化能力和适应范围。
关键词 :交通标志;识别;卷积神经网络;深度学习
中图分类号:TN911.73?34;TP391.41 文献标识码:A 文章编号:1004?373X(2015)13?0101?06
收稿日期:2015?01?09
基金项目:国家自然科学基金面上项目(61371114)
0 引言
随着智能汽车的发展,道路交通标志的自动识别[1?3]作为智能汽车的基本技术之一,受到人们的高度关注。道路交通标志识别主要包括两个基本环节:首先是交通标志的检测,包括交通标志的定位、提取及必要的预处理;其次是交通标志的识别,包括交通标志的特征提取和分类。
如今,交通标志的识别方法大多数都采用人工智能技术,主要有下述两类形式[4]。一种是采用“人工特征+机器学习”的识别方法,如基于浅层神经网络、支持向量机的特征识别等。在这种方法中,主要依靠先验知识,人工设计特征,机器学习模型仅负责特征的分类或识别,因此特征设计的好坏直接影响到整个系统性能的性能,而要发现一个好的特征,则依赖于研究人员对待解决的问题的深入理解。另一种形式是近几年发展起来的深度学习模型[5],如基于限制波尔兹曼机和基于自编码器的深度学习模型以及卷积神经网络等。在这种方法中,无需构造任何的人工特征,而是直接将图像的像素作为输入,通过构建含有多个隐层的机器学习模型,模拟人脑认知的多层结构,逐层地进行信息特征抽取,最终形成更具推广性和表达力的特征,从而提升识别的准确性。
卷积神经网络作为深度学习模型之一,是一种多层的监督学习神经网络,它利用一系列的卷积层、池化层以及一个全连接输出层构建一个多层的网络,来模仿人脑感知视觉信号的逐层处理机制,以实现视觉特征信号的自动提取与识别。本文将深层卷积神经网络应用于道路交通标志的识别,通过构建一个由二维卷积和池化处理交替组成的6层网络来逐层地提取交通标志图像的特征,所形成的特征矢量由一个全连接输出层来实现特征的分类和识别。实验中将加入高斯噪声、经过位移、缩放和旋转处理的交通标志图像以及实际道路采集交通标志图像分别构成训练集和测试集,实验结果表明,本文所采用的方法具有良好的识别率和鲁棒性。
1 卷积神经网络的基本结构及原理
1.1 深度学习
神经科学研究表明,哺乳动物大脑皮层对信号的处理没有一个显示的过程[5],而是通过信号在大脑皮层复杂的层次结构中的递进传播,逐层地对信号进行提取和表述,最终达到感知世界的目的。这些研究成果促进了深度学习这一新兴研究领域的迅速发展。
深度学习[4,6?7]的目的就是试图模仿人脑感知视觉信号的机制,通过构建含有多个隐层的多层网络来逐层地对信号特征进行新的提取和空间变换,以自动学习到更加有效的特征表述,最终实现视觉功能。目前深度学习已成功地应用到语音识别、图像识别和语言处理等领域。在不同学习框架下构建的深度学习结构是不同的,如卷积神经网络就是一种深度的监督学习下的机器学习模型。
1.2 卷积神经网络的基本结构及原理
卷积神经网络受视觉系统的结构启发而产生,第一个卷积神经网络计算模型是在Fukushima 的神经认知机中提出的[8],基于神经元之间的局部连接和分层组织图像转换,将有相同参数的神经元应用于前一层神经网络的不同位置,得到一种平移不变神经网络结构形式。后来,LeCun 等人在该思想的基础上,用误差梯度设计并训练卷积神经网络[9?10],在一些模式识别任务上得到优越的性能。
卷积神经网络本质上是一种有监督的深度学习算法,无需事先知道输入与输出之间精确的数学表达式,只要用已知的模式对卷积神经网络加以训练,就可以学习到输入与输出之间的一种多层的非线性关系,这是非深度学习算法不能做到的。卷积神经网络的基本结构是由一系列的卷积和池化层以及一个全连接的输出层组成,可以采用梯度下降法极小化误差函数对网络中的权值和阈值参数逐层反向调节,以得到网络权值和阈值的最优解,并可以通过增加迭代次数来提高网络训练的精度。
1.2.1 前向传播
在卷积神经网络的前向传播中,输入的原始图像经过逐层的卷积和池化处理后,提取出若干特征子图并转换成一维特征矢量,最后由全连接的输出层进行分类识别。
在卷积层中,每个卷积层都可以表示为对前一层输入图像的二维卷积和非线性激励函数,其表达式可用式(1)表示:
式中:Yj 表示输出层中第j 个输出;Y l + 1i 是前一层(l + 1层)
的输出特征(全连接的特征向量);n 是输出特征向量的长度;Wij 表示输出层的权值,连接输入i 和输出j ;bj表示输出层第j 个输出的阈值;f (?) 是输出层的非线性
1.2.2 反向传播
在反向传播过程中,卷积神经网络的训练方法采用类似于BP神经网络的梯度最速下降法,即按极小化误差的方法反向传播调整权值和阈值。网络反向传播回来的误差是每个神经元的基的灵敏度[12],也就是误差对基的变化率,即导数。下面将分别求出输出层、池采样层和卷积层的神经元的灵敏度。
(1)输出层的灵敏度
对于误差函数式(6)来说,输出层神经元的灵敏度可表示为:
在前向传播过程中,得到网络的实际输出,进而求出实际输出与目标输出之间的误差;在反向传播过程中,利用误差反向传播,采用式(17)~式(20)来调整网络的权值和阈值,极小化误差;这样,前向传播和反向传播两个过程反复交替,直到达到收敛的要求为止。
2 深层卷积神经网络的交通标志识别方法
2.1 应用原理
交通标志是一种人为设计的具有特殊颜色(如红、黄、白、蓝、黑等)和特殊形状或图形的公共标志。我国的交通标志主要有警告、禁令、指示和指路等类型,一般采用颜色来区分不同的类型,用形状或图形来标示具体的信息。从交通标志设计的角度来看,属于不同类型(不同颜色)的交通标志在形状或图形上有较大的差异;属于相同类型(相同颜色)的标志中同类的指示信息标志在形状或图形上比较接近,如警告标志中的平面交叉路口标志等。因此,从机器视觉的角度来分析,同类型中同类指示信息的标志之间会比不同类型的标志之间更易引起识别错误。换句话说,相比于颜色,形状或图形是正确识别交通标志的关键因素。
因此,在应用卷积神经网络识别交通标志时,从提高算法效率和降低错误率综合考虑,将交通标志转换为灰度图像并作二值化处理后作为卷积神经网络的输入图像信息。图2给出了应用卷积神经网络识别交通标志的原理图。该网络采用了6层交替的卷积层和池采样层来逐层提取交通标志的特征,形成的特征矢量由一个全连接的输出层进行识别。图中:W1i(i=1,2,…,m1),W1(j j=1,2,…,m2),…,W1k(k=1,2,…,m(n?1))分别表示卷积层L1,L3,…,Ln - 1 的卷积核;Input表示输入的交通标志图像;
Pool表示每个池采样层的采样池;map表示逐层提取的特征子图;Y 是最终的全连接输出。
交通标志识别的判别准则为:对于输入交通标志图像Input,网络的输出矢量Y = [y1,y2 ,…,yC ],有yj = Max{y1,y2 ,…,yC},则Input ∈ j,即判定输入的交通标志图像Input为第j 类交通标志。
2.2 交通标志识别的基本步骤
深层神经网络识别交通标志主要包括交通标志的训练与识别,所以将交通标志识别归纳为以下4个步骤:(1) 图像预处理:利用公式Gray= 0.299R +0.587G + 0.114B 将彩色交通标志图像转换为灰度图像,再利用邻近插值法将交通标志图像规格化,最后利用最大类间方差将交通标志图像二值化。
(2)网络权值和阈值的初始化:利用随机分布函数将权值W 初始化为-1~1之间的随机数;而将阈值b 初始化为0。
(3)网络的训练:利用经过预处理的交通标志图像构成训练集,对卷积神经网络进行训练,通过网络前向传播和反向传播的反复交替处理,直到满足识别收敛条件或达到要求的训练次数为止。
(4)交通标志的识别:将实际采集的交通标志图像经过预处理后,送入训练好的卷积神经网络中进行交通标志特征的提取,然后通过一个全连接的网络进行特征分类与识别,得到识别结果。
3 实验结果与分析
实验主要选取了我国道路交通标志的警告标志、指示标志和禁令标志三类中较常见的50幅图像。考虑到在实际道路中采集到的交通标志图像会含有噪声和出现几何失真以及背景干扰等现象,因此在构造网络训练集时,除了理想的交通标志以外,还增加了加入高斯噪声、经过位移、旋转和缩放处理和实际采集到的交通标志图像,因此最终的训练样本为72个。其中,加入的高斯噪声为均值为0,方差分别为0.1,0.2,0.3,图像的位移、旋转、缩放的参数分别随机的分布在±10,±5°,0.9~1.1的范围内。图3给出了训练集中的交通标志图像的示例。图4是在实际道路中采集的交通标志图像构成的测试集的示例。
在实验中构造了一个输入为48×48个神经元、输出为50 个神经元的9 层网络。网络的输入是像素为48 × 48 的规格化的交通标志图像,输出对应于上述的50种交通标志的判别结果。网络的激活函数采用S型函数,如式(2)所示,其输出范围限制在0~1之间。
图6是交通标志的训练总误差EN 曲线。在训练开始的1 500次,误差能迅速地下降,在迭代2 000次以后是一个平稳的收敛过程,当迭代到10万次时,总误差EN可以达到0.188 2。
在交通标志的测试实验中,为了全面检验卷积神经网络的识别性能,分别针对理想的交通标志,加入高斯噪声、经过位移、旋转和比例缩放以及采集的交通标志图像进行实验,将以上测试样本分别送入到网络中识别,表2给出了测试实验结果。
综合分析上述实验结果,可以得到以下结论:(1)在卷积神经网络的训练学习过程中,整个网络的误差曲线快速平稳的下降,体现出卷积神经网络的训练学习具有良好的收敛性。
(2)经逐层卷积和池采样所提取的特征具有比例缩放和旋转不变性,因此对于旋转和比例缩放后的交通标志能达到100%的识别率。
(3)与传统的BP网络识别方法[11]相比较,卷积神经网络能够达到更深的学习深度,即在交通标志识别时能够得到更高的所属类别概率(更接近于1),识别效果更好。
(4)卷积神经网络对实际采集的交通标志图像的识别率尚不能达到令人满意的结果,主要原因是实际道路中采集的交通标志图像中存在着较严重的背景干扰,解决的办法是增加实际采集的交通标志训练样本数,通过网络的深度学习,提高网络的识别率和鲁棒性。
4 结论
本文将深层卷积神经网络应用于道路交通标志的识别,利用卷积神经网络的深层结构来模仿人脑感知视觉信号的机制,自动地提取交通标志图像的视觉特征并进行分类识别。实验表明,应用深层卷积神经网络识别交通标志取得了良好的识别效果。
在具体实现中,从我国交通标志的设计特点考虑,本文将经过预处理二值化的图像作为网络的输入,主要是利用了交通标志的形状信息,而基本略去了颜色信息,其优点是在保证识别率的基础上,可以简化网络的结构,降低网络的计算量。在实际道路交通标志识别中,将形状信息和颜色信息相结合,以进一步提高识别率和对道路环境的鲁棒性,是值得进一步研究的内容。
此外,本文的研究没有涉及到道路交通标志的动态检测,这也是今后可以进一步研究的内容。
参考文献
[1] 刘平华,李建民,胡晓林,等.动态场景下的交通标识检测与识别研究进展[J].中国图象图形学报,2013,18(5):493?503.
[2] SAHA S K,DULAL C M,BHUIYAN A A. Neural networkbased sign recognition [J]. International Journal of ComputerApplication,2012,50(10):35?41.
[3] STALLKAMP J,SCHLIOSING M,SALMENA J,et al. Man vs.computer:benchmarking machine learning algorithms for traf?fic sign recognition [J]. Neural Network,2012,32(2):323?332.
[4] 中国计算机学会.深度学习:推进人工智能梦想[EB/OL].[2013?06?10].http://ccg.org.cn.
[5] 郑胤,陈权崎,章毓晋.深度学习及其在目标和行为识别中的新进展[J].中国图象图形学报,2014,19(2):175?184.
[6] FUKUSHIMA K. Neocognition:a self ? organizing neural net?work model for a mechanism of pattern recognition unaffectedby shift in position [J]. Biological Cybernetics,1980,36(4):193?202.
[7] LECUN Y,BOTTOU L,BENGIO Y,et al. Gradient ? basedlearning applied to document recognition [J]. IEEE Journal andMagazines,1989,86(11):2278?2324.
[8] LECUN Y,BOTTOU L,BENGIO Y,et al. Backpropagationapplied to handwritten zip code recognition [J]. Neural Compu?tation,1989,1(4):541?551.
[9] CIRESAN D,MEIER U,MAsci J,et al. Multi?column deepneural network for traffic sign classification [J]. Neural Net?works,2012,32(2):333?338.
[10] NAGI J,DUCATELLE F,CARO D,et al. Max?pooling con?volution neural network for vision?based hand gesture recogni?tion [C]// 2011 IEEE International Conference on Signal andImage Processing Application. Kuala Lumpur:IEEE,2011,342?347.
[11] 杨斐,王坤明,马欣,等.应用BP神经网络分类器识别交通标志[J].计算机工程,2003,29(10):120?121.
[12] BUVRIE J. Notes on convolutional neural networks [EB/OL].[2006?11?12]. http://cogprints.org/5869/.
[13] 周开利,康耀红.神经网络模型及其Matlab 仿真设计[M].北京:清华大学出版社,2005.
[14] 孙志军,薛磊,许阳明,等.深度学习研究综述[J].计算机应用研究,2012,29(8):2806?2810.
[15] 刘建伟,刘媛,罗雄麟.深度学习研究进展[J].计算机应用研究,2014(7):1921?1930.
关键词:树叶识别;支持向量机;卷积神经网络
中图分类号 TP18 文献标识码:A 文章编号:1009-3044(2016)10-0194-03
Abstract: In this paper, the convolution neural network recognition in the leaves, and the process by convolution of image visualization. Experiments show that the neural network application identification convolution leaves a 92% recognition rate. In addition , this neural network and support vector machine comparative study can be drawn from the study , convolutional neural network in either speed or accuracy better than support vector machines, visible, convolution neural network in the leaves aspect has good application prospects.
Key words recognition leaves; SVM; convolutional neural network
1 概述
树叶识别与分类在对于区分树叶的种类,探索树叶的起源,对于人类自身发展、科普具有特别重要的意义。目前的树叶识别与分类主要由人完成,但,树叶种类成千上万种,面对如此庞大的树叶世界,任何一个植物学家都不可能知道所有,树叶的种类,这给进一步研究树叶带来了困难。为了解决这一问题,一些模式识别方法诸如支持向量机(Support Vector Machine,SVM)[1],K最近邻(k-NearestNeighbor, KNN)[2]等被引入,然而,随着大数据时代的到来,这些传统分类算法暴露出越来越多的不足,如训练时间过长、特征不易提取等不足。
上世纪60年代开始,学者们相继提出了各种人工神经网络[3]模型,其中卷积神经网络由于其对几何、形变、光照具有一定程度的不变形,因此被广泛应用于图像领域。其主要特点有:1)输入图像不需要预处理;2)特征提取和识别可以同时进行;3)权值共享,大大减少了需要训练的参数数目,是训练变得更快,适应性更强。
卷积神经网络在国内研究才刚刚起步。LeNet-5[4]就是一种卷积神经网络,最初用于手写数字识别,本文研究将卷积神经网络LeNet-5模型改进并应用于树叶识别中。本文首先介绍一下卷积神经网络和LeNet-5的结构,进而将其应用于树叶识别,设计了实验方案,用卷积神经网络与传统的模式识别算法支持向量机(SVM)进行比较,得出了相关结论,并对进一步研究工作进行了展望。
2人工神经网络
人工神经网络方面的研究很早就已开展,现在的人工神经网络已经发展成了多领域、多学科交叉的独立的研究领域。神经网络中最基本的单元是神经元模型。类比生物神经元,当它“兴奋”时,就会向相连的神经元发送化学物质,从而改变这些神经元的状态。人工神经元模型如图1所示:
上述就是一个简单的神经元模型。在这个模型中,神经元接收来自n个其他神经元传递过来的输入信号,这些信号通过带权重的w进行传递,神经元接收到的总输入值将与神经元的阈值进行比较,然后通过“激活函数”来产生输出。
一般采用的激活函数是Sigmoid函数,如式1所示:
[σz=11+e-z] (1)
该函数图像图2所示:
2.1多层神经网络
将上述的神经元按一定的层次结构连接起来,就得到了如图3所示的多层神经网络:
多层神经网络具有输入层,隐藏层和输出层。由于每一层之间都是全连接,因此每一层的权重对整个网络的影响都是特别重要的。在这个网络中,采用的训练算法是随机梯度下降算法[5],由于每一层之间都是全连接,当训练样本特别大的时候,训练需要的时间就会大大增加,由此提出了另一种神经网络―卷积神经网络。
2.2卷积神经网络
卷积神经网络(CNN)由于在图像分类任务上取得了非常好的表现而备受人们关注。发展到今天,CNN在深度学习领域已经成为了一种非常重要的人工神经网络。卷积神经网络的核心在于通过建立很多的特征提取层一层一层地从图片像素中找出关系并抽象出来,从而达到分类的目的,CNN方面比较成熟的是LeNet-5模型,如图4所示:
在该LeNet-5模型中,一共有6层。如上图所示,网络输入是一个28x28的图像,输出的是其识别的结果。卷积神经网络通过多个“卷积层”和“采样层”对输入信号进行处理,然后在连接层中实现与输出目标之间的映射,通过每一层卷积滤波器提取输入的特征。例如,LeNet-5中第一个卷积层由4个特征映射构成,每个特征映射是一个24x24的神经元阵列。采样层是基于对卷积后的“平面”进行采样,如图所示,在第一个采样层中又4的12x12的特征映射,其中每个神经元与上一层中对应的特征映射的2x2邻域相连接,并计算输出。可见,这种局部相关性的特征提取,由于都是连接着相同的连接权,从而大幅度减少了需要训练的参数数目[6]。
3实验研究
为了将LeNet-5卷积网络用于树叶识别并检验其性能,本文收集了8类树叶的图片,每一类有40张照片,如图5所示的一张树叶样本:
本文在此基础上改进了模型,使用了如图6卷积神经网络模型:
在此模型中,第一个卷积层是由6个特征映射构成,每个特征映射是一个28*28的神经元阵列,其中每个神经元负责从5*5的区域通过卷积滤波器提取局部特征,在这里我们进行了可视化分析,如图7所示:
从图中可以明显地看出,卷积网络可以很好地提取树叶的特征。为了验证卷积神经网络与传统分类算法之间的性能,本文基于Python语言,CUDA并行计算平台,训练同样大小8类,一共320张的一批训练样本,采用交叉验证的方法,得到了如表1所示的结论。
可见,无论是识别率上,还是训练时间上,卷积网络较传统的支持向量机算法体现出更好地分类性能。
4 总结
本文从人工神经网络出发,重点介绍了卷积神经网络模型LeNet-5在树叶识别上的各种研究并提取了特征且进行了可视化,并与传统分类算法SVM进行比较。研究表明,该模型应用在树叶识别上较传统分类算法取得了较好的结果,对收集的树叶达到了92%的准确率,并大大减少了训练所需要的时间。由于卷积神经网络有如此的优点,因此在人脸识别、语音识别、医疗识别、犯罪识别方面具有很广泛的应用前景。
本文的研究可以归纳为探讨了卷积神经网络在树叶识别上的效果,并对比了传统经典图像分类算法,取得了较好的分类精度。
然而,本文进行实验的样本过少,当数据集过多的时候,这个卷积神经网络算法的可行性有待我们进一步的研究;另外,最近这几年,又有很多不同的卷积神经网络模型出现,我们会继续试验其他的神经网络模型,力求找到更好的分类算法来解决树叶识别的问题。
参考文献:
[1]Bell A, Sejnowski T. An Information-Maximization Approach to Blind Separation and Blind Deconvolution[J]. Neural Computation, 1995, 7(6):1129-59.
[2]Altman N S. An Introduction to Kernel and Nearest-Neighbor Nonparametric Regression[J]. American Statistician, 1992, 46(3):175-185.
[3]Ripley B D, Hjort N L. Pattern Recognition and Neural Networks[M]. Pattern recognition and neural networks. Cambridge University Press,, 1996:233-234.
[4]Lécun Y, Bottou L, Bengio Y, et al. Gradient-based learning applied to document recognition[J]. Proceedings of the IEEE, 1998, 86(11):2278-2324.
关键词:无人机;STM32;道路检测;神经网络;模型训练
传统的道路巡检和保养主要由人工来完成,需要投入大量的人力物力来保证道路的相对安全,这种方式存在着低效率、高成本且难以保证道路的决定安全[1]。固定式交通检测设备大量设置在道路的主干路上,也存在着一些缺陷:(1)监控摄像头不能做到全覆盖且具有一定的探测盲区。(2)监控系统采用多屏幕方式,工作人员进行道路故障判断时受限。(3)不能灵活的通知有关部门对事故的快速应急处理。为了克服上述的缺点,本文设计了一种基于卷积神经网络的无人机道路巡检系统,对发生故障和需要保养的道路能快速响应,及时的通知有关部门,避免事故的发生。
1系统的总体设计
在无人机道路巡检系统中,我们主要考虑了以下几个要求[3]:(1)无人机系统能满足正常的工作;(2)无人机系统能适应各种天气和气候变化等;(3)无人机系统应充分考虑控制的安全性;(4)视频流的传输应避免较长的延时。无人机道路巡检系统主要由无人机系统设计、远程控制系统、PC端系统三大部分组成,系统的总体结构框图如图1所示。系统的具体工作原理为:无人机将道路环境检测的结果,将处理后的视频流通过远程传输的方式,发送到PC端进行实时监控道路状况。远程控制系统以STM32作为主控芯片,主要包括在无人机端和遥控端两个部分,遥控端将控制指令通过2.4G通信发送到无人机端,此时无人机的做出相应的位姿变化,完成遥控端对无人机位姿的控制。无人机系统的图像采集模块芯片为树莓派,完成图像的采集并采用TCP通信实现远程视频的传输,将获取的视频流传输到PC端。PC端上使用OpenCV对图像进行处理[4],利用深度学习模块对设计的神经网络进行数据训练,从而得到检测模型,最后在PC上接收处理过的数据并实时监测道路状况。上述工作原理可实现无人机道路巡检系统,下文将对其包括的三大模块进行说明介绍。
2无人机系统设计
本次使用的是RaspberryPi3(modelB+)作为无人机的主控制板[7],无人机的飞行控制算法和图像采集模块集成在树莓派中。远程控制系统通过2.4G无线通信模块连接,通过控制器实现对无人机飞行和图像采集的控制。无人机系统总体结构如图2所示。
3PC端系统设计
在PC端系统设计主要分为图像预处理、模型训练和视频监控三大部分,通过TCP通信协议进行通信,TCP通信是一种面向连接的通信,可完成客户端(树莓派)和服务端(PC)的信息传递[9]。下面主要对前两部分详细介绍。
3.1图像预处理
本系统对地面裂缝检测的图像预处理流程如图3所示具体工作原理为:(1)采用加权平均灰度化对获取的无人机影像进行灰度化处理;(2)对灰度化处理后的影像进行直方图均衡化,使得影像具有高对比度和多元的灰度色调变化,为后续的滤波降噪奠定基础;(3)对处理后的影像进行滤波降噪,消除孤立的噪声点,采用方法的是中值滤波降噪;(4)使用迭代二值化处理将影像的灰度值设置合适的阈值,使得图像更简单,目标更突出,然后对图像进行分割,计算迭代的阈值,判断迭代的阈值是否收敛到某一值或者达到限定的迭代次数,如果是的话,将完成二值化处理和滤波,否则将初始二值化阈值;(5)最终完成道路故障的识别与标记。
3.2模型检测
3.2.1卷积神经网络原理使用卷积神经网络进行模型训练,首先使用卷积层实现特征的提取,原理如图4所示。如图5所示,卷积操作是模仿神经元的机制。不同的输入在权重的影响下会有不同的输出,根据损失函数的计算来不断的更新权重,直到获得合理的权重参数。初始传递的信号为x,中间通过权重w,再经过偏置b后连接在末端,最后输出信号变成wx+b。fun(•)表示激活函数,最终f(z为输出的结果,如式(1)所示。3.2.2卷积神经网络训练流程通过相机采集到的缺陷和问题图像作为训练样本,这部分是检测道路安全的关键一步,(1)训练标记数据:首先使用图像预处理中标记好的道路故障提取出来,通过卷积神经网络对标记框内的目标数据进行训练;(2)提取特征数据:将道路故障的类型统计并归纳;(3)误差反馈学习:对测试样本进行误差反馈学习,并进行测试;(4)优化训练数据:根据实际应用场景增加图像的种类和数量,不断训练模型。3.2.3故障的基本分类道路故障主要路面缺陷(例如裂缝、残缺等)和路面增加(例如长时间静止的车辆和路人),各自训练集数量为1000张。如表1所示。3.2.4实验测试为实现故障的检测,测试数据集为100张,不同类型故障数据50张,均采集自新道路且与训练样本一致,实验结果如表2所示。由表2可知,检测路面增加(例如长时间静止的车辆和路人)的准确率高达96%,但是地面缺陷的准确率相比较而言略低,可能造成的原因是:①硬件原因导致采集的图像清晰度比较低;②地面缺陷太小,无人机难以识别;③训练的数据集较少,特征学习误差大;但是满足了设计需求,还需进一步改进。
4总结与展望
【关键词】人工智能 图像识别 深度学习
1 概述
图像识别技术是人工智能研究的一个重要分支,其是以图像为基础,利用计算机对图像进行处理、分析和理解,以识别不同模式的对象的技术。目前图像识别技术的应用十分广泛,在安全领域,有人脸识别,指纹识别等;在军事领域,有地形勘察,飞行物识别等;在交通领域,有交通标志识别、车牌号识别等。图像识别技术的研究是更高级的图像理解、机器人、无人驾驶等技术的重要基础。
传统图像识别技术主要由图像处理、特征提取、分类器设计等步骤构成。通过专家设计、提取出图像特征,对图像M行识别、分类。近年来深度学习的发展,大大提高了图像识别的准确率。深度学习从大量数据中学习知识(特征),自动完成特征提取与分类任务。但是目前的深度学习技术过于依赖大数据,只有在拥有大量标记训练样本的情况下才能够取得较好的识别效果。本文认为研究如何在标记数据有限的情况下继续利用深度学习完成物体识别任务具有重要意义。这也是未来人工智能研究的重要方向之一。
2 传统图像识别技术
传统的图像识别技术包括:图像获取、预处理、特征提取、分类。在图像输入后,需要先对图像进行预处理。一幅标准灰度图像,如果每个像素的像素值用一个字节表示,灰度值级数就等于256级,每个像素可以是0~255之间的任何一个整数值。一幅没有经过压缩处理的640×480分辨率的灰度图像就需要占据300KB的存储空间。通常我们需要将图片的亮度及对比度调整合适,才能使图片更加清晰、便于观察。
许多采集到的图片带有或多或少的噪声,需要对图片的噪声进行消除。对图片噪声的消除可以使用不同的去噪方法,如中值滤波、算数平均滤波、平滑线性滤波和高斯滤波等。不同滤波器分别适用于不同情况的噪声。如椒盐噪声便适合使用中值滤波器,高斯噪声便适合使用平滑线性滤波和高斯滤波。有时候,我们需要对图像细化处理(如指纹细化,字符细化等),以便获取主要信息,减少无关信息。细化操作,可以得到由单像素点组成的图像轮廓,便于后续特征提取操作。
基本的图像特征提取包括边缘、角点等提取。一般使用不同的特征提取算子结合相应的阈值得到这些关键点。另一类在频域中进行特征提取的方法主要是通过傅里叶变换,将图像基于频率分为不同的部分,从而可以在频谱中反映出原始图像的灰度级变化,便可得到图像的轮廓、边缘。
在完成图像的预处理和特征提取之后,我们便能够对图像进行识别、分类。常用的分类器有K-近邻(KNN),支持向量机(SVM),人工神经网络(ANN)等等。K-近邻算法原理是,当一个样本的k个最相邻的样本中大部分属于某一类别时,该样本也应当属于同一类别。支持向量机是通过寻找支持向量,在特征空间确定最优分类超平面,将两类样本分开。人工神经网络模仿生物大脑中的神经网络结构,通过误差反向传播不断优化参数,从而得到较好的分类效果。
3 基于深度学习的图像识别技术
一般认为深度学习技术是由Hinton及其学生于2006年提出的,其属于人工神经网络分支。深度神经网络模仿人脑的神经机制来分析样本,并尽可能地对样本的特征进行更深度的学习。以图片为例,利用深度学习技术对样本的特征进行学习时,由低层特征到高层特征越来越抽象,越来越能表达语义概念。当样本输入后,首先对图像进行卷积与下采样操作,卷积和下采样操作是为了进行特征提取和选择。以原始像素作为输入,深度学习技术可以自动学习得到较好的特征提取器(卷积参数)。深度学习的训练过程,首先将当前层的输出作为下一层的输入,进行逐层分析,使得每一层的输入与输出差别尽可能小。其后,再联合优化,即同时优化所有层,目标是分类误差最小化。
传统的深度神经网络往往网络中的节点数太过庞大,难以训练。人们构造出卷积神经网络,以权值共享的方式减少了节点数量,从而能够加深学习的深度,使系统能学习到更抽象、更深层的特征,从而提高识别正确率。目前较成功的深度学习网络结构有AlexNet、GoogLeNet、ResNet等。
与传统识别技术相比,深度学习技术具有以下优势:
(1)无需人工设计特征,系统可以自行学习归纳出特征。
(2)识别准确度高,深度学习在图像识别方面的错误率已经低于人类平均水平,在可预见的将来,计算机将大量代替人力进行与图像识别技术有关的活动。
(3)使用简单,易于工业化,深度学习由于不需要领域的专家知识,能够快速实现并商业化,国内较知名的深度学习创业公司有专注人脸识别的Face++、研究无人车的驭势科技等。
4 存在问题与未来展望
虽然深度学习具备诸多优点,但目前来看深度学习仍有许多不足之处。首先,由于深度学习模型为非凸函数,对其的理论研究十分困难,缺乏理论保证。在对数据进行调整时,仍是简单的“试错”,缺少理论支撑。
同时,由于深度学习过于依赖数据量和计算资源。对一个新概念的学习,往往需要数百个甚至更多有标记的样本。当遇到有标记的样本难以获取或者代价太大时,深度学习就无法取得好的学习效果。并且深度学习需要十分昂贵的高性能GPU,这使得深度学习难以平民化。目前深度学习训练速度较慢,往往需要几天甚至一个月。其模型扩展性差,缺少“举一反三”的能力,样本稍加变化,系统性能便会迅速下降。目前的深度学习属于静态过程,与环境缺乏交互。
对其的解决方案目前主要有两点:
(1)针对于模型扩展性差的问题,通过引入迁移学习,研究不同任务或数据之间的知识迁移,提高模型的扩展能力、学习速度,同时降低学习成本,便于冷启动。
(2)与强化学习结合,研究在动态环境下进行深度学习,提高深度学习与环境交互的能力。
参考文献
[1]蒋树强,闵巍庆,王树徽.面向智能交互的图像识别技术综述与展望[J].计算机研究与发展,2016:113-122.
[2]张翠平,苏光大.人脸识别技术综述[J].中国图象图形学报,2000:885-894.
[3]梅园,赵波,朱之丹.基于直线曲线混合Gabor滤波器的指纹增强算法[J].计算机科学,2016.
[4]孙志军,薛磊,许阳明,王正.深度学习研究综述[J].计算机应用研究,2012:2806-2810.
[5]庄福振,罗平,何清,史忠植.迁移学习研究进展[J].软件学报,2015:26-39.
[6]高阳,陈世福,陆鑫.强化学习研究综述[J].自动化学报,2004:86-100.
【关键词】人工智能 医学领域
1 引言
人工智能(AI)是上世纪50年展起来的新兴学科,主要内容包括:知识表示、自然语言理解、机器学习和知识获取、知识处理系统、计算机视觉、自动推理和搜索方法、智能机器人、自动程序设计等方面。在过去的几十年里人工智能涌现出了大量的方法,大致可分为两大类:第一类是基于Newell和Simon的物理符号系统假说的符号处理方法。这种方法大多采用从知识阶段向下到符号和实施阶段的自上而下的设计方法,第二类是采用自下而上设计的“字符号”方法。
2 人工智能的发展
全球对人工智能的研发经历了已经有70年的发展,从上个世纪的50年代开始一直到今天,历经了两次大起大落,但伴随着深度学习的重燃、庞大的大数据支撑以及计算能力的不断提升和成本的不断下降这些因素的出现,尤其是在摩尔定律、大数据、互联网和云计算、新方法这些人工智能进步的催化剂作用下,将迎来人工智能新的春天。
3 人工智能在医学领域上的应用
3.1 在神经网络中人工智能的应用
在医学诊断中人工智能的应用会出现一些难题,例如知识获取比较难、推理速度慢、自主学习以及自适应变化能力弱。研究人脑连接发现了以人工神经为特点可以解决在获取知识中所出现的瓶颈和知识种类繁琐问题,能够提高对知识的推理能力,包括自主学习,自组织等方面的能力,促进了神经网络在医学专家系统中的快速发展。
人工智能领域ANN,有不同于其他人工智能的方法,在传统的结构上,它只是AI分支中的一个,只能通过逻辑符号来模拟人脑的思维方式,进一步来实现人工智能,与之相比,不同的ANN是学习和训练为一体来达到智能的。ANN具有学习的能力及特殊方法,用户不用编写复杂的程序来解决所遇到的问题,只用提供有效的数据就可以完成。迄今为止,医学领域中对大部分的病理原因无法解释,无法确定病理原因,加上各种疾病的表现种类复杂多变。在医学的日常实践中,疾病相应的治疗只能以经验为基础来判断。所以,ANN有着记忆,学习和归纳总结为一体的人工智能服务,在医学领域有很好的应用发展趋势。
3.2 在中医学中人工神经网络的应用
在中医学中,所提出的“辨证论治”中的“证”具有模棚性、不确定性的特点,主观性比较强,因此中医的诊断方法和治疗手段与医师的经验水平有很大联系。数年来在实验研究,临床观察,文章整理,经验总结上,都有着对“证”的研究思想的深入调查。一部分“辨证”的过程可以用人工神经网络来替换使用。恰当的中医症状可以作为基本输入和适当人工神经网络模型,人工神经网络能够根据以往的学习“经验”来进行综合分析,从而提出中医诊断方法。
由神经元结构模型、网络连接模型、网络学习算法等几个要素组成了人工神经网络。具有某些智能系统的功能。 按照网络结构来划分,人工神经网络有很多不同的种类,例如感知器、BP网络、Hopfield网络等,目前应用最为广泛的神经网络就是其中的BP网络。这种前沿网络非 BP网络所属,网络的结构与权值能够表达复杂的非线性 I/0映射关系。凭借 BP网络优良的自主学习功能,既可以通过误差的反向传播方法,对照已知样本反复进行训练,也可以调整网络的权值,直到网络的 I/0关系在某一块训练指标下最接近样本为止。
3.3 人工智能在临床医疗诊断中的应用
计算机编写的程序主要根据专家系统的设计原理和方法来模拟医生的医学诊断,以及通常治疗手段的思维过程来进行。医疗专家系统是临床医疗诊断中人工智能的很好体现,不仅能够处理较为复杂的医学治疗问题,还能当做医生诊断疾病的重要工具,更重要的是传承了专家们的宝贵医学治疗经验。
3.4 人工智能技术在医学影像诊断中的应用
目前,在医学影像中存在着的问题,比如:误诊率高、缺口大。这些问题需要通过人工智能的方法来解决。在医学影像技术领域人工智能的应用包括主要的两个方面,分别是:第一个方面为图像识别,第二个方面为深度学习,其中人工智能应用最核心的部分实深度学习。这两个部分都是基于医学影像大数据所进行的数据上的挖掘和应用。这两个方面所进行的数据挖掘及其应用都是依据医学影像大数据来完成的。
Geoffrey Hinton教授是神经网络领域的大师,2006年,他与其博士生在《Science》和相关的期刊上发表了论文,第一次提出了“深度信念网络”的概念。2012年,由斯坦福大学Fei-Fei Li教授举办的ImageNet ILSVRC大规模图像识别评测任务是由Hinton教授的研究团队参加的。这个任务包括了120万张高分辨率图片,1000个类比。Hinton教授团队使用了全新的黑科技多层卷积神经网络结构,将图像识别错误率突破性地从26.2%降低到了15.3%。 这个革命性的技术,让神经网络深度学习以迅速的速度进入了医疗和工业的领域范围,随后这一技术被陆续出现的医疗影像公司使用。例如:国际知名的医学影像公司Enlitic和国内刚刚获得有峰瑞资本600万天使轮融资的DeepCare。都是不断积累大量影像数据和诊断数据,继续对神经元网络进行深度的学习训练,从而有效的提高了医生诊断的准确率。
人工智能不仅能使患者的健康检查快速进行,包括X光、B超、核磁共振等。另外还能大量减少医生的读片时间,提升了医生的工作效率,降低误诊率。
4 总结
人工智能软件工作效率远远超过了人类大脑,不仅能够更快速的找到数据的模式和相似性,还能有效帮助医生和科学家提取重要的信息。随着人工智能的发展及其在医学领域的逐渐普及和应用,两者的互相融合在未来必定成为医学发展的重要方向。
参考文献
[1]冯伍,张俊兰.人工智能在医学上的应用[J].电子设计工程,2010(01).
[2]杨琴,陈家荣.人工智能在医学领域中的应用[J].科技风,2012(12),100-101.
[3]王宇飞,孙欣.人工智能的研究与应用[J].信息与电脑,2016(05).
[4]铅笔道.人工智能与影像诊断相结合的医生界阿尔法狗,2016(03).
关键词:安全带检测;深度学习;支持向量机;智能交通;特征提取
中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2016)11-0240-03
Abstract:Seat belt detection in intelligent transportation systems is an important research area. A seat belt detection algorithm for complex road backgrounds based on deep learning is proposed. It first extracts features from labeled vehicle, windshield, and seat belt regions, and those features are used to train the detection models by deep learning. Then, it detects the locations of the vehicle, windshield, and seat belt regions, and uses the relative positions among these vehicle components and their detection scores to train a support vector machine classification model. Finally, it performs a fine mapping and identification process using this classification model on the seat belt region. This method performs well when applied to a database of images collected by road surveillance cameras.
Key words: Seat belt detection; deep learning; support vector machine; intelligent transportation; feature extraction
针对驾驶员未系安全带的这种危险驾驶行为,以及为了响应公安部门的需求,目前出现了很多种安全带检测方法。现有的安全带检测方法大多是基于边缘检测[1-2]和Hough变换[3]的方法进行安全带检测。Guo等人[4]提出了安全带检测系统,包括安全带检测和驾驶员区域定位两个模块。该算法利用线性滤波器在HSV颜色空间[5]通过水平方向和垂直方向投影来确定车牌的位置,然后利用边缘检测算子(Sobel[6],Canny[7]等)通过边缘检测得到车窗的上下边缘,再通过几何关系确定驾驶员区域的位置。该方法容易受到车身颜色影响,稳定性较差。
为了解决安全带检测过程中的光照、车型、驾驶员着装等因素对检测结果的影响,本文提出了一种基于卷积神经网络(CNN[8])的安全带检测系统。当采集到图片后,首先粗定位车辆区域,并根据检测算法得到车窗区域粗定位模块,找到图像上若干个车窗候选区域,最后通过安全带检测模型及支持向量机(SVM)分类器[9]处理得到安全带检测结果。
1 基于深度学习的安全带检测
1.1 CNN特征提取算法
深度学习[11-12]是通过大量的简单神经元组成,根据非线性关系将底层特征抽象表示为高层特征。卷积神经网络[13]是一个多层的神经网络,每层由多个二维平面组成,而每个平面包括多个独立神经元。网络中由一些简单元和复杂元组成,分别记为S-元和C-元。
1.2 检测模型的构建
如图1所示,我们构建了由三个CNNs组成的多尺度的特征提取模型。每个CNN模型共有八层,其中有五个卷积层和三个全连接层。对于每一张图片,都会自动的提取三个嵌套的越来越小的矩形窗口的特征,分别为车辆区域、车窗区域以及安全带区域。这三个由CNNs提取的特征送到两个全连接层,第二个全连接层的输出被送到输出层,最后用线性支持向量机分类器对所有子块进行分类。
2 实验结果
2.1 车辆及车窗检测
本实验训练集包括戴安全带和未戴安全带各2000张的车辆图像,测试集包括戴安全带和未戴安全带各100张的图像。本文共完成车辆检测、车窗检测和安全带检测三个实验。其中,对于车辆和车窗检测部分,使用检测率(CIR)和漏检率(MIR)来作为系统的评价指标,计算方式如下式所示:
对于车辆检测实验,选取6000车辆图片用于训练模型。然后选取2000张车辆图片作为测试图片,并随机分成10份。检测结果示例如图2(a)。平均检测率为93.3%,平均漏检率为6.7%。同时,对比了基于Adaboost算法[10]的车辆检测模型,检测结果示例如图2(b),平均检测率为90.6%,平均漏检率为9.4%。
由此可以看出,本文算法在相同的数据库上比Adaboost算法表现更好,具有更低的漏检率和误检率。并且车辆检测结果更适合用于后面的车窗检测实验。
车窗检测实验的示例如图3所示。选取6000张车窗正面车窗图片用于训练模型,选取2000张图片作为测试集,并随机分成10份。平均检测率为93.6%,平均漏检率为9.4%。
2.2 安全带检测
对于安全带检测部分,使用检测率(CIR)、虚警率(WIR)和漏检率(MIR)作为安全带检测系统的评价指标,计算方式如下式所示:
选取戴安全带和未戴安全带图片各2000张图片用于训练模型。选取2000安全带区域图片作为测试图片,并随机分成10份,每份包含戴安全带图片和未戴安全带图片各100张。通过基于深度学习的安全带检测算法,检测结果示例如图4所示,平均检测率为92.1%,平均虚警率为6.4%,平均漏检率为2.5%。
3 结论
安全带检测是智能交通系统中的一个重要研究课题。本文提出了一个高效的进行安全带检测的系统,对于检测部分,我们采用深度神经网络的特征提取方法,该特征更加适用于训练检测模型。同时,我们结合SVM的后处理,提高了安全带检测系统的鲁棒性,并且很大程度上减低了虚警率和漏检率。
参考文献:
[1] Ha D M, Lee J M, Kim, Y D. Neural-edge-based vehicle detection and traffic parameter extraction [J]. Image and vision computing, 2004, 22(11): 899-907.
[2] Song G Y, Lee K Y, Lee J W. Vehicle detection by edge-based candidate generation and appearance-based classification [C]//Intelligent Vehicles Symposium, IEEE, 2008: 428-433.
[3] Ballard D H. Generalizing the Hough transform to detect arbitrary shapes [J]. Pattern recognition, 1981, 13(2): 111-122.
[4] Guo H, Lin H, Zhang S. Image-based seat belt detection [C]//2011 IEEE International Conference on Vehicular Electronics and Safety (ICVES). IEEE, 2011: 161-164.
[5] 王运琼, 游志胜. 基于色差均值的快速车窗定位算法[J]. 计算机应用与软件, 2004, 21(1): 78-79.
[6] 张建军, 罗静. 基于改进Sobel算子的表面裂纹边缘检测算法[J]. 合肥工业大学学报(自然科学版), 2011年06期.
[7] Ali M, Clausi D. Using the Canny edge detector for feature extraction and enhancement of remote sensing images [C]//IEEE 2001 International Geoscience and Remote Sensing Symposium. 2001:2298-2300.
[8] Li Guanbin, Yu Yizhou. Visual Saliency Based on Multiscale Deep Features [C]//2015 IEEE Conference on Computer Vision and Pattern Recognition (CVPR). IEEE, 2015: 5455-5463.
[9] 骆玉荣. 安全带识别系统的研究与实现[D]. 北京:北京工业大学, 2008.
[10] 吴法. 图像处理与机器学习在未系安全带驾车检测中的应用[D]. 杭州:浙江大学, 2013.
[11] A. Krizhevsky, I. Sutskever, G. E. Hinton. Imagenet classification with deep convolutional neural networks [C]//Advances in neural information processing systems, 2012:1097-1105.
随着时代的发展,构建在互联网生态模式之上的云计算、大数据、人工智能等新技术,正渗透到每一个行业,引发产业生产、服务模式的变革,并且已经取得一系列重要成果。在此背景下,大学教学如何跟上时代步伐,是值得每一个高校教师深入思考的问题。程序设计作为计算机专业大学生的必修课程和必须掌握的基本技能,其教学改革在新时代下尤显必要。
传统的大学教学中,一直都以C/C++或Java作为教学语言。诚然,C/C++和Java是当今使用人数最多的语言,但在“互联网+”时代,面对大数据分析时,特别是面对数据采集、仿真建模、结果验证与数据可视化时,他们就不再是最佳选择。
Python作为一种解释型超高级语言,具备交互式、可移植、面向对象的特点。它功能强大,适用于多种操作系统,有完善丰富的工具包,正在得到越来越多的应用,而且越来越被重视。2017年4月,北京理工大学计算机学院和高等教育出版社联合承办了“第一届高等学校Python语言及计算生态教学研讨会”,提出了计算生态的概念[1],大力推动了Python教学。在此背景下,根据我们在Python教学和科研中的应用经验,对如何进行基于Python计算生态的教学改革进行探讨。
1 Python语言的兴起与优势
从20世纪中期到今天,短短的70年间,电子计算机经历了飞速的发展,出现了许多不同的程序设计语言,例如Pascal、Fortran、C、C++、Java、PHP、C#等,这些不同的语言,都体现了不同的设计哲学,也反映了不同的时代特点。
然而,每种程序设计语言都有其局限性。Python的设计者Guido von Rossum希望有一种语言,既具有C方便地调用计算机功能接口的能力,又可以像一些脚本语言一样轻松地编程。Python正是在这种背景下被创造出来。
同C/C++和Java等语言相比,Python有以下优势:
(1)简单易学。Python是一种代表简单主义思想的语言,语法简单,学习起来容易上手。这使学生能够专注于解决问题而不是学习语言本身。
(2)解释性。Python写的程序不需要编译成二进制代码,可以直接从源代码运行程序。这使得Python更加简单,更易于移植。
(3)面向对象。Python既支持面向过程的编程,也支持面向对象的编程。
(4)可扩展性。为了提升运行效率,可以采用C/C++来编写关键代码,然后在Python程序中使用它们。
(5)混合编程。Python被称为胶水语言,是由于可以很容易地将Python与其他语言进行混合编程。这样方便地利用已有的各种工具包,提高开发效率。
(6)丰富的库。Python有强大的标准库,并且Python的生态系统开始拓展到第三方包,例如用于Web框架的web.py ,用于科学计算的numpy,以及用于数据可视化的matplotlib等。
Python作为一种跨平台编程语言,已经被移植在以Linux、Windows、Mac、Android为代表的许多平台上。由于Python的开放性,有丰富的来自开源社区的成熟库支持,从而可以基于Python完成各种工作,例如数据采集(如网络爬虫)、图像处理、机器学习、科学计算等。
2 针对Python的应用支持与国内外课程建设情况
正由于Python具有上述优点,它获得了业界的广泛支持。例如在Google公司,Python是继C++和Java之后,使用率排名第三的编程语言,使用Python的开发团队也是Google的第三大研发部门。
(1)Tensorflow:TensorFlow是由Google Brain小组开发的用于机器学习和深度神经网络的工具。据统计,Tensorflow是目前使用人数最多的开源深度学习框架[2]。TensorFlow本身是使用C++实现的,然后用Python封装。Tensorflow可以根据用户给出的所有指令创建一个计算图,该图被内部优化和编译成可执行的C++代码。这样Tensorflow就可以利用Python 带来的开发速度和C++带来的执行速度。
(2)Google App Engine:Google App Engine(GAE),是谷歌推出的云平台,它完全把CPU、内存等硬件基础设施抽象化,这样只需要关注代码的编写,不需要关注硬件、操作系统或者物理位置。Python是GAE最早支持编程的语言之一,任何使用Python编写的程序,都可以配合Google Python API,很方便地在GAE上创建、部署、运行Python程序。
(3)Caffe(Convolutional Architecture for Fast Feature Embedding):Caffe是由Berkeley AI Research(BAIR)和Berkeley Vision and Learning Center (BVLC)社?^贡献者开发的另一个深度学习框架。同Tensorflow一样,Caffe也是采用C++进行编写,然后提供Python封装,从而既可以利用C++的高执行效率,也可享受Python的高开发效率。
(4)在好莱坞,工业光魔公司(Industrial Light) 采用Python制作商业动画,在“阿贝斯(Abyss)”“星球之旅(Star Trek)”“Indiana Jones”等超级大片中惊艳登场。
(5)ERP和CRM软件的开发也开始基于Python完成;Red Hat曾用Python和Tk一起成功开发配置和管理操作系统的可视界面,整个系统可以全面控制Linux操作系统,并根据用户选择对配置文件作自动更新。
正由于Python是受到业界的欢迎,国外很多高校(如麻省理工学院、斯坦福大学、加州大学洛杉矶分校等)已经用Python作为程序设计语言的教学对象。在Coursera等在线教育平台上,可以发现有来自密歇根大学、莱斯大学、约翰霍普金斯大学等众多高校的Python课程;国内南京大学张莉老师的课程也在其中。然而国内这方面的工作做得还远远不够。截至2015年,我国开设Python语言教学的高校不超过10所[3]。目前在国内大力推动Python教学改革的主要有北京理工大学嵩天老师等人,已编著并出版相应的大学教材[4],受到广泛欢迎。哈尔滨工业大学车万翔老师等人分析了C语言作为入门语言的不足和Python作为入门语言的优势,阐述了计算机专业高级语言程序设计课程的改革方案和实施效果[5]。南京大学张莉老师发表了《基于MOOC的“用Python玩转数据”翻转课堂实践与研究》,研究证明:采用Python教学可以较好地提高学生的主动学习能力、学习兴趣和热情以及问题求解能力[6]。
3 基于Python的教学科研应用改革案例
3.1 输入输出
输入输出(I/O)是每个程序都必须具备的重要功能。常见的I/O可以分为3类:标准I/O(终端打印等)、文件I/O和网络I/O。以?K端I/O为例:
/* Basic I/O in C */
#include
int main()
{
char name[20]; /* char数组,保存第一行输入,作为名字输出 */
scanf("%s", name); /*读取第一行输入 */
printf("Hello %s\n", name);
return 0;
}
以上用C语言编写的有效代码共计8行,输入输出都采用标准库函数。由于C语言本身设计方面的缺陷(如果第一行输入超出char数组大小),可能导致严重的缓冲区溢出问题。针对这一问题,C++对数组越界进行了保护,从而提高系统安全性。
如果采用Java实现,则有效代码共10行。由于Java的面向对象编程思想,下面这个示例程序中多了很多对象构造的流程,引用的库看起来也相对较多,如下所示。我们只需要对这段代码进行稍微修改,就可以实现网络I/O和文件I/O。例如,替换“System.in”,就能够实现对文件或者网络流读取。将“Reader”和“InputStream”替换,就能够实现写入。
/ * Basic I/O in Java */
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class HelloWorld {
public static void main(String[] args) throws Exception { /*所有Java程序的入口函数 */
/* 新建输入对象,用来读取标准输入。其中对象构造有嵌套*/
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String name = reader.readLine(); /* 读取第一行输入 */
System.out.printf("Hello %s\n", name);
}
}
相比之下,基于Python的代码则非常短小简洁:
/* Basic I/O in Python */
import sys
name = sys.stdin.readline() /* 读取第一行输入 */
print("Hello " + name)
有效代码仅仅只有3行!同样,替换其中的“sys.stdin”可以实现对文件读取。对于动态类型的Python来说,所有的变量都不需要繁复的声明,直接用就可以,再加上解释执行的特点,无需定义入口函数即可运行。
以上是对C/C++、Java、Python在基本终端I/O操作上的比较,当推广到文件I/O和网络I/O后,Python的优势会更突出,详见表1。
3.2 数据操作
数据处理是大数据时代我们面临的首要问题。然而,由于信息化系统建设过程中,数据可能以不同的结构存在,可能是纯文本文件、CSV格式,也可能是Excel格式,或者是各种不同厂商的数据库格式。
当然,可以采用C++或Java来读取各种异构数据源,但过程相当繁琐,需要利用各种底层驱动,甚至是一些商业化组件。以Excel文件读取为例,为了处理Excel数据,C/C++代码需要用到libxl商业库,而Java也需要用到Apache POI开源库。而利用Python对Excel文件进行读取则需要利用Pandas开源数据处理分析库,示例代码如下:
/* Read Excel in Python */
import pandas
df = pandas.read_excel('sample.xls')
print df.columns /* 输出列名 */
values = df['列名'].values /* 获取某一列的所有数据 */
FORMAT = ['列名1', '列名2', '列名3'] /* 获取指定列组成的数据帧 */
df_selected = df[FORMAT]
总的来说,在数据库操作方面,C++、Java和Python的支持都非常好。C++和Java都为SQL提供了标准的连接、驱动管理类,不同的数据库只需要加载不同的驱动就可以。Java对数据库有比较好的语言级别支持,相应的驱动也比较丰富。Python也提供语言级别的支持,同时第三方库十分丰富,甚至一种数据库有多个不同的连接库。另外值得一提的是, 尽管当前很多流行的分布式大数据平台及分布式数据库使用Java编写,但利用Python同样能够方便地基于第三方库实现操作Hbase、Hive以及其他非关系数据库,如Mongodb、Redis等,这种特点是C/C++不能比拟的。表2为Python与C++、Java在数据库操作上的比较。
由于Python对各种文件和数据库的支持都非常好,它十分适合编写数据库之间,数据库与文件之间相互导入导出数据的脚本,是大数据处理的首选语言。
3.3 数据可视化
丰富的可视化数据图形能够更好地对数据进行展示。利用数据可视化,可方便分析人员从宏观上了解数据的形态和分布,或者进行最后的结果展示。
Python提供了丰富的数据可视化工具,如pandas、Seaborn、Bokeh、matplotlib等。下面以matplotlib为例说明如何利用Python完成数据绘图与可视化。
假定我们要展现的数据用CSV格式保存,内容见表3。目标是基于matplotlib进行直观的数据总体分布展示,例如利用直方图统计年龄分布、利用箱体图展示薪资水平、利用散点图绘制年龄与收入的相关关系。完整代码如下:
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv("example.csv") /* ?x取数据 */
fig = plt.figure()
ax1 = fig.add_subplot(1,4,1) /* 定义展示布局 */
ax1.hist(df["Age"], bins = 5) /* 定义直方图 */
plt.axis([20,45,0,5])
plt.title("Age distribution")
plt.xlabel("Age")
plt.ylabel("Employee")
plt.show()
ax2 = fig.add_subplot(1,4,2) /* 确定图在画布中的位置 */
ax2.boxplot(df["Age"]) /* 定义箱线图 */
ax3 = fig.add_subplot(1,4,3)
ax3.bar(df["Age"],df["Income"]) /* 定义条形图 */
ax3.set_title("Income distribution")
ax3.set_xlabel("Age")
ax3.set_ylabel("Income")
ax4 = fig.add_subplot(1,4,4)
ax4.scatter(df["Age"],df["Income"]) /* 定义散点图 */
ax4.set_title("Income distribution")
ax4.set_xlabel("Age")
ax4.set_ylabel("Income")
plt.show()
得到的可视化效果如图1所示。
Python的开放性还表现为利用支持库,实现如图1所示的各类统计效果和复杂的展示(如地图、热力图以及复杂网络等)。此外,除了构建在Python之上的原生库,还有大量其他的数据可视化工具包(如基于Javascript的Plot.ly、百度的Echart等),这些工具包同时也提供Python的调用封装,丰富了基于Python的可视化效果,体现了强大的Python计算生态。
3.4 图像处理与深度神经网络
深度学习的出现点燃了研究者对神经网络和机器学习的研究热情,特别是基于Google Tensorflow的AlphaGo接连击败世界围棋冠军,更加吸引了人们对深度学习的关注。在深度学习领域,很多优秀的开源平台与框架(如Tensorflow、Caffe、Theano、MXNet等)都提供Python接口。这也从侧面反映出Python计算生态已经建立。下面以Tensorflow提供的Python接口为例,介绍Python在图像处理与深度神经网络方面的应用。
卷积神经网络是深度学习的一个重要模型。Tensorflow已经屏蔽了关于卷积神经网络的具体结构,如神经元函数、拓扑连接状态等。程序员只需要通过参数指定,就能完成网络模型的设计,例如
conv1 = tf.layers.conv2d(inputs=input_layer,filters=32,kernel_size=[5, 5], padding="same",activation=tf.nn.relu)
pool1 = tf.layers.max_pooling2d(inputs=conv1, pool_size=[2, 2], strides=2)
通过设置输入层ID、激活函数、padding方法、核大小等参数,就可以唯一确定输入层、卷积层、池化层,再通过调整参数并选择一定的学习算法,结合pillow、scikit-image等基于Python的图像处理工具包,从而可以利用深度网络自动完成特征学习,完成模式识别或图像分类工作。
关键词:人工智能;云计算;大数据
最近火热的美剧《西部世界》里传递出很多关于人工智能的信息,在围绕如何突破机器极限,形成自主意识方面,提出了富有科幻现实色彩的方法-冥想程序, 将意识形成描绘成了“走迷宫”的过程,同时在道德层面又一次将“人工智能是否能成为有别于人类的另一个物种”的问题呈现在广大观众面前。
“人工智能”(AI)这一概念最早由马文・明斯基和约翰・麦卡锡于1956年的“达特茅斯会议”上共同提出。1960年,麦卡锡在美国斯坦福大学建立了世界上第一个人工智能实验室。经过近几年互联网的飞速发展,AI对企业甚至是行业产生了巨大而又深远的影响。机器学习,尤其是深度学习技术成为人工智能发展的核心。越来越多的硬件供应商专为深度学习和人工智能定制设计芯片。如IBM的人脑模拟芯片SyNAPSE(Systems of Neuromorphic Adaptive Plastic Scalable Electronics,自适应塑料可伸缩电子神经形态系统)芯片,含有100万个可编程神经元,2.56亿个可编程突触,每消耗一焦耳的能量,可进行460亿突触运算。
云计算和大数据作为人工智能的基础, 在工业制造等众多场景中得到了广泛应用,比如很多工厂都在传送带上加装了传感器,将压力、温度、噪音和其他一些参数实时传到云端,将工厂真正连上网络,然后利用人工智能的算法对这些数据进行比对,由此提前为工厂提供预警和远程检测服务。这种将生产流程及产品通过物联网连接到云端,然后利用算法进行大数据分析的模式,将在更多的行业被广泛应用。
目前人工智能主要有10个应用子领域,分别是机器学习、计算机视觉、智能机器人、虚拟个人助理、自然语音处理、实时语言翻译、情感感知计算、手势控制、推荐引擎及协同过滤、视频内容自动识别。各方向处于不同的发展阶段,发展程度有高有低。但驱动发展的先决条件主要体现在感知能力、理解能力、学习能力、交互能力四个方面。
1 感知能力
目前人工智能的感知主要通过物联网来实现,它提供了计算机感知和控制物理世界的接口与手段,能够采集数据、记忆,分析、传送数据,进行交互、控制等。比如摄像头和相机记录了关于世界的大量图像和视频,麦克风记录了语音和声音,各种传感器将它们感受到的世界数字化。这些传感器就如同人类的五官,是智能系统的数据输入,是感知世界的方式。
2 理解能力
智能系统不同于人脑,没有数以千亿的神经元,对事物问题的理解在现阶段还很大程度上依赖于处理器的计算分析能力。近年来,基于GPU(图形处理器)的大规模并行计算异军突起,拥有远超CPU的并行计算能力。从处理器的计算方式来看,CPU计算使用基于x86指令集的串行架构,适合尽可能快的完成一个计算任务。而GPU诞生之初是为了处理3D图像中的上百万个像素图像,拥有更多的内核去处理更多的计算任务。因此GPU具备了执行大规模并行计算的能力。云计算的出现、GPU的大规模应用使得集中化数据计算处理能力变得空前强大。
3 学习能力
学习能力的培养类似人类需要教材和训练。据统计,2015年全球产生的数据总量达到了十年前的20多倍,大数据的发展为人工智能的学习和发展提供了非常好的基础。机器学习是人工智能的基础,而大数据和以往的经验就是人工智能学习的书本,以此优化计算机的处理性能。不可忽视的是近年来科技巨头为了提前布局AI生态,纷纷开源平台工具,极大地丰富了机器训练的素材和手段。如谷歌了新的机器学习平台TensorFlow,所有用户都能够利用这一强大的机器学习平台进行研究,被称为人工智能界的Android。IBM宣布通过Apache软件基金会免费为外部程序员提供System ML人工智能工具的源代码。微软则开源了分布式机器学习工具包DMTK,能够在较小的集群上以较高的效率完成大规模数据模型的训练,并于2016年7月推出了开源Project Malmo项目,用于人工智能训练。
4 交互能力
在国内,百度DuerOS 2.0,希望成为新标杆,阿里ET大脑又开启新征程。
国外
谷歌:正式TensorFlow Lite可在移动设备上运行深度学习
今年5月,在GoogleI/O开发者大会上,Google宣布了一个专门针对移动设备优化系统的TensorFlow新版本。11月,正式了TensorFlow Lite。
据了解,这款被称为TensorFlow Lite的软件库,是可在移动设备上运行的深度学习工具,它允许开发人员在用户的移动设备上实时运行人工智能应用。此外,自TensorFlow Lite正式公布以来,已经出现了多个安装在移动设备上具有类似功能的学习软件库,包括苹果的CoreML、Clarifai人工智能云端训练服务,以及华为Mate10使用的麒麟970人工智能处理器。
亚马逊:AWS re:Invent 2017大会AWS云推出新品EKS
11月,在亚马逊举办的AWS re:Invent 2017大会上,公司了22款新品,分别涉及计算能力、数据库、机器学习、智能硬件和IOT等领域,尤其是在计算能力、数据库方面对AWS云服务进行了升级。
其中,AWS云推出了新品EKS,是AWS云上托管的Kubernete容器服务,不仅兼容多云环境,还具备高可用性、自动部署,自主升级等优势,并可与AWS上其他服务集成,两个平台可无缝集成,在ECS中的应用同样可以使用AWS其它服务。
FB:Pytorch 0.3实现多方优化增加对ONNX支持
今年初,Facebook在机器学习和科学计算工具Torch的基础上,针对Python语言了一个全新的机器学习工具包PyTorch。日前,这款工具包又迎来了它的0.3.0版本,此版本增加了多个函数功能,多方面性能均有所提升。
其中,0.3版本中删掉了Variable.reinforce()等随机函数,用torch.distributions包来代替。新功能包括构建了一个in-built Profiler,能对模型进行瓶颈分析,同时支持CPU和CUDA模型;增加Higher order gradients模块;以及优化器中增加了add_param_group函数,能在构建好的优化器中增加新的参数组。除此之外,还增加了新的张量函数和功能,在新版本中,能通过ONNX将模型迁移到其他框架上。
IBM:强化AI实力Deep Learning Impact软件工具
11月,IBM公布了一款最新软件Deep Learning Impact,其帮助用户开发的AI模型可使用流行的开源、深度学习框架,例如TensorFlow和Caffee。12月,这款工具被添加到IBM的Spectrum Conductor软件中。
除了软件,IBM还推出了为AI量身定制的基于Power9处理器的新系统。据了解,该系统可以在Power9 CPU和硬件加速器(例如GPU和FPGA)之间加速传输数据。此外,Power9将成为首个片上支持最新高速连接器(包括Nvidia下一代NVLink、OpenCAPI 3.0和PCIe 4.0)的商用平台。
国内
百度:DuerOS 2.0搭载AI硬件渡鸦raven H树立新标杆
在今年的百度世界大会上,主打下一代人机交互的DuerOS迎来一次重大升级,推出了2.0版本。据官方资料,DuerOS 2.0主要带来了两个变化:其一,是小度智能设备开放平台的升级;其二,则是小度技能开放平台的全新。至此,基于语音交互,DuerOS形成了两个开放式平台,可以对接设备开发商、生态合作伙伴、线上线下服务提供商。
此外,百度世界大会上同时了人工智能硬件产品渡鸦raven H,这款产品通过搭载DuerOS 2.0,在功能和用户体验上树立了新的标杆。
腾讯:腾讯云正式Supermind用人工智能方式实现网络规划
11月,腾讯云正式SUPERMIND智能网络产品。据介绍,相比此前网络产品,SUPERMIND智能网络将拥有高性能、全球互联、智能化等三大特点。
据了解,用人工智能方式实现网络规划、建设以及运维的全流程,是腾讯云SUPERMIND网络产品最大的亮点。腾讯云SUPERMIND智能网络能够结合几万条线路特征智能规划,通过历史用量分析、网络路径分析、用户反馈分析、节点规划建议、专线扩容建议等方面,合理规划出网络建设路线,大幅缩短规划时间,节约时间成本。
阿里巴巴:ET大脑获世界互联网领先科技成果18强
自去年8月阿里巴巴推出ET大脑,一年多来已经被用来解决和探索社会经济发展当中依靠人脑所无法解决的棘手问题。据阿里巴巴集团CEO张勇介绍:“整个ET大脑有非常多的人工智能技术,不仅仅是机器视觉、语音识别、自然语言处理等单个的AI技术,更重要的是这些技术有机整体的实现和全局的突破。”
在11月举办的第三届世界互联网大会上,15项世界互联网领先科技成果同时,其中便包括ET大脑。获奖原因包括AI、云计算、大数据能力与垂直领域知识深度结合,以及在应方面,已广泛应用于城市治理、工业制造、社会安全等数十个垂直领域。
中国移动:移动网络业界首个AI平台“九天”
12月,中国移动面向业界首个AI平台“九天”。
据了解,该平台可以拆分出三个方面:第一方面,产品的应用服务,包括运营、连接、服务三大领域,旗下分别包括智能营销、智能决策、智能网络、智能物联以及智能客服等领域;第二方面,AI核心能力层可以将其处理的数据自主分为语音语言类型、图像识别类型等;第三方面,“九天”的深度学习平台是中国移动首款基于GPU的深度学习训练平台。
中科视拓:推出深度学习服务平台SeeTaaS将深度学习开发过程简化
10月,中科视拓推出一站式企业级深度学习平台SeeTaaS,主要用于研发人脸识别、手势识别、无人机视觉、视频结构化分析等在内的企业级解决方案。据了解,该平台可以提供深度学习相关的数据、算法、算力等服务,同时将深度学习的开发过程简化为:上传数据、选择算法、自动调参、输出训练模型、模型批量测试、模型跨平台部署等。
应用方面,中科视拓已与中国平安、中国航天科技、中国电信、华为、百度、三星、高通等企业达成合作。
EasyStack:推出全球首个同时支持GPU和FPGA开源云平台
在2017中国开源产业峰会暨第21届中国国际软件博览会分论坛上,EasyStack正式推出全球首个同时支持GPU和FPGA异构计算的人工智能开源云平台ESCould AI。