2017-05-02 20:37:04

朱  笛,張文權,蔡  行,黃  凱

(中山大學 數據科學與計算機學院 無人係統研究所,廣東 廣州510006)


    摘  要: 先進駕駛輔助係統(Advanced Driving Assistant System,ADAS)有利於提高駕駛安全性。如今,Open Computing Language(OpenCL)框架以及集成Graphics Processing Unit(GPU)手機的出現,使得在手機上高效運行ADAS應用成為可能。基於OpenCL框架實現了ADAS最典型的一個功能——車道線檢測,並運行在三款手機上。通過比較該應用的檢測準確度、幀處理速度、應用能效,根據實驗結果手機設備非常適合運行基於視覺的ADAS應用。

    關鍵詞: ADAS;手機;OpenCL;車道線檢測

    中圖分類號: TN919;U463.6

    文獻標識碼: 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頁  第3頁  

http://www.autooo.net/autooo/elec/news/2017-05-02/172125.html