葉亞光
摘要:隨著人工智能的不斷發(fā)展,對于傳統(tǒng)領域提出了新的挑戰(zhàn)。在大數(shù)據(jù)時代,圖片和視頻信息的成倍增長,如何從這些信息中提取出我們“感興趣”的數(shù)據(jù),成了越來越多學者研究的重點。本文基于卷積神經(jīng)網(wǎng)絡,構建車輛圖像數(shù)據(jù)庫,參考當下計算機視覺領域新提出的GoogleNet網(wǎng)絡分類模型,修改NVDIA提出的Detection網(wǎng)絡部分層,調(diào)整學習率、激活函數(shù)等部分訓練參數(shù)和網(wǎng)絡結構,形成新的object detection網(wǎng)絡結構,提高對于圖像和視頻中車輛的識別率。
關鍵詞:深度學習;卷積神經(jīng)網(wǎng)絡;車輛識別
中圖分類號:TP311 文獻標識碼:A
文章編號:1009-3044(2019)10-0169-02
開放科學(資源服務)標識碼(OSID):
隨著社會的發(fā)展,人們的生活水平的提高,安全意識逐漸增大,城市中監(jiān)控系統(tǒng)的投入不斷增多,帶來了越來越多的視頻數(shù)據(jù)。從這些海量的視頻數(shù)據(jù)中找出有效且需要的數(shù)據(jù)需要投入大量的人力,那么能否利用計算機視覺領域的深度學習,通過前期大量有效的車輛標記數(shù)據(jù)進行訓練,建立識別車輛數(shù)據(jù)的神經(jīng)網(wǎng)絡,通過該神經(jīng)網(wǎng)絡代替人腦進行解讀視頻數(shù)據(jù),識別出有效的車輛數(shù)據(jù)。其中涉及有卷積神經(jīng)網(wǎng)絡及深度學習等相關內(nèi)容。
深度學習是一種特征學習方法,把原始數(shù)據(jù)通過簡單而非線性的模型轉(zhuǎn)變成更高層次、更抽象的表達。卷積神經(jīng)網(wǎng) 絡(CNN)具有提取反映數(shù)據(jù)本質(zhì)的隱性特征及可擴展性的優(yōu)越性能,可被用于幾乎全部的目標識別分類領域,例如交通信號識別、人臉識別、道路場景解析、圖像理解等。在車輛檢測方面,其區(qū)別于淺層學習的突出優(yōu)點之一在于算法的可擴展性,能夠進一步擴展識別交通環(huán)境中的多類目標。[2]
本文選用的神經(jīng)網(wǎng)絡為卷積神經(jīng)網(wǎng)絡,并在當下較流行的caffe深度學習框架,使用6G顯存的GTX1060顯卡,GPU模式,ubuntu16.04操作系統(tǒng),Python2.7語言等開發(fā)環(huán)境,進行視頻數(shù)據(jù)的車輛識別。經(jīng)實驗證明,該神經(jīng)網(wǎng)絡具識別速度快,準確度高等特點。
1 深度學習框架caffe篇
工欲善其事必先利其器,需要使用caffe學習框架,就需要從搭建caffe環(huán)境開始。搭建caffe環(huán)境分為以下幾個模塊,分別是Ubuntu、CUDA、cuDNN、OpenCV等。本文使用的操作系統(tǒng)為Ubuntu16.04LTS,需要注意的是,由于使用nvidia公司的GTX1060顯卡,先屏蔽操作系統(tǒng)自帶的顯卡驅(qū)動再上官網(wǎng)下載安裝對應的驅(qū)動程序。
本文使用的GPU訓練方式,由于需要提高訓練速度,需要安裝CUDA運算平臺和GPU加速庫,本文使用CUDA為8.0版本,cuDNN為7.2.1版本。OpenCV是一個基于BSD許可(開源)發(fā)行的跨平臺計算機視覺庫,在處理車輛數(shù)據(jù)時,需要使用到OPenCV的庫函數(shù),本文安裝的OPenCV版本為3.2.0。
以上環(huán)境都安裝齊全的條件下,安裝caffe學習框架,本文使用nvcaffe版本,由于caffe需要使用到各種庫函數(shù),根據(jù)個人經(jīng)驗,py語言提供強大的庫函數(shù),能夠滿足caffe的需求。本文使用的2.7版的python語言。
2 數(shù)據(jù)標注及訓練篇
本文采用半監(jiān)督學習的方式進行車輛數(shù)據(jù)的訓練,那么就需要告訴電腦什么是車輛。本文參考KITTI數(shù)據(jù)集格式及結合數(shù)據(jù)集標記軟件對車輛數(shù)據(jù)進行標記形成實驗所需要用到的車輛數(shù)據(jù)集。
本文采用nvidia公司的digits工具進行數(shù)據(jù)集的生成和網(wǎng)絡的訓練。通過數(shù)據(jù)集生成功能模塊,將標記數(shù)據(jù)集生成LMDB格式數(shù)據(jù)。再由分類器googlenet和修改后的Detection卷積網(wǎng)絡對數(shù)據(jù)集(LMDB)進行訓練,通過調(diào)整學習率等參數(shù),得到30次迭代訓練后的結果。選擇識別度較高的網(wǎng)絡結構文件和權重文件,用于之后測試使用。
由于卷積神經(jīng)網(wǎng)絡在模型訓練時耗時較長,利用樣本反饋在線更新網(wǎng)絡模型難度大,且實時性效果差等缺點。因而本文的做法是提前對網(wǎng)絡模型進行訓練,不實施在線更新。模型訓練完成后,直接將模型帶入到測試程序框架中,以檢測的方式完成對每一張圖片里的車輛識別。模型檢測的結果會計算出目標的預測位置。[3]
3 網(wǎng)絡模型結構篇
本文采用GoogleNET網(wǎng)絡模型作為基礎,修改網(wǎng)絡部分層,實現(xiàn)對車輛數(shù)據(jù)的識別。本文的卷積神經(jīng)網(wǎng)絡結構為數(shù)據(jù)輸入層、Slice層,卷積層、python層、池化層、激活函數(shù)層、LOSS層、dropout層等多層次結構。
卷積層根據(jù)需要設置卷積核的個數(shù)、卷積核的大小、卷積核的步長、權值初始化、偏置項的初始化、擴充邊緣等參數(shù)。池化層采用MAX池化方式,根據(jù)各層需要修改kernel_size和stride參數(shù)。
根據(jù)AlexNet的論文,本文使用的激活函數(shù)層大部分激活函數(shù)使用ReLU類型,小部分激活函數(shù)使用Sigmoid類型。Relu激活函數(shù)(The Rectified Linear Unit)表達式為:f(x)=max(0,x)f(x)=max(0,x)。相比sigmoid和tanh函數(shù),Relu激活函數(shù)的優(yōu)點在于:
1)梯度不飽和。梯度計算公式為:1{x>0}1{x>0}。因此在反向傳播過程中,減輕了梯度彌散的問題,神經(jīng)網(wǎng)絡前幾層的參數(shù)也可以很快的更新。
2)計算速度快。正向傳播過程中,sigmoid函數(shù)計算激活值時需要計算指數(shù),而Relu函數(shù)僅需要設置閾值。如果x<0,f(x)=0x<0,f(x)=0,如果x>0,f(x)=xx>0,f(x)=x。加快了正向傳播的計算速度。因此,Relu激活函數(shù)可以極大地加快收斂速度。
在python層中,根據(jù)需要自定義編寫自己的目標識別框,使用caffe.layers.detectnet.clustering模塊并設置param_str參數(shù)。將偵測目標的位置用矩形框編出來,bbox-list表示相對1248*384偵測到的目標座標。
4 實驗結果篇
經(jīng)過30次迭代計算,將30次訓練生成的loss_bbox率和loss_covarage率以圖表的形式表示。實驗結果表明,第30次迭代計算,有較低的loss_bbox率和loss_covarage率。接下來,自己用python2.7語言編寫demo.py,通過import caffe語句導入caffe模塊,通過detection(img, net, transformer)函數(shù),用該模型對測試圖片進行目標偵測,查看是否能準確地將車輛數(shù)據(jù)標記出來。
5 結束語
隨著技術的發(fā)展,越來越多的深度學習開源框架展現(xiàn)在我們面前,例如Tensorflow,Torch等。這些工具不僅性能優(yōu)異而且可以使用在小型開發(fā)版上,更適合嵌入式深度學習應用。更為重要的是,使用這些框架訓練得到的模型可以直接高效地部署到交通和安防等應用領域中,促進物聯(lián)網(wǎng)技術的發(fā)展,不斷提高國家信息化水平。
參考文獻:
[1] 蔡英鳳,王海,陳龍,等.采用視覺顯著性和深度卷積網(wǎng)絡的魯棒視覺車輛識別算法[J].清華大學學報:自然科學版,2015,36(3):333-336.
[2] 李琳輝,倫智梅,連靜,等.基于卷積神經(jīng)網(wǎng)絡的道路車輛檢測方法[J].吉林大學學報:工學版,2017,47(2):385-391.
[3] 閔召陽,趙文杰.基于卷積神經(jīng)網(wǎng)絡檢測的單鏡頭多目標跟蹤算法[J].艦船電子工程,2017,37(12):25-28.
【通聯(lián)編輯:唐一東】