这道题非常有意思。之前一直很好奇,终于有人提出来了。于是,搜了点资料看看,不成专业,姑且给我们这样的智驾小白增添点课外知识。
以下内容来自于Gitee网站的公开分享,其中有一篇特意讲了Apollo识别红绿灯的策略,做个翻译,分享给大家。
题目问,自动驾驶汽车如何「看到」红绿灯?翻译过来就是,自动驾驶如何准确检测且识别红绿灯。
先说红绿灯,我们知道有3种状态:红、黄、绿。
但是,对于机器来说,这样的总结还不够。因为在交通信号灯不工作的情况下,它可能显示黑色,或者闪烁的红灯/黄灯。
那么,机器对交通信号灯的分类至少有5种:红、黄、绿、黑、未知。
再看机器检测到交通信号灯的途径。Apollo搭载有高精地图,高精地图包含有交通信号灯的信息,那么机器至少有了一个预判,知道在某个路口的某个位置,理论上可以检测到交通信号灯。
具体的传感器是什么?摄像头!
但是,仅使用一个固定视野的摄像头是不够的,因为交通信号灯的高度以及十字路口的宽度变化很大,有可能没有进入摄像头的视野。
所以,Apollo使用了两个摄像头来扩大感知的视野:
第1个是焦距为25mm的长焦镜头,拍摄到的信号灯比较大,容易被识别到,但视野太窄。如果车道不够直,或者车辆离信号灯太近,那么,信号灯都有可能出现在视野之外。
第2个是焦距为6mm的广角镜头,主要对视野进行补充。
PS:这两个摄像头互为冗余,但具体到某一时刻只能以两者之一为主。策略模块会自适应地做出最优选择,至少,在应该检测出信号灯的路口,不因视野问题而检测不出。
检测问题解决之后,机器将会进入算法流程,主要描述为两个阶段:1、预处理阶段;2、处理阶段。
预处理阶段包括有:红绿灯投影、相机选择、图片信息及缓存同步;
处理阶段包括有:纠正(确定准确的信号灯边界框)、识别(分辨信号灯的颜色)、修改(根据历史时间顺序修正颜色)。
PS:涉及到算法环节,班门弄斧了,尽可能结合我的理解,通俗地解释一下。
首先明确一个前提:机器没有必要检测每一帧图像,因为信号灯的变化频率比较低,在计算资源有限的情况下,抓住关键图像即可,那么对图像的选择和匹配就很重要了。
1-1 红绿灯投影
在高精地图中,根据车辆定位信息,其实可以找到信号灯的三维坐标。但这些是3D数据,而摄像头拍到的是2D数据,彼此之间需要有一个换算关系。
怎么换算的?不做深入剖析了,主要借助了相机模型和一些标定。
机器有点傻的,它不像我们人一样,从2D图像中,可以直接找出信号灯在哪里。而要曲折地借助3D转2D的换算关系,用一个矩形边界框,在2D图像中把信号灯的位置圈出来。
这就是」红绿灯投影「阶段的输出结果,但这个位置一般圈得比较大,有时候也会圈错,也就是 蓝色矩形框。
1-2 相机选择
我们在开始就提到了,有长焦和广角两个镜头做配合,一般优先选择长焦镜头的输出,因为信号灯显示得更大。
如果长焦镜头没有检测到信号灯,那就需要广角镜头出马了,但是图像里的信号灯显示小一些。
1-3 图片信息及缓存同步
经过这一步,再往下一步走,就到了处理阶段。
主要讲究」删繁就简「,因为识别信号灯与识别障碍物的要求不同。因为信号灯既没有很高的变化频率,也因为对信号灯的识别,主要在颜色变化。
所以,有些不重要的图像可以舍弃掉了。
2-1 纠正(确定准确的信号灯边界框)
预处理之后,机器会得到一张2D图像,被圈出了信号灯的位置,但上文也说了,这个圈可能不准。
为了校准,机器画了一个更大范围的圈(绝不是盲目画,有一些计算在里面)。这个圈被叫做ROI(region of interest,兴趣区域),也就是 黄色矩形圈 。
再之后,画了兴趣区域的2D图像,被放入卷积神经网络中做检测,将会输出一个结果。
2-2 识别(分辨信号灯的颜色)
上文画圈,只是为了确定信号灯的位置。
到了识别这一阶段,就要真正辨别信号灯的颜色了,仍然用到了卷积神经网络。
2-3 修改(根据历史时间顺序修正颜色)
这一阶段,主要对辨别颜色的结果,再做一次修正。
a、如果判断出了红和绿,结果很清楚,那就是红灯、绿灯;
b、如果判断出了黑,那就不一定了。因为有可能不凑巧,就在信号灯闪烁的时候,恰好拍到了黑色的状态,其实这个信号灯并没坏。
那该怎么办?按照历史缓存,看看之前的图像结果是怎样的,要是」连续黑「,那信号灯铁定是坏了;
c、如果判断出了黄,也值得细品。黄灯只出现在」绿灯变红灯「的空隙中,但为了安全期间,直接以红灯作为输出结果;
Apollo识别红绿灯的策略,大体上即是如此。
总结:单车智能识别红绿灯,本质上就是在」猜「,靠不靠谱,就看猜的有多准。
车路协同,是把答案直接告诉所有车,此时亮的什么灯,多久要变灯,一清二楚,该加速还是该减速,车辆会做出准确判断。
车路协同有什么问题吗?太贵了,太仰仗国家投钱砸基建了。那个」三有原则「,有钱、有技术、有决心,缺一不可。
参考文章: https:// gitee.com/ApolloAuto/ap ollo/blob/master/docs/specs/traffic_light.md