朱笛,张文权,蔡行,黄凯
(中山大学数据科学与计算机学院无人系统研究所,广东广州)
摘要:先进驾驶辅助系统(AdvancedDrivingAssistantSystem,ADAS)有利于提高驾驶安全性。如今,OpenComputingLanguage(OpenCL)框架以及集成GraphicsProcessingUnit(GPU)手机的出现,使得在手机上高效运行ADAS应用成为可能。基于OpenCL框架实现了ADAS最典型的一个功能——车道线检测,并运行在三款手机上。通过比较该应用的检测准确度、帧处理速度、应用能效,根据实验结果手机设备非常适合运行基于视觉的ADAS应用。
关键词:ADAS;手机;OpenCL;车道线检测
中图分类号:TN;U.6
文献标识码:A
DOI:10./j.issn.-..04.
中文引用格式:朱笛,张文权,蔡行,等.手机ADAS:基于OpenCL的车道线检测应用评估[J].电子技术应用,,43(4):3-6,12.
英文引用格式:ZhuDi,ZhangWenquan,CaiXing,etal.MobileADAS:anevaluationonOpenCLbasedlanedetectapplication[J].ApplicationofElectronicTechnique,,43(4):3-6,12.
0引言
先进驾驶辅助系统(AdvancendDrivingAssistantSystem,ADAS)常用于提高驾驶体验以及驾驶安全性,例如自适应定速巡航系统[1]与智能速度调节系统[2]能有效减少司机的劳动以及交通事故。由于ADAS对计算能力需求较高,通常运行在特殊的处理单元中,这类车载电子设备行业中分为车载前装、后装。其中后装市场中的Mobileye,能提示司机车道偏离以及提示车距过近。尽管在过去数十年里,ADAS技术高速发展[3],各类前装、后装ADAS产品的价格仍然是个大问题。
如今,移动设备计算能力的高速发展以及GPU在手机片上系统(SystemonChip,SoC)上的集成使得在手机上运行高计算需求的任务成为可能[4-5]。此外,智能手机配置的高清相机以及便于交互的触摸屏,以及其低廉的价格,非常适合运行基于视觉的手机ADAS应用[6]。不仅如此,在高通即将发布的骁龙SoC上已经支持Tensorflow机器学习框架,能通过手机运行基于深度学习的ADAS应用。
目前,业界主要使用FPGA以及GPU的并行能力,加速科学计算。在业界,主要包括Nvidia支持的CUDA以及OpenCL两个计算框架。相较于CUDA只支持在Nvidia的显卡上运行,OpenCL框架提供了异构并行计算的解决方案,其中包括FPGA、GPU、CPU,尤其是其支持手机GPU。按照OpenCLAPI编写的内核函数,能在处理核心(如:GPU、FPGA等设备)上并行运行。通过OpenCL框架,能充分利用手机GPU进行异构并行计算[7-9],进而高效运行部分基于视觉的ADAS应用。虽然iOS上的Metal框架与OpenCL比较类似,但目前而言,只有安卓系统支持基于OpenCL的应用。
基于性能评估的需要,本文选择了3款手机,分别为:小米5(Mi5)、红米Note2(RedmiNote2)、华为荣耀6(Honor6)。这三款手机囊括了市面上常见的SoC厂商(高通、联发科、华为),均集成了支持OpenCL的GPU;同时,这三款手机均位于~人民币的区间,能表现手机ADAS的价格低、实用的特点。
1安卓应用设计与优化
本文及本应用中所使用的车道线检测算法来自文献[10,11],此处不再赘述。选择上述算法的原因如下:(1)并行性:上述算法主要基于粒子滤波,在预处理、车道线检测、车道下跟踪的过程都可并行化处理;(2)可调性:该算法对于车道线检测的准确度可通过粒子滤波的粒子数、采样数等参数调节。在手机上运行时,可以基于手机配置调节车道线检测的精度与效率。在该车道线检测算法中,包括两个调节参数:Np,粒子滤波中粒子的数量;Nc,粒子滤波中重采样过程中候选线的数量。通常而言,Np与Nc越大,车道检测的准确率就越高,但也意味着更高的计算量、更多的计算时间。
1.1应用设计
为了对比实验的需要,需要为本应用提供CPU运行模式以及CPU-GPU运行模式。分别表示车道线算法单纯运行在手机CPU上;车道线算法通过OpenCL框架,运行在GPU上进行并行加速。
为了在安卓手机上使用基于C/C++的OpenCL框架,在应用开发时需要使用Java原生接口(JavaNativeInterface,JNI)。开发工具包括Eclipse与安卓原生开发套件(AndroidNativeDevelopKit,NDK)。首先,通过开放计算语言(OpenComputingLanguage,OpenCL)框架与开放计算机视觉(OpenComputerVsion,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公司的指引,工作组大小为或时,能充分利用处理核心的性能[14-15]。通过实验,发现在三款手机中工作组为与时,三家厂商SoC的处理时间均较低,而荣耀6在工作组为时,处理时间反而上升了,如图1所示。为了兼容更多的硬件,本文选择作为工作组大小。
在手机平台上,内存的大小与带宽均低于桌面级平台[16]。然而,相较于桌面级平台GPU拥有独自的内存,手机GPU与CPU共享集成在SoC上的内存。在桌面级GPU运行OpenCL与CUDA时,将数据从主内存拷贝到显卡内存进行运算,再将结果从显卡内存拷贝回主内存中,即需要内存拷贝操作。为了充分利用手机SoC片上内存的特点,通过内存映射的机制,即通过“map()”与“unmap()”操作,将部分片上内存的拥有者分配为GPU或CPU。通过这种方式,使用内存映射而不是内存拷贝的机制,将图片数据从CPU的片上内存映射到OpenCL的内核中,并将OpenCL车道线检测运算的结果,映射回CPU,实现零拷贝。在手机上使用内存拷贝与内存映射机制时处理帧率如图2所示,图中,横坐标为粒子数Np,纵坐标为帧每秒;对于Np=29,Nc=29,否则Nc=。使用内存映射机制各帧的处理速度更为稳定,并且明显高于使用内存拷贝机制。
所以本文通过修改合适工作组以及使用内存映射代替内存拷贝的机制,对上述的车道线检测算法进行优化。
2实验结果
如上文引言所述,在上述三款手机上,进行了对比实验。其硬件配置如表1所示,囊括了中国市场上三家SoC厂商的系列:高通骁龙、联发科、华为海思。同时,这也涵盖了三大手机GPUIP核提供商:高通、Imagination、ARM。同时,这三款GPU都提供了对OpenCL的支持,其中高通Adreno完整地支持OpenCL2.0,ImaginationPowerVRG支持嵌入式OpenCL1.2,ARMMaliTMP4完整地支持OpenCL1.1。不同版本OpenCL对于部分数据类型有优化,此处以OpenCL1.1版本的特性为准。同时,这三款手机的电池容量也相近。实验过程中,使用本文实现的基于OpenCL的车道线检测,对性能与能耗进行比较。
2.1精确度与帧率
精确度是车道线检测的基本要求,该车道线检测算法使用不同调节参数Np、Nc时对应的准确度已经在FPGA以及桌面级GPU上已经检测过了[10],此处通过判断不同粒子数Np下,各手机的车道线检测帧率是否满足使用需求。同时,也比较了不同CPU模式以及CPU-GPU模式(即使用OpenCL框架进行并行加速)下的情况,如图3所示,图中,横坐标为粒子数Np,纵坐标为帧每秒;对于Np=29,Nc=29,否则Nc=。可以发现,在最高效果Np=8×29,Nc=时,在CPU-GPU模式下,除了红米Note2约30fps以外,另外两款平台均在40fps以上,帧率最多降低了33%;而CPU模式均明显低于20fps,帧率降低了约67%。对于没有使用GPU并行计算的GPU模式而言,下降十分显著。可见OpenCL并行计算框架在高计算量时,加速效果十分显著。此外,Np=27,Nc=29时,能满足日常使用需求[10],此时,CPU模式与CPU-GPU模式处理速度均在40fps以上。故该车道线检测应用在满足精度要求的情况下,仍然能够高速地运行,同时,使用OpenCL并行加速的CPU-GPU模式能在高精度要求的情况下高速运行。
2.2能耗统计与分布
若使用手机ADAS进行驾驶辅助耗电量很大的话,用户无法忍受下车的时候手机电量所剩无几,所以该车道线应用对续航的影响是个很重要的问题。对此,对本车道线检测应用进行了电量消耗测试。为了尽可能地控制变量,如上文所述,本文选择的三款平台电池容量相当,约mAh。考虑到电池老化问题,选择了三台全新的手机进行实验。为了模拟在车上使用本手机ADAS应用进行车道线检测的环境,通过屏幕播放行车记录仪的数据,分别使用三台手机分别在CPU模式下、CPU-GPU模式下,使用手机摄像头获取图像进行车道线检测,并记录电池使用时间。实验过程中无其他后台程序,车道线检测参数为Np=27,Nc=29,同时三台手机屏幕的亮度均调至最高。其运行结果如图4所示,能发现,基本上都能在屏幕亮度最高的情况下使用2.5h以上。同时,使用OpenCL加速在高通骁龙与华为海思两款SoC上增加0.5h使用电量,而对于红米Note2两个模式的电池使用时间都较为接近。
其中,三款手机两个模式下的能耗分布如表2所示,数据来源于安卓系统提供的电池使用情况。能够发现,使用OpenCL框架进行并行计算的CPU-GPU模式,应用所消耗电量低于单纯使用CPU计算的CPU模式。即,在本车道线检测应用中,使用OpenCL框架加速,也能降低电量的使用。在实际车上应用该手机ADAS时,还可以通过降低屏幕亮度以及使用车载电源充电的方式,延长电池使用时间,保障手机用户的体验。
3结论
本文在安卓平台上使用了OpenCL框架,实现了车道线检测的手机ADAS应用。根据三款支持OpenCL框架的手机的实验结果,手机能提供足够计算性能以及续航能力用于车道线检测。如今移动安卓手机已经集成了高性能的SoC以及高分辨率的相机,十分适合基于视觉的ADAS手机应用。市面上也有部分双摄像头的手机,未来或许可应用基于双目视觉的ADAS应用。不仅如此,随着支持Tensorflow深度学习框架的骁龙的上市,手机上将有更多支持深度学习的硬件集成。在不久的将来,将可以看到基于深度学习的ADAS应用运行在手机上。
参考文献
[1]JURGENRK.Adaptivecruisecontrol[J].AutomotiveNewsEurope,,55(6):-.
[2]VAHIDIA,ESKANDARIANA.Researchadvancesinintel-ligentcollisionavoidanceandadaptivecruisecontrol[J].IEEETransactionsonIntelligentTransportationSystems,,4(3):-.
[3]BERNHARTW,WINTERHOFFM.Autonomousdriving:disruptiveinnovationthatpromisestochangetheautomotiveindustryasweknow[C].EnergyConsumptionandAutonomousDriving,,16(6):3-10.
[4]HEWENERH,TRETBARS.Mobileultrafastultrasoundimagingsystembasedonsmartphoneandtabletdevices[C].UltrasonicsSymposium.IEEE,:1-4.
[5]THABETR,MAHMOUDIR,BEDOUIMH.Imageprocessingonmobiledevices:Anoverview[C].ImageProcessing,ApplicationsandSystemsConference.IEEE,:1-8.
[6]PETROVAIA,DANESCUR,NEDEVSCHIS.Astereovisionbasedapproachfordetectingandtrackinglaneandforwardobstaclesonmobiledevices[C].IntelligentVehiclesSymposium.IEEE,:-.
[7]ROSSJA,RICHIEDA,PARKSJ,etal.AcasestudyofOpenCLonanAndroidmobileGPU[C].HighPerformanceExtremeComputingConference.IEEE,:1-6.
[8]BACKESL,RICOA,FRANKEB.Experiencesinspeedingup白斑医院哪家好四川治疗白癜风医院