作者:itbases | 来源:互联网 | 2023-08-21 19:46
红绿灯识别是自动驾驶中最为基础的功能,识别方法主要有两种,一种基于视觉图像识别,一种基于v2x。
v2x,即通过红绿灯自己实时发送信号状态,再由车辆低延迟接收信号。该方法要对红绿灯进行改造,不仅对基础设备信号能力要求过高,而且对网络传输要求也不低,虽说目前5G出来了,但要大规模试用还需要一段时间,除却基础的要求外,对异常信号的处理等由于尚未实验环境,同样难以得到可以论证的方案。
基于视觉图像识别,即通过对2d图像进行检测分类识别获取交通灯的各项状态信息。该方法目前也有两种实现方案,一种基于高精地图位置获取感兴趣区域而后检测分类识别,另外一种完全基于2d图像检测分类识别。
基于高精地图位置获取感兴趣区域,而后对目标区域进行检测分类识别红绿灯状态算是业界比较通用的做法了。
以apollo开源为代表,便是使用该方法。该方法的输入包括自车位置(imu),查询地图中红绿灯的到位置信息,以及当前位置摄像头图像,输出即地图中红绿灯的id,颜色状态等信息。其中摄像头图像往往至少需要2个摄像头配合完成,包括一个短焦看近处的镜头,一个长焦看远处的镜头。目标检测通常采用yolo,ssd等单阶段网络训练得到,由于分类任务往往比较简单(基础的需要识别红、黄、绿、黑四种颜色),可以使用的分类网络也非常多。
这种方法的优势是通过地图投影到图像中,获取先验的感兴趣区域,能够有效的聚焦车辆关注的交通灯,减少其他交通灯及检测模型误检测误识别等问题,能够较好的实现自动驾驶车辆“看”灯的过程,为决策层提供较为可靠的light信息。
这种方法的缺陷是让简单的红绿灯识别功能变得十分臃肿,且扩展性降低,由于交通灯识别强依赖地图信息,导致自动驾驶识别交通灯必须有高精地图,而高精地图的构建过程非常繁琐,且排查红绿灯异常问题往往需要联合排查,无法实现该功能的快速闭环更新。
完全基于2d图像检测分类识别,由于都属于各家各自的技术机密,具体细节不得而知,不过从业界目前所使用的方法推到,目前纯视觉来识别light信息尚不成熟,漏检、误检问题无法得到有效的解决之前,还是让该方案还是充满神秘感吧。
除却以上基础的方案外,要想实现全方位的红绿灯基础的识别功能也并不简单,以最常见的竖灯场景为例子,通常包括红、黄、绿、黑四种颜色实时变化,而且还存在light故障(长黑灯、长黄闪),以及普通的红灯闪烁、黄灯闪烁、绿灯闪烁等识别要求,此外要想识别倒计时牌、箭头、圆头等类型也充满挑战。
此外,目前检测红绿灯,往往是自动驾驶汽车距离交通灯越近,识别的状态越好,距离越远,红绿灯在图像中的感兴趣区域越小,其识别难度越高,但是自动驾驶汽车走到停止线附近再识别出红绿灯,显然无法让车辆更加平稳的停车,只有在远处看灯准确,才能让车辆能够更加平稳的停在停止线前。红绿灯的小目标检测与识别十分重要。
此外,识别红绿灯容易受到车外天气环境的影响。例如太阳强光、弱光导致成像灯盘颜色分别困难,夜晚红绿灯旁边的灯管干扰,夜晚抓拍违章的强灯光干扰,摄像头受到水渍污渍等干扰等等。
此外,红绿灯的样式也并不统一,安装规范也各式各样。通常我们看到的交通灯为横条灯或竖条灯,其组合方式包括单灯、两灯、三灯甚至是四灯,除了我们常见的箭头、圆头,还有读条灯等,安装背景也各式各样,不能一一举例,这些都为自动驾驶识别红绿灯带来非常大的挑战。
此外,摄像头的抓拍还与红绿灯的本身的发光频率息息相关,有许多light的闪烁频率较低,人眼无法观察闪烁状态,然后如果使用低频的摄像头抓拍,非常容易出现light为黑灯状态(实际是有颜色的),这种现象属于led灯闪烁问题,抑制LED闪烁问题,就称为LFM。
【知识点1】LFM---LED闪烁抑制
从路灯、交通灯,到车载照明,低功耗、长寿命、高可靠的LED正在快速取代传统照明方式。但LED在道路上的普遍使用,却带来“LED闪烁”现象。“LED闪烁”是由LED驱动方式而产生的现象,LED灯以交流方式驱动,驱动频率一般在90Hz以上,即最慢脉冲周期为11毫秒左右,LED在11毫秒周期内实现一次亮灭,为节能及延长使用寿命,占空比通常不超过50%,如果相机曝光时间较短(例如3毫秒),则有可能曝光时间正好对上LED被关灭期,这时候图像传感器抓到的就是LED灭掉的图像,如果是LED阵列,在这种情况下拍到的图像就是一部分亮,一部分暗,这就是“LED闪烁”现象。
【友情提示】遇到LED闪烁问题,通常有两种解决方案。一种为更换带有LFM功能的摄像头;一种是使用 斩波曝光(chopped)来缓解LED闪烁问题,但治标不治本。当然还有一种额外方法,是要求业主更换信号灯供应商。
【知识点2】斩波曝光(chopped)
在智能交通领域常会遇到拍摄交通信号灯的需求。大部分信号灯直接使用220V市电供电,因此会存在10ms的光能量周期(美国是110V,周期8.3ms)。偶尔也会有信号灯厂家偷工减料,使用半波整流器件将电频率的负半周过滤不用,这就导致信号灯每亮10ms之后就会熄灭10ms。虽然人眼看不出来,但sensor看的非常清楚。
由于信号灯存在10ms的明暗周期,当sensor曝光时间很短时,就会遇到某一帧图像里信号灯碰巧全都不亮的尴尬场景,如下图所示。
一般在晴朗的夏天,sensor曝光时间可能会需要短于1ms才能保证画面不过曝,此时遇到信号灯近似熄灭的概率已接近50%。而在夜晚则曝光时间通常需要大于10ms,所以不会遇到信号熄灭的问题,相反会遇到信号灯光太强以致sensor过饱和,全部信号变成白灯的问题。
除了红绿灯之外,很多汽车上使用的LED大灯或者信号灯也是有频率的,而且平均点亮的时间(占空比,duty cycle)可能更短,如下图所示,这种情况sensor抓拍到LED(信号)灯熄灭的概率会更大。
为了缓解这个问题,有人提出了斩波曝光的工作模式,其原理是把正常曝光所需的曝光时间(比如1ms)分散到11ms的固定时间间隔内执行,通过多次短暂曝光的效果累加实现1ms等效曝光时间,且能保证采样到信号灯最亮的时刻,如下图所示。
这种方法的好处是增大了捕捉到信号灯点亮的概率,但是由于捕捉的时间短,所以画面上信号灯的亮度会比正常的要弱。所以这种方法并没有完美解决问题,只是一种缓解(mitigation)的方法。
参考资料
[1] Understanding CMOS Image Sensor @ 刘斯宁