引言
ADAS(advanced driver assistance systems),既高级智能行车辅助系统。目前基于视觉技术的ADAS产品已经慢慢的出现在我们的视野当中,生活中我们熟知的一些中高档的车型都已配备相应的ADAS功能,如特斯拉、雷克萨斯、尼桑等。近几年来自动驾驶炒的火热,算法的革新、硬件的发展、业务场景的突破等等等等,我们似乎可以看到自动驾驶即将成功落地的曙光。近年的自驾领域中,通用自动驾驶领域鲜有突破,反倒是在一些固定场景、限定环境中实现了部分自动驾驶的功能,如码头货运场景中的自动驾驶、农机收割场景中的自动驾驶、无人货运配送中的自动驾驶等等。本文说到这里,仅为抛砖引玉,并不会在自动驾驶这个大领域中扩展太多(能力也有限)。我们从自动驾驶这个领域往后稍稍退一步,跟大家聊一聊智能行车辅助系统,产品类型、产品功能设计思路、实现思路等等。由于时间比较紧,内容大多为随笔,数据和引用可能会有所出入,欢迎大家讨论。
首发:https://zhuanlan.zhihu.com/p/48433713
作者:张新栋
ADAS产品种类
目前市面上ADAS的产品类型有很多,从产品方案来简单分类的话有:基于图像传感器的产品(单目、双目)、基于测距传感器的产品(毫米波雷达、激光雷达、超声波等)、两者融合方案。基于图像传感器的产品,市面上有很多,比如我们常见的行车记录仪都已经配备了相应的ADAS功能「FCW:前碰预警」、「LDW:道路偏离预警」、「PD:行人检测」等等,又或者行业巨头Mobileye的产品。基于图像传感器的产品优点:成本可控(相对于毫米波、激光雷达)、兼顾感知(可进行物体检测、识别功能)、体积小等等,缺点为:配套算法依赖底层芯片、实时性、易受光照影响等等;基于雷达的产品,在测距和通用障碍物距离感知的实效性和精度方面要优于图像传感器产品,但单品成本较高、使用场景较为局限,另外如激光雷达也易收到天气和环境的影响(大雨、雾霾等等)。
智能车各类传感器及外设
从产品功能的使用场景来进行分类的话,可就感知的场景分为如下几类:近距离感知、中距离感知、远距离感知、驾驶员监控和分析。近距离感知的ADAS产品功能,常见的有环视系统(多路摄像头)、防擦碰系统(超声波传感器)、虚拟保险杠(摄像头或雷达、超声波)等等。中距离感知的ADAS产品功能包括道路偏离预警(摄像头)、前碰预警(摄像头、雷达)、行人检测(摄像头)等等。远距离感知的ADAS产品功能,实际上更像是部分中距离感知功能的拓展,通过凭借可探测距离更远的雷达传感器、小视角长感知距离的镜头来实现。对于驾驶员的监控和分析,常见的功能有驾驶员疲劳驾驶检测、驾驶员分神检测(左顾右盼、分神、失焦等)、异常行为检测(如吸烟、长时间打电话、玩手机等)。
各类感知场景
百度疲劳驾驶功能演示
基于摄像头的ADAS产品设计
- 摄像头方案
基于摄像头的ADAS产品可分为单目视觉方案、双目立体视觉方案、多摄像头方案等等,他们虽同为视觉方案,但硬件架构和算法架构有着本质的不同。单目视觉强调先感知-->再测量-->后预测;双目视觉则通过模拟人眼工作机理,通过视差先测距-->后分割-->再感知(可选);多摄像头方案则多应用在AR领域的ADAS产品,比如3D环视。
关于镜头选择方面方面,也有一定的讲究。与测距ADAS功能相关的产品,一般为了获取更远的感知范围,一般选择较长焦距(6mm)、较小视角(45度)的镜头;市面上的智能行车记录仪为了兼顾行车记录仪的主要特性(大视角、宽视野、高保真),而选取的一般为广角镜头(大于120度),牺牲了部分感知距离;一些AR类型的ADAS产品,如环视系统(4-6个摄像头),会采用视角更大的镜头(大于180度)。
- 场景实时性要求
根据不同的产品形态,对算法功能的实时性有着不同的要求。主动预警类的ADAS产品,对系统的实时性有着非常高的要求,比如Mobileye公司的一系列产品。一般在理想情况下,能在危险发生前约2秒的时间进行预警提示,产品系统运行的实时性很高(整体系统运行效率大于15 fps);相比之下,被动监控类的ADAS产品则对系统运行的实时性要求相对较低,该类产品通过搜集驾驶员的驾驶行为来对驾驶员的驾驶习惯进行评级,产品的最终目的是为了对驾驶员进行综合“考评”。
- 算法方案
算法方案的话,基本是各有千秋,国内纯做ADAS的产品公司不多,仅从ADAS产品功能方案上来区分的话,暂可分为自研型和上游算法供应商提供两种形式,且无论哪种形式都对处理芯片的计算性能有着较高的要求。国内能够独立研发ADAS算法的公司数目不多,优点就是算法和产品业务的贴合度会比较高,不过自研型产品从立项到成品的时间成本和机会成本都比较高,不太适合追求短平快发展的中国企业;若由上游算法供应商提供,则企业能把更多的精力放到集成上面,供应商提供的算法和方案一般性能都以行业标准为参考,要求提供商进行定制或者更改的灵活度较小。
- 芯片选择
芯片选择其实不应该单独拿出来说,上文我们也提到过芯片的计算力应当能满足算法的要求。这里,我先简单的说说我对这一块的理解。第一,在对芯片厂商进行选择的时候,首先需要确定自己所要切入的领域。举个例子,若为车规级的产品,芯片厂商的选择可能就那么几家,工业级的产品也同理;第二,从算力和功耗上进行区分和选择,这个时候就需要考虑算法的复杂度了。比如,如果产品功能仅包含LDW(道路偏离预警),则芯片的选择范围就比较大,基于传统方法的LDW算法在许多低功耗的arm芯片上面都可以做到实时运行。反之,若需要兼顾多种功能(LDW、FCW、PD等),芯片选择范围就会缩小很多。FCW中的一个核心模块---物体检测算法,基于传统方法的有adaboost+haar+multiscale或者hog+svm+multiscale,基于目前较火的深度学习的方法有mobilenet+ssd或者light-head-yolo2,无论是哪种算法,都需要很多的计算资源来保证实时性。
目前能提供足够计算资源以满足算力的芯片,大体上可分为如下几类:1. cpu+gpu,2. cpu+FPGA,3. cpu+dsp,4. cpu+asic。说到cpu,我们这里只考虑嵌入式的arm架构芯片,在进行物体检测等计算密集型的任务时,可以借助SIMD(NEON等)来进行加速。市面上目前许多智能行车记录仪(包含FCW、LDW等功能)大多都采用第一种方案(cpu+gpu的SOC),该类方案的灵活性较大,算法功能开发更接近软件,且目前开源的方案(arm compute library、NCNN、SIMD、TVM等)对该类芯片的支持度都比较高,许多芯片厂商也针对芯片提供了相应的深度学习、物体检测类库(如全志、瑞芯微、英伟达等)。对于自研算法型的公司,可以针对产品自身的业务逻辑来灵活的调配算力资源。对于功能集成型的公司,该类芯片上游大小方案供应商较多,集成难度稍低; 第二种方案,采用FPGA作为模拟CNN的协处理器,中控部分采用cpu。该类方式更接近硬件实现,相对纯硬件实现的asic方案要灵活一些,但是实际开发难度较大,开发需要的人才成本较高,工期比较难控制;第三种方案,开发难度介于第一种方案与第二种方案之间,主要应用于有低功耗要求的运行环境;一些公司为了追求性能上的机制,会将成熟的算法进行固化,就是我们上文提到的第四种方案(cpu+asic),例如Mobileye公司的eyeQ系列芯片,里面固化了多种高效的ADAS算法。不过该类方式也有很大的时间和机会成本的风险,从业务成熟到成功流片生产往往需要3-5年的时间,而且开发的难度也是几类方案种最大的。
- 总结
上述内容仅是泛泛而谈,笔者水平有限,欢迎大家多讨论、多建议。后面有时间,我们会就具体的产品功能进行分析(如前碰预警产品、道路偏移产品、环视产品)。
推荐阅读
- 使用TVM在android中进行Mobilenet SSD部署
- 使用NNAPI加速android-tflite的Mobilenet分类器
- 详解MNN的tf-MobilenetSSD-cpp部署流程
- 实战MNN之Mobilenet SSD部署(含源码)
专注嵌入式端的AI算法实现,欢迎关注作者微信公众号和知乎嵌入式AI算法实现专栏。
更多嵌入式AI相关的技术文章请关注极术嵌入式AI专栏。