《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 手機ADAS:基于OpenCL的車道線檢測應(yīng)用評估
手機ADAS:基于OpenCL的車道線檢測應(yīng)用評估
2017年電子技術(shù)應(yīng)用第4期
朱 笛,張文權(quán),蔡 行,黃 凱
中山大學(xué) 數(shù)據(jù)科學(xué)與計算機學(xué)院 無人系統(tǒng)研究所,廣東 廣州510006
摘要: 先進駕駛輔助系統(tǒng)(Advanced Driving Assistant System,ADAS)有利于提高駕駛安全性。如今,Open Computing Language(OpenCL)框架以及集成Graphics Processing Unit(GPU)手機的出現(xiàn),使得在手機上高效運行ADAS應(yīng)用成為可能?;贠penCL框架實現(xiàn)了ADAS最典型的一個功能——車道線檢測,并運行在三款手機上。通過比較該應(yīng)用的檢測準(zhǔn)確度、幀處理速度、應(yīng)用能效,根據(jù)實驗結(jié)果手機設(shè)備非常適合運行基于視覺的ADAS應(yīng)用。
關(guān)鍵詞: ADAS 手機 OpenCL 車道線檢測
中圖分類號: TN919;U463.6
文獻標(biāo)識碼: 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.
Mobile ADAS: an evaluation on OpenCL based lane detect application
Zhu Di,Zhang Wenquan,Cai Xing,Huang Kai
Unmanned System Institute,School of Data and Computer Science, Sun Yat-sen University,Guangzhou 510006,China
Abstract: Advanced Driving Assistant System(ADAS) are important to increase driving safety. Nowadays, the Open Computing Language(OpenCL) framework and mobile devices integrated with Graphics Processing Unit(GPU) has made it possible to launch ADAS applications on mobile devices efficiently. In this paper, a typical ADAS lane detection application based on OpenCL framework is implemented and launched on three mobile devices. By evaluating the accuracy, processing frame speed and energy efficiency of this application, it's concluded that the mobile devices are suitable for ADAS applications.
Key words : ADAS;mobile phone;OpenCL;lane detection

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)性:該算法對于車道線檢測的準(zhǔn)確度可通過粒子濾波的粒子數(shù)、采樣數(shù)等參數(shù)調(diào)節(jié)。在手機上運行時,可以基于手機配置調(diào)節(jié)車道線檢測的精度與效率。在該車道線檢測算法中,包括兩個調(diào)節(jié)參數(shù):Np,粒子濾波中粒子的數(shù)量;Nc,粒子濾波中重采樣過程中候選線的數(shù)量。通常而言,Np與Nc越大,車道檢測的準(zhǔn)確率就越高,但也意味著更高的計算量、更多的計算時間。

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作為工作組大小。

adas1-t1.gif

    在手機平臺上,內(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所示,圖中,橫坐標(biāo)為粒子數(shù)Np,縱坐標(biāo)為幀每秒;對于Np<=29,Nc=29,否則Nc=212。使用內(nèi)存映射機制各幀的處理速度更為穩(wěn)定,并且明顯高于使用內(nèi)存拷貝機制。

adas1-t2.gif

    所以本文通過修改合適工作組以及使用內(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對于部分?jǐn)?shù)據(jù)類型有優(yōu)化,此處以O(shè)penCL 1.1版本的特性為準(zhǔn)。同時,這三款手機的電池容量也相近。實驗過程中,使用本文實現(xiàn)的基于OpenCL的車道線檢測,對性能與能耗進行比較。

adas1-b1.gif

2.1 精確度與幀率

    精確度是車道線檢測的基本要求,該車道線檢測算法使用不同調(diào)節(jié)參數(shù)Np、Nc時對應(yīng)的準(zhǔn)確度已經(jīng)在FPGA以及桌面級GPU上已經(jīng)檢測過了[10],此處通過判斷不同粒子數(shù)Np下,各手機的車道線檢測幀率是否滿足使用需求。同時,也比較了不同CPU模式以及CPU-GPU模式(即使用OpenCL框架進行并行加速)下的情況,如圖3所示,圖中,橫坐標(biāo)為粒子數(shù)Np,縱坐標(biāo)為幀每秒;對于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模式而言,下降十分顯著??梢奜penCL并行計算框架在高計算量時,加速效果十分顯著。此外,Np=27,Nc=29時,能滿足日常使用需求[10],此時,CPU模式與CPU-GPU模式處理速度均在40 fps以上。故該車道線檢測應(yīng)用在滿足精度要求的情況下,仍然能夠高速地運行,同時,使用OpenCL并行加速的CPU-GPU模式能在高精度要求的情況下高速運行。

adas1-t3.gif

2.2 能耗統(tǒng)計與分布

    若使用手機ADAS進行駕駛輔助耗電量很大的話,用戶無法忍受下車的時候手機電量所剩無幾,所以該車道線應(yīng)用對續(xù)航的影響是個很重要的問題。對此,對本車道線檢測應(yīng)用進行了電量消耗測試。為了盡可能地控制變量,如上文所述,本文選擇的三款平臺電池容量相當(dā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兩個模式的電池使用時間都較為接近。

adas1-t4.gif

    其中,三款手機兩個模式下的能耗分布如表2所示,數(shù)據(jù)來源于安卓系統(tǒng)提供的電池使用情況。能夠發(fā)現(xiàn),使用OpenCL框架進行并行計算的CPU-GPU模式,應(yīng)用所消耗電量低于單純使用CPU計算的CPU模式。即,在本車道線檢測應(yīng)用中,使用OpenCL框架加速,也能降低電量的使用。在實際車上應(yīng)用該手機ADAS時,還可以通過降低屏幕亮度以及使用車載電源充電的方式,延長電池使用時間,保障手機用戶的體驗。

adas1-b2.gif

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)

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。