手機(jī)ADAS:基于OpenCL的車道線檢測(cè)應(yīng)用評(píng)估(車道線檢測(cè)opencv)
朱 笛,張文權(quán),蔡 行,黃 凱
(中山大學(xué) 數(shù)據(jù)科學(xué)與計(jì)算機(jī)學(xué)院 無人系統(tǒng)研究所,廣東 廣州510006)
先進(jìn)駕駛輔助系統(tǒng)(Advanced Driving Assistant System,ADAS)有利于提高駕駛安全性。如今,Open Computing Language(OpenCL)框架以及集成Graphics Processing Unit(GPU)手機(jī)的出現(xiàn),使得在手機(jī)上高效運(yùn)行ADAS應(yīng)用成為可能?;贠penCL框架實(shí)現(xiàn)了ADAS最典型的一個(gè)功能——車道線檢測(cè),并運(yùn)行在三款手機(jī)上。通過比較該應(yīng)用的檢測(cè)準(zhǔn)確度、幀處理速度、應(yīng)用能效,根據(jù)實(shí)驗(yàn)結(jié)果手機(jī)設(shè)備非常適合運(yùn)行基于視覺的ADAS應(yīng)用。
ADAS;手機(jī);OpenCL;車道線檢測(cè)
中圖分類號(hào):TN919;U463.6
文獻(xiàn)標(biāo)識(shí)碼:A
DOI:10.16157/j.issn.0258-7998.2017.04.001
中文引用格式:朱笛,張文權(quán),蔡行,等. 手機(jī)ADAS:基于OpenCL的車道線檢測(cè)應(yīng)用評(píng)估[J].電子技術(shù)應(yīng)用,2017,43(4):3-6,12.
英文引用格式:Zhu Di,Zhang Wenquan,Cai Xing,et al. Mobile ADAS: an evaluation on OpenCL based lane detect application[J].Application of Electronic Technique,2017,43(4):3-6,12.
0 引言
先進(jìn)駕駛輔助系統(tǒng)(Advancend Driving Assistant System,ADAS)常用于提高駕駛體驗(yàn)以及駕駛安全性,例如自適應(yīng)定速巡航系統(tǒng)[1]與智能速度調(diào)節(jié)系統(tǒng)[2]能有效減少司機(jī)的勞動(dòng)以及交通事故。由于ADAS對(duì)計(jì)算能力需求較高,通常運(yùn)行在特殊的處理單元中,這類車載電子設(shè)備行業(yè)中分為車載前裝、后裝。其中后裝市場(chǎng)中的Mobileye,能提示司機(jī)車道偏離以及提示車距過近。盡管在過去數(shù)十年里,ADAS技術(shù)高速發(fā)展[3],各類前裝、后裝ADAS產(chǎn)品的價(jià)格仍然是個(gè)大問題。
如今,移動(dòng)設(shè)備計(jì)算能力的高速發(fā)展以及GPU在手機(jī)片上系統(tǒng)(System on Chip,SoC)上的集成使得在手機(jī)上運(yùn)行高計(jì)算需求的任務(wù)成為可能[4-5]。此外,智能手機(jī)配置的高清相機(jī)以及便于交互的觸摸屏,以及其低廉的價(jià)格,非常適合運(yùn)行基于視覺的手機(jī)ADAS應(yīng)用[6]。不僅如此,在高通即將發(fā)布的驍龍835 SoC上已經(jīng)支持Tensorflow機(jī)器學(xué)習(xí)框架,能通過手機(jī)運(yùn)行基于深度學(xué)習(xí)的ADAS應(yīng)用。
目前,業(yè)界主要使用FPGA以及GPU的并行能力,加速科學(xué)計(jì)算。在業(yè)界,主要包括Nvidia支持的CUDA以及OpenCL兩個(gè)計(jì)算框架。相較于CUDA只支持在Nvidia的顯卡上運(yùn)行,OpenCL框架提供了異構(gòu)并行計(jì)算的解決方案,其中包括FPGA、GPU、CPU,尤其是其支持手機(jī)GPU。按照OpenCL API編寫的內(nèi)核函數(shù),能在處理核心(如:GPU、FPGA等設(shè)備)上并行運(yùn)行。通過OpenCL框架,能充分利用手機(jī)GPU進(jìn)行異構(gòu)并行計(jì)算[7-9],進(jìn)而高效運(yùn)行部分基于視覺的ADAS應(yīng)用。雖然iOS上的Metal框架與OpenCL比較類似,但目前而言,只有安卓系統(tǒng)支持基于OpenCL的應(yīng)用。
基于性能評(píng)估的需要,本文選擇了3款手機(jī),分別為:小米5(Mi 5)、紅米Note2(Redmi Note 2)、華為榮耀6(Honor 6)。這三款手機(jī)囊括了市面上常見的SoC廠商(高通、聯(lián)發(fā)科、華為),均集成了支持OpenCL的GPU;同時(shí),這三款手機(jī)均位于1 000~2 000人民幣的區(qū)間,能表現(xiàn)手機(jī)ADAS的價(jià)格低、實(shí)用的特點(diǎn)。
1 安卓應(yīng)用設(shè)計(jì)與優(yōu)化
本文及本應(yīng)用中所使用的車道線檢測(cè)算法來自文獻(xiàn)[10,11],此處不再贅述。選擇上述算法的原因如下:(1)并行性:上述算法主要基于粒子濾波,在預(yù)處理、車道線檢測(cè)、車道下跟蹤的過程都可并行化處理;(2)可調(diào)性:該算法對(duì)于車道線檢測(cè)的準(zhǔn)確度可通過粒子濾波的粒子數(shù)、采樣數(shù)等參數(shù)調(diào)節(jié)。在手機(jī)上運(yùn)行時(shí),可以基于手機(jī)配置調(diào)節(jié)車道線檢測(cè)的精度與效率。在該車道線檢測(cè)算法中,包括兩個(gè)調(diào)節(jié)參數(shù):Np,粒子濾波中粒子的數(shù)量;Nc,粒子濾波中重采樣過程中候選線的數(shù)量。通常而言,Np與Nc越大,車道檢測(cè)的準(zhǔn)確率就越高,但也意味著更高的計(jì)算量、更多的計(jì)算時(shí)間。
1.1 應(yīng)用設(shè)計(jì)
為了對(duì)比實(shí)驗(yàn)的需要,需要為本應(yīng)用提供CPU運(yùn)行模式以及CPU-GPU運(yùn)行模式。分別表示車道線算法單純運(yùn)行在手機(jī)CPU上;車道線算法通過OpenCL框架,運(yùn)行在GPU上進(jìn)行并行加速。
為了在安卓手機(jī)上使用基于C/C 的OpenCL框架,在應(yīng)用開發(fā)時(shí)需要使用Java原生接口(Java Native Interface,JNI)。開發(fā)工具包括Eclipse與安卓原生開發(fā)套件(Android Native Develop Kit, NDK)。首先,通過開放計(jì)算語言(Open Computing Language,OpenCL)框架與開放計(jì)算機(jī)視覺(Open Computer Vsion,OpenCV)編寫車道線檢測(cè)的C/C 代碼;再使用NDK對(duì)其進(jìn)行編譯;再于編寫安卓應(yīng)用時(shí),通過JNI調(diào)用上述編譯好的C/C 內(nèi)核函數(shù)。在運(yùn)行該應(yīng)用之前需要安裝OpenCV4Android到手機(jī)上,以提供OpenCV的庫文件。對(duì)于本OpenCL安卓應(yīng)用運(yùn)行描述,如文獻(xiàn)[12]所示,應(yīng)用從Java代碼端開始,通過JNI調(diào)用執(zhí)行C/C 代碼,進(jìn)一步調(diào)用OpenCL框架的函數(shù),完成初始化過程,再次返回C/C 層進(jìn)行數(shù)據(jù)的填充,隨后通過GPGPU驅(qū)動(dòng)交由手機(jī)GPU進(jìn)行計(jì)算,最后返回結(jié)果至Java層供進(jìn)一步使用(主要是在屏幕上顯示)。
1.2 應(yīng)用優(yōu)化
由于上述車道線檢測(cè)算法,主要用于桌面級(jí)平臺(tái),將其移植至移動(dòng)平臺(tái)后,針對(duì)手機(jī)計(jì)算能力以及內(nèi)存較小的特點(diǎn),進(jìn)行了針對(duì)優(yōu)化。
在OpenCL框架中,工作組大小,亦即數(shù)據(jù)分割程度,與多處理核心的利用率直接相關(guān)[13],在本應(yīng)用中,針對(duì)各家手機(jī)GPU廠商的特點(diǎn),對(duì)工作組大小進(jìn)行優(yōu)化。其中根據(jù)Imagination與Mali公司的指引,工作組大小為128或256時(shí),能充分利用處理核心的性能[14-15]。通過實(shí)驗(yàn),發(fā)現(xiàn)在三款手機(jī)中工作組為128與256時(shí),三家廠商SoC的處理時(shí)間均較低,而榮耀6在工作組為256時(shí),處理時(shí)間反而上升了,如圖1所示。為了兼容更多的硬件,本文選擇128作為工作組大小。
在手機(jī)平臺(tái)上,內(nèi)存的大小與帶寬均低于桌面級(jí)平臺(tái)[16]。然而,相較于桌面級(jí)平臺(tái)GPU擁有獨(dú)自的內(nèi)存,手機(jī)GPU與CPU共享集成在SoC上的內(nèi)存。在桌面級(jí)GPU運(yùn)行OpenCL與CUDA時(shí),將數(shù)據(jù)從主內(nèi)存拷貝到顯卡內(nèi)存進(jìn)行運(yùn)算,再將結(jié)果從顯卡內(nèi)存拷貝回主內(nèi)存中,即需要內(nèi)存拷貝操作。為了充分利用手機(jī)SoC片上內(nèi)存的特點(diǎn),通過內(nèi)存映射的機(jī)制,即通過“map”與“unmap”操作,將部分片上內(nèi)存的擁有者分配為GPU或CPU。通過這種方式,使用內(nèi)存映射而不是內(nèi)存拷貝的機(jī)制,將圖片數(shù)據(jù)從CPU的片上內(nèi)存映射到OpenCL的內(nèi)核中,并將OpenCL車道線檢測(cè)運(yùn)算的結(jié)果,映射回CPU,實(shí)現(xiàn)零拷貝。在手機(jī)上使用內(nèi)存拷貝與內(nèi)存映射機(jī)制時(shí)處理幀率如圖2所示,圖中,橫坐標(biāo)為粒子數(shù)Np,縱坐標(biāo)為幀每秒;對(duì)于Np<=29,Nc=29,否則Nc=212。使用內(nèi)存映射機(jī)制各幀的處理速度更為穩(wěn)定,并且明顯高于使用內(nèi)存拷貝機(jī)制。
所以本文通過修改合適工作組以及使用內(nèi)存映射代替內(nèi)存拷貝的機(jī)制,對(duì)上述的車道線檢測(cè)算法進(jìn)行優(yōu)化。
2 實(shí)驗(yàn)結(jié)果
如上文引言所述,在上述三款手機(jī)上,進(jìn)行了對(duì)比實(shí)驗(yàn)。其硬件配置如表1所示,囊括了中國市場(chǎng)上三家SoC廠商的系列:高通驍龍、聯(lián)發(fā)科、華為海思。同時(shí),這也涵蓋了三大手機(jī)GPU IP核提供商:高通、Imagination、ARM。同時(shí),這三款GPU都提供了對(duì)OpenCL的支持,其中高通Adreno 530完整地支持OpenCL 2.0,Imagination PowerVR G6200支持嵌入式OpenCL 1.2,ARM Mali T628 MP4完整地支持OpenCL 1.1。不同版本OpenCL對(duì)于部分?jǐn)?shù)據(jù)類型有優(yōu)化,此處以O(shè)penCL 1.1版本的特性為準(zhǔn)。同時(shí),這三款手機(jī)的電池容量也相近。實(shí)驗(yàn)過程中,使用本文實(shí)現(xiàn)的基于OpenCL的車道線檢測(cè),對(duì)性能與能耗進(jìn)行比較。
2.1 精確度與幀率
精確度是車道線檢測(cè)的基本要求,該車道線檢測(cè)算法使用不同調(diào)節(jié)參數(shù)Np、Nc時(shí)對(duì)應(yīng)的準(zhǔn)確度已經(jīng)在FPGA以及桌面級(jí)GPU上已經(jīng)檢測(cè)過了[10],此處通過判斷不同粒子數(shù)Np下,各手機(jī)的車道線檢測(cè)幀率是否滿足使用需求。同時(shí),也比較了不同CPU模式以及CPU-GPU模式(即使用OpenCL框架進(jìn)行并行加速)下的情況,如圖3所示,圖中,橫坐標(biāo)為粒子數(shù)Np,縱坐標(biāo)為幀每秒;對(duì)于Np<=29,Nc=29,否則Nc=212。可以發(fā)現(xiàn),在最高效果Np=8×29,Nc=212時(shí),在CPU-GPU模式下,除了紅米Note2約30 fps以外,另外兩款平臺(tái)均在40 fps以上,幀率最多降低了33%;而CPU模式均明顯低于20 fps,幀率降低了約67%。對(duì)于沒有使用GPU并行計(jì)算的GPU模式而言,下降十分顯著??梢奜penCL并行計(jì)算框架在高計(jì)算量時(shí),加速效果十分顯著。此外,Np=27,Nc=29時(shí),能滿足日常使用需求[10],此時(shí),CPU模式與CPU-GPU模式處理速度均在40 fps以上。故該車道線檢測(cè)應(yīng)用在滿足精度要求的情況下,仍然能夠高速地運(yùn)行,同時(shí),使用OpenCL并行加速的CPU-GPU模式能在高精度要求的情況下高速運(yùn)行。
2.2 能耗統(tǒng)計(jì)與分布
若使用手機(jī)ADAS進(jìn)行駕駛輔助耗電量很大的話,用戶無法忍受下車的時(shí)候手機(jī)電量所剩無幾,所以該車道線應(yīng)用對(duì)續(xù)航的影響是個(gè)很重要的問題。對(duì)此,對(duì)本車道線檢測(cè)應(yīng)用進(jìn)行了電量消耗測(cè)試。為了盡可能地控制變量,如上文所述,本文選擇的三款平臺(tái)電池容量相當(dāng),約3 000 mAh??紤]到電池老化問題,選擇了三臺(tái)全新的手機(jī)進(jìn)行實(shí)驗(yàn)。為了模擬在車上使用本手機(jī)ADAS應(yīng)用進(jìn)行車道線檢測(cè)的環(huán)境,通過屏幕播放行車記錄儀的數(shù)據(jù),分別使用三臺(tái)手機(jī)分別在CPU模式下、CPU-GPU模式下,使用手機(jī)攝像頭獲取圖像進(jìn)行車道線檢測(cè),并記錄電池使用時(shí)間。實(shí)驗(yàn)過程中無其他后臺(tái)程序,車道線檢測(cè)參數(shù)為Np=27,Nc=29,同時(shí)三臺(tái)手機(jī)屏幕的亮度均調(diào)至最高。其運(yùn)行結(jié)果如圖4所示,能發(fā)現(xiàn),基本上都能在屏幕亮度最高的情況下使用2.5 h以上。同時(shí),使用OpenCL加速在高通驍龍與華為海思兩款SoC上增加0.5 h使用電量,而對(duì)于紅米Note2兩個(gè)模式的電池使用時(shí)間都較為接近。
其中,三款手機(jī)兩個(gè)模式下的能耗分布如表2所示,數(shù)據(jù)來源于安卓系統(tǒng)提供的電池使用情況。能夠發(fā)現(xiàn),使用OpenCL框架進(jìn)行并行計(jì)算的CPU-GPU模式,應(yīng)用所消耗電量低于單純使用CPU計(jì)算的CPU模式。即,在本車道線檢測(cè)應(yīng)用中,使用OpenCL框架加速,也能降低電量的使用。在實(shí)際車上應(yīng)用該手機(jī)ADAS時(shí),還可以通過降低屏幕亮度以及使用車載電源充電的方式,延長電池使用時(shí)間,保障手機(jī)用戶的體驗(yàn)。
3 結(jié)論
本文在安卓平臺(tái)上使用了OpenCL框架,實(shí)現(xiàn)了車道線檢測(cè)的手機(jī)ADAS應(yīng)用。根據(jù)三款支持OpenCL框架的手機(jī)的實(shí)驗(yàn)結(jié)果,手機(jī)能提供足夠計(jì)算性能以及續(xù)航能力用于車道線檢測(cè)。如今移動(dòng)安卓手機(jī)已經(jīng)集成了高性能的SoC以及高分辨率的相機(jī),十分適合基于視覺的ADAS手機(jī)應(yīng)用。市面上也有部分雙攝像頭的手機(jī),未來或許可應(yīng)用基于雙目視覺的ADAS應(yīng)用。不僅如此,隨著支持Tensorflow深度學(xué)習(xí)框架的驍龍835的上市,手機(jī)上將有更多支持深度學(xué)習(xí)的硬件集成。在不久的將來,將可以看到基于深度學(xué)習(xí)的ADAS應(yīng)用運(yùn)行在手機(jī)上。
參考文獻(xiàn)
[1] JURGEN R K.Adaptive cruise control[J].Automotive News Europe,2005,55(6):1943-1947.
[2] VAHIDI A,ESKANDARIAN A.Research advances in intel-ligent collision avoidance and adaptive cruise control[J].IEEE Transactions on Intelligent Transportation Systems,2003,4(3):143-153.
[3] BERNHART W,WINTERHOFF M.Autonomous driving: disruptive innovation that promises to change the automotive industry as we know[C].Energy Consumption and Autonomous Driving,2016,16(6):3-10.
[4] HEWENER H,TRETBAR S.Mobile ultrafast ultrasound imaging system based on smartphone and tablet devices[C].Ultrasonics Symposium.IEEE,2015:1-4.
[5] THABET R,MAHMOUDI R,BEDOUI M H.Image processing on mobile devices:An overview[C].Image Processing,Applications and Systems Conference.IEEE,2014:1-8.
[6] PETROVAI A,DANESCU R,NEDEVSCHI S.A stereovision based approach for detecting and tracking lane and forward obstacles on mobile devices[C].Intelligent Vehicles Symposium.IEEE,2015:634-641.
[7] ROSS J A,RICHIE D A,PARK S J,et al.A case study of OpenCL on an Android mobile GPU[C].High Performance Extreme Computing Conference.IEEE,2014:1-6.
[8] BACKES L,RICO A,F(xiàn)RANKE B.Experiences in speeding up computer vision applications on mobile computing platforms[C].International Conference on Embedded Computer Systems:Architectures,Modeling,and Simulation.IEEE,2015:1-8.
[9] WANG G,XIONG Y,YUN J,et al.Accelerating computer vision algorithms using OpenCL framework on the mobile GPU-A case study[C].IEEE International Conference on Acoustics,Speech and Signal Processing.IEEE,2013:2629-2633.
[10] HUANG K,HU B,BOTSCH J,et al.A scalable lane detection algorithm on COTSs with OpenCL[C].Design,Automation & Test in Europe Conference & Exhibition.IEEE,2016:229-232.
[11] ACOSTA A,ALMEIDA F.Parallel Implementations of the Particle Filter Algorithm for Android Mobile Devices[C].Euromicro International Conference on Parallel,Distributed and Network-Based Processing.IEEE,2015:244-247.
[12] KO Y,YI S,YI Y,et al.Hardware-in-the-loop simulation of Android GPGPU applications[C].Embedded Systems for Real-time Multimedia,IEEE,2014.
[13] ANDARGIE F A,ROSE J.Performance characterization of mobile GP-GPUs[C].AFRICON.IEEE,2015:1-6.
[14] Berkeley Design Technology Institute,Implementing computer vision functions with opencl on the qualcomm adreno 420[DB/OL]. [2017-02-28]http://www.bdti.com/MyBDTI/pubs/ComputerVision_OpenCL_Adreno420.pdf.
[15] Imagination Technology Limited,Building Heterogeneous Systems with PowerVR OpenCL Programmers Reference[DB/OL].[2017-02-28].https://www.imgtec.com/down-loads/building-heterogeneous-systems-with-powervr-opencl-programmers-reference/.
[16] LEE J K,LEE J Y.Android programming techniques for improving performance[C].Awareness Science and Techno-logy(iCAST),2011 3rd International Conference on.IEEE,2011:386-389.