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