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