vlambda博客
学习文章列表

开发者说| Apollo 源码分析系列感知篇(三):红绿灯检测和识别


下面是由社区开发者—Frank909提供的文章,本文主要分析 Apollo 6.0 中红绿灯检测和识别中的相关算法逻辑及部分代码实现。


    ENJOY THE FOLLOWING  

开发者说| Apollo 源码分析系列感知篇(三):红绿灯检测和识别

感知架构图


开发者说| Apollo 源码分析系列感知篇(三):红绿灯检测和识别


Apollo 默认有 2 个前视摄像头:

  • 25mm 焦距看远处,视距长,但 FOV 小。

  • 6mm 焦距看近处,视距短,但 FOV 大。


两个摄像头都可以检测到红绿灯,它们相互冗余,但是同一时刻只能以一个为主。

开发者说| Apollo 源码分析系列感知篇(三):红绿灯检测和识别

Apollo gitee 仓库图示

开发者说| Apollo 源码分析系列感知篇(三):红绿灯检测和识别 Apollo gitee  仓库图示

上面的图片是来自于长焦相机,能看得很远,但视野窄,下面的正好相反。

Apollo 红绿灯模块定义了红绿灯 5 种状态:
  • 绿

  • 未知


开发者说| Apollo 源码分析系列感知篇(三):红绿灯检测和识别


在 Apollo 中红绿灯模块有一套固定的处理流程:
  • 预处理阶段

  • 处理阶段


预处理阶段-信号灯投影

预处理阶段第一个任务,就是要根据车辆定位信息从高精度地图中查询红绿灯的物理信息,从而得到信号灯的物理坐标,然后再通过相机模型和标定好的相机内参,将信号灯从 3D 世界中投影到 2D 图像当中变成一个 Bounding Box。


信号灯的物理位置信息长这样:

signal info:id { id: "xxx"}boundary { point { x: ... y: ... z: ... } point { x: ... y: ... z: ... } point { x: ... y: ... z: ... } point { x: ... y: ... z: ... }}
 
   
   
 

预处理阶段-相机选择

上文讲到有 2 个相机,我们先选择长焦的相机,因为长焦能将远处的信号灯显示的比较大且清晰,容易做颜色识别;当长焦没有办法检测到所有红绿灯时,我们再择短焦。同一个算法处理周期,只有一个摄像头的图片才能够进行处理。


预处理阶段-图片信息及缓存同步

在自动驾驶中,因为考虑到车辆行驶速度很快,因此障碍物的识别一般要求实时,也就是 30FPS 以上。

但相对于障碍物,红绿灯的位置信息没有那么重要,重要的是它的语义信息,也就是红绿颜色变化,但这种频率是非常低的,所以对于红绿灯检测而言,则不需要那么高的频率,也因此不需要针对每一帧图片都做红绿灯处理。

因此,我们可以隔一个固定的时间周期去查询高精度地图中的红绿灯信息,然后选择最近的图片缓存一起送入到红绿灯处理模型当中,其它的图片就可以丢掉了。


处理阶段-修整(Rectifier)

预处理会产生一张图片和对应的红绿灯信息(2D bbox),但因为误差问题,2D bbox 和实际上观察到的红绿灯是有偏差的,甚至很大,所以要基于 bbox 设置一个 ROI 区域。

将带有 ROI 信息的图片传输给一个 CNN 做检测,最终会输出一系列的信号灯结果。


处理阶段-识别(Recognizer)

检测是为了估算位置,而识别是要分辨信号灯的颜色。

将 ROI 和信号灯结果连同图像输入给一个 CNN,这个 CNN 就会给出信号灯的颜色信息。


预处理阶段-修正(Revisor)

因为交通灯都会闪烁,所以前一个流程的结果可能不准确,因此需要结合历史信息进行推断。比如收到的信号是绿或者红,那么直接输出;如果是黑色,或者是未知状态,就要根据历史缓存进行推断,如果前面的状态不是黑色或者未知就输出历史状态,否则输出黑色或者未知。这里需要注意,黄灯只能在绿色和红色之间,如果顺序不对就会被丢弃。


开发者说| Apollo 源码分析系列感知篇(三):红绿灯检测和识别

*CSDN

https://blog.csdn.net/briblue/article/details/111598755

https://mp.weixin.qq.com/s/hlsBBc9p4kc3SuwGnGqnZw


以上是" Apollo 源码分析系列感知篇(三):红绿灯检测和识别"的全部内容,更多话题讨论、技术交流可以扫描下方二维码添加『Apollo小哥哥』为好友,进开发者交流群。

 

开发者说| Apollo 源码分析系列感知篇(三):红绿灯检测和识别


©️著作权归作者所有,如需转载,请注明出处,否则将追究法律责任。


开发者说| Apollo 源码分析系列感知篇(三):红绿灯检测和识别
开发者说| Apollo 源码分析系列感知篇(三):红绿灯检测和识别

开发者说| Apollo 源码分析系列感知篇(三):红绿灯检测和识别

开发者说| Apollo 源码分析系列感知篇(三):红绿灯检测和识别
开发者说| Apollo 源码分析系列感知篇(三):红绿灯检测和识别