文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2017.04.001
中文引用格式: 朱笛,張文權(quán),蔡行,等. 手機ADAS:基于OpenCL的車道線檢測應(yī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 引言
先進駕駛輔助系統(tǒng)(Advancend Driving Assistant System,ADAS)常用于提高駕駛體驗以及駕駛安全性,例如自適應(yīng)定速巡航系統(tǒng)[1]與智能速度調(diào)節(jié)系統(tǒng)[2]能有效減少司機的勞動以及交通事故。由于ADAS對計算能力需求較高,通常運行在特殊的處理單元中,這類車載電子設(shè)備行業(yè)中分為車載前裝、后裝。其中后裝市場中的Mobileye,能提示司機車道偏離以及提示車距過近。盡管在過去數(shù)十年里,ADAS技術(shù)高速發(fā)展[3],各類前裝、后裝ADAS產(chǎn)品的價格仍然是個大問題。
如今,移動設(shè)備計算能力的高速發(fā)展以及GPU在手機片上系統(tǒng)(System on Chip,SoC)上的集成使得在手機上運行高計算需求的任務(wù)成為可能[4-5]。此外,智能手機配置的高清相機以及便于交互的觸摸屏,以及其低廉的價格,非常適合運行基于視覺的手機ADAS應(yīng)用[6]。不僅如此,在高通即將發(fā)布的驍龍835 SoC上已經(jīng)支持Tensorflow機器學(xué)習(xí)框架,能通過手機運行基于深度學(xué)習(xí)的ADAS應(yīng)用。
目前,業(yè)界主要使用FPGA以及GPU的并行能力,加速科學(xué)計算。在業(yè)界,主要包括Nvidia支持的CUDA以及OpenCL兩個計算框架。相較于CUDA只支持在Nvidia的顯卡上運行,OpenCL框架提供了異構(gòu)并行計算的解決方案,其中包括FPGA、GPU、CPU,尤其是其支持手機GPU。按照OpenCL API編寫的內(nèi)核函數(shù),能在處理核心(如:GPU、FPGA等設(shè)備)上并行運行。通過OpenCL框架,能充分利用手機GPU進行異構(gòu)并行計算[7-9],進而高效運行部分基于視覺的ADAS應(yīng)用。雖然iOS上的Metal框架與OpenCL比較類似,但目前而言,只有安卓系統(tǒng)支持基于OpenCL的應(yīng)用。
基于性能評估的需要,本文選擇了3款手機,分別為:小米5(Mi 5)、紅米Note2(Redmi Note 2)、華為榮耀6(Honor 6)。這三款手機囊括了市面上常見的SoC廠商(高通、聯(lián)發(fā)科、華為),均集成了支持OpenCL的GPU;同時,這三款手機均位于1 000~2 000人民幣的區(qū)間,能表現(xiàn)手機ADAS的價格低、實用的特點。
1 安卓應(yīng)用設(shè)計與優(yōu)化
本文及本應(yīng)用中所使用的車道線檢測算法來自文獻[10,11],此處不再贅述。選擇上述算法的原因如下:(1)并行性:上述算法主要基于粒子濾波,在預(yù)處理、車道線檢測、車道下跟蹤的過程都可并行化處理;(2)可調(diào)性:該算法對于車道線檢測的準確度可通過粒子濾波的粒子數(shù)、采樣數(shù)等參數(shù)調(diào)節(jié)。在手機上運行時,可以基于手機配置調(diào)節(jié)車道線檢測的精度與效率。在該車道線檢測算法中,包括兩個調(diào)節(jié)參數(shù):Np,粒子濾波中粒子的數(shù)量;Nc,粒子濾波中重采樣過程中候選線的數(shù)量。通常而言,Np與Nc越大,車道檢測的準確率就越高,但也意味著更高的計算量、更多的計算時間。
1.1 應(yīng)用設(shè)計
為了對比實驗的需要,需要為本應(yīng)用提供CPU運行模式以及CPU-GPU運行模式。分別表示車道線算法單純運行在手機CPU上;車道線算法通過OpenCL框架,運行在GPU上進行并行加速。
為了在安卓手機上使用基于C/C++的OpenCL框架,在應(yīng)用開發(fā)時需要使用Java原生接口(Java Native Interface,JNI)。開發(fā)工具包括Eclipse與安卓原生開發(fā)套件(Android Native Develop Kit, NDK)。首先,通過開放計算語言(Open Computing Language,OpenCL)框架與開放計算機視覺(Open Computer Vsion,OpenCV)編寫車道線檢測的C/C++代碼;再使用NDK對其進行編譯;再于編寫安卓應(yīng)用時,通過JNI調(diào)用上述編譯好的C/C++內(nèi)核函數(shù)。在運行該應(yīng)用之前需要安裝OpenCV4Android到手機上,以提供OpenCV的庫文件。對于本OpenCL安卓應(yīng)用運行描述,如文獻[12]所示,應(yīng)用從Java代碼端開始,通過JNI調(diào)用執(zhí)行C/C++代碼,進一步調(diào)用OpenCL框架的函數(shù),完成初始化過程,再次返回C/C++層進行數(shù)據(jù)的填充,隨后通過GPGPU驅(qū)動交由手機GPU進行計算,最后返回結(jié)果至Java層供進一步使用(主要是在屏幕上顯示)。
1.2 應(yīng)用優(yōu)化
由于上述車道線檢測算法,主要用于桌面級平臺,將其移植至移動平臺后,針對手機計算能力以及內(nèi)存較小的特點,進行了針對優(yōu)化。
在OpenCL框架中,工作組大小,亦即數(shù)據(jù)分割程度,與多處理核心的利用率直接相關(guān)[13],在本應(yīng)用中,針對各家手機GPU廠商的特點,對工作組大小進行優(yōu)化。其中根據(jù)Imagination與Mali公司的指引,工作組大小為128或256時,能充分利用處理核心的性能[14-15]。通過實驗,發(fā)現(xiàn)在三款手機中工作組為128與256時,三家廠商SoC的處理時間均較低,而榮耀6在工作組為256時,處理時間反而上升了,如圖1所示。為了兼容更多的硬件,本文選擇128作為工作組大小。
在手機平臺上,內(nèi)存的大小與帶寬均低于桌面級平臺[16]。然而,相較于桌面級平臺GPU擁有獨自的內(nèi)存,手機GPU與CPU共享集成在SoC上的內(nèi)存。在桌面級GPU運行OpenCL與CUDA時,將數(shù)據(jù)從主內(nèi)存拷貝到顯卡內(nèi)存進行運算,再將結(jié)果從顯卡內(nèi)存拷貝回主內(nèi)存中,即需要內(nèi)存拷貝操作。為了充分利用手機SoC片上內(nèi)存的特點,通過內(nèi)存映射的機制,即通過“map()”與“unmap()”操作,將部分片上內(nèi)存的擁有者分配為GPU或CPU。通過這種方式,使用內(nèi)存映射而不是內(nèi)存拷貝的機制,將圖片數(shù)據(jù)從CPU的片上內(nèi)存映射到OpenCL的內(nèi)核中,并將OpenCL車道線檢測運算的結(jié)果,映射回CPU,實現(xiàn)零拷貝。在手機上使用內(nèi)存拷貝與內(nèi)存映射機制時處理幀率如圖2所示,圖中,橫坐標為粒子數(shù)Np,縱坐標為幀每秒;對于Np<=29,Nc=29,否則Nc=212。使用內(nèi)存映射機制各幀的處理速度更為穩(wěn)定,并且明顯高于使用內(nèi)存拷貝機制。
所以本文通過修改合適工作組以及使用內(nèi)存映射代替內(nèi)存拷貝的機制,對上述的車道線檢測算法進行優(yōu)化。
2 實驗結(jié)果
如上文引言所述,在上述三款手機上,進行了對比實驗。其硬件配置如表1所示,囊括了中國市場上三家SoC廠商的系列:高通驍龍、聯(lián)發(fā)科、華為海思。同時,這也涵蓋了三大手機GPU IP核提供商:高通、Imagination、ARM。同時,這三款GPU都提供了對OpenCL的支持,其中高通Adreno 530完整地支持OpenCL 2.0,Imagination PowerVR G6200支持嵌入式OpenCL 1.2,ARM Mali T628 MP4完整地支持OpenCL 1.1。不同版本OpenCL對于部分數(shù)據(jù)類型有優(yōu)化,此處以O(shè)penCL 1.1版本的特性為準。同時,這三款手機的電池容量也相近。實驗過程中,使用本文實現(xiàn)的基于OpenCL的車道線檢測,對性能與能耗進行比較。
2.1 精確度與幀率
精確度是車道線檢測的基本要求,該車道線檢測算法使用不同調(diào)節(jié)參數(shù)Np、Nc時對應(yīng)的準確度已經(jīng)在FPGA以及桌面級GPU上已經(jīng)檢測過了[10],此處通過判斷不同粒子數(shù)Np下,各手機的車道線檢測幀率是否滿足使用需求。同時,也比較了不同CPU模式以及CPU-GPU模式(即使用OpenCL框架進行并行加速)下的情況,如圖3所示,圖中,橫坐標為粒子數(shù)Np,縱坐標為幀每秒;對于Np<=29,Nc=29,否則Nc=212??梢园l(fā)現(xiàn),在最高效果Np=8×29,Nc=212時,在CPU-GPU模式下,除了紅米Note2約30 fps以外,另外兩款平臺均在40 fps以上,幀率最多降低了33%;而CPU模式均明顯低于20 fps,幀率降低了約67%。對于沒有使用GPU并行計算的GPU模式而言,下降十分顯著。可見OpenCL并行計算框架在高計算量時,加速效果十分顯著。此外,Np=27,Nc=29時,能滿足日常使用需求[10],此時,CPU模式與CPU-GPU模式處理速度均在40 fps以上。故該車道線檢測應(yīng)用在滿足精度要求的情況下,仍然能夠高速地運行,同時,使用OpenCL并行加速的CPU-GPU模式能在高精度要求的情況下高速運行。
2.2 能耗統(tǒng)計與分布
若使用手機ADAS進行駕駛輔助耗電量很大的話,用戶無法忍受下車的時候手機電量所剩無幾,所以該車道線應(yīng)用對續(xù)航的影響是個很重要的問題。對此,對本車道線檢測應(yīng)用進行了電量消耗測試。為了盡可能地控制變量,如上文所述,本文選擇的三款平臺電池容量相當,約3 000 mAh。考慮到電池老化問題,選擇了三臺全新的手機進行實驗。為了模擬在車上使用本手機ADAS應(yīng)用進行車道線檢測的環(huán)境,通過屏幕播放行車記錄儀的數(shù)據(jù),分別使用三臺手機分別在CPU模式下、CPU-GPU模式下,使用手機攝像頭獲取圖像進行車道線檢測,并記錄電池使用時間。實驗過程中無其他后臺程序,車道線檢測參數(shù)為Np=27,Nc=29,同時三臺手機屏幕的亮度均調(diào)至最高。其運行結(jié)果如圖4所示,能發(fā)現(xiàn),基本上都能在屏幕亮度最高的情況下使用2.5 h以上。同時,使用OpenCL加速在高通驍龍與華為海思兩款SoC上增加0.5 h使用電量,而對于紅米Note2兩個模式的電池使用時間都較為接近。
其中,三款手機兩個模式下的能耗分布如表2所示,數(shù)據(jù)來源于安卓系統(tǒng)提供的電池使用情況。能夠發(fā)現(xiàn),使用OpenCL框架進行并行計算的CPU-GPU模式,應(yīng)用所消耗電量低于單純使用CPU計算的CPU模式。即,在本車道線檢測應(yīng)用中,使用OpenCL框架加速,也能降低電量的使用。在實際車上應(yīng)用該手機ADAS時,還可以通過降低屏幕亮度以及使用車載電源充電的方式,延長電池使用時間,保障手機用戶的體驗。
3 結(jié)論
本文在安卓平臺上使用了OpenCL框架,實現(xiàn)了車道線檢測的手機ADAS應(yīng)用。根據(jù)三款支持OpenCL框架的手機的實驗結(jié)果,手機能提供足夠計算性能以及續(xù)航能力用于車道線檢測。如今移動安卓手機已經(jīng)集成了高性能的SoC以及高分辨率的相機,十分適合基于視覺的ADAS手機應(yīng)用。市面上也有部分雙攝像頭的手機,未來或許可應(yīng)用基于雙目視覺的ADAS應(yīng)用。不僅如此,隨著支持Tensorflow深度學(xué)習(xí)框架的驍龍835的上市,手機上將有更多支持深度學(xué)習(xí)的硬件集成。在不久的將來,將可以看到基于深度學(xué)習(xí)的ADAS應(yīng)用運行在手機上。
參考文獻
[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.
作者信息:
朱 笛,張文權(quán),蔡 行,黃 凱
(中山大學(xué) 數(shù)據(jù)科學(xué)與計算機學(xué)院 無人系統(tǒng)研究所,廣東 廣州510006)