前言:一篇好文章的誕生,需要你不斷地搜集資料、整理思路,本站小編為你收集了豐富的卷積神經網絡的深度主題范文,僅供參考,歡迎閱讀并收藏。
(江蘇科技大學電子信息學院,江蘇鎮江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。