高精地图中地面标识识别技术历程与实践

2019 年 12 月 01 日

高精地图中地面标识识别技术历程与实践

1. 地面标识识别


地面标识识别,指在地图道路中识别出各种类型的地面标识元素,如地面箭头、地面文字、时间、地面数字、减速带、车距确认线、减速丘、人行横道、停止让行线、减速让行线等。这些自动化识别结果将作为生产数据交付给地图生产产线,经过制作后演变成服务于自动驾驶、车载导航、移动导航的地图。


高精地图一般对各个地图要素精度至少有着厘米级的要求,所以相对于普通地图来说需要更高的位置精度,这也是与普通地图识别的最大不同,所以探索如何将地面标识识别得又全又准是我们一直努力的方向。


地面标识识别有两大难点:一是地面标识本身的种类、大小繁多,二是地面标识易被磨损遮挡,清晰度参差不齐,这给高精度识别带来了巨大的挑战。


1)地面标识种类繁多:实际场景中地面标识种类繁多,在内容、颜色、形状、尺寸等方面均有不同分布。


  • 颜色:比如黄色、红色、白色等

  • 形状:箭头形、各种文字数字形状、条形、多条形、面状、丘状等

  • 尺寸:国标定义的标准箭头长度为9m,但也存在1m~2m甚至1m以下的地面标识元素,尤其减速带以及人行道等尺寸差异会更大,反映到图像中像素个数以及长宽比均会有较大差异。



图 1. 部分地面标识


2)磨损压盖多:地面元素长年累月受车辆、行人等碾压会造成磨损,以及经常存在的堵车等场景更是加大了地面要素被遮挡的可能。所以从激光雷达获取的点云数据和由相机获取的可见光图像数据的质量均参差不齐,对地面标志识别带来了极大的挑战。


常见的问题如下所示,示例如图 2 所示。


  • 地面标识磨损:地面标志由于磨损褪色、掉漆导致不完整或者严重不清晰

  • 采集环境问题:遮挡(施工、车辆)、由于环境改变引起的材料激光反射率差异以及可见光不清晰(雨天、逆光等)



图 2. 自然场景下拍摄的地面标识


2. 识别起步


地面标识识别需要做的是将地面标识这部分区域提取出来,则最直观的是对其进行阈值分割、骨架提取、连通域分析等传统方法。首先获取点云中地面点集合,接着获取集合中高反射率部分的骨架集合,然后对每个局部骨架区域计算强度截断阈值,最后对区域进行连通区域搜索以及附加降噪措施等。


另外我们也尝试了 GrabCut 等算法在地面标志上的提取,GrabCut 算法对前景和背景分别聚类,得到 k 组类似的像素集合,然后对前景和背景分别进行高斯混合模型(GMM)建模,判断像素属于地面标志还是背景。在提取疑似地面标识区域后,再经过机器学习模型(SVM 等)进行细分类以获得更好的识别效果。



图 3. 传统提取方法识别结果


由上图可以看到,对于一些前后景区分比较好的地面标识提取的比较好,但是针对有磨损、模糊、前景背景相似、背景复杂等情况均效果欠佳,容易漏召回且位置精度不高,鲁棒性不强。


3.深度学习时代


2012 年 Hinton 团队提出的 Alexnet 网络赢得了 2012 年图像识别大赛冠军,相比传统方法获得显著提升,CNN 在图像领域有了明显优势。近几年,基于深度学习的检测识别技术也得到了很大发展。


深度学习时代是数据和硬件驱动的时代,结合部分人工标注以及自动化生成,我们拥有百万级的数据,而且各种场景的数据还在不断丰富,结合算法探索与创新,我们取得了越来越好的技术与业务效果。


目前检测识别技术主要分为两大方向:Two-Stage(如 RCNN 系列)和 One-stage(SSD、YOLO 等)。Two-Stage 网络优势在于效果整体较好,识别位置较精确,对小目标检测也有一定的竞争力。


One-stage 检测识别方法优势在于处理速度较快。高精地图不仅需要较高的识别性能、也需要有足够高的识别位置精度,所以我们选择了准确率较高的 Two-stage 大方向。


1)R-FCN 检测


结合位置敏感得分图(position-sensitive score map)和位置敏感降采样(position-sensitive roi pooling)等操作,R-FCN 算法在目标检测识别上获得了较高的性能和位置精度,我们选择了 R-FCN 检测算法实现对地面标识的检测识别。


R-FCN 算法基于深度学习的方法,通过学习大量实际场景样本,所以在泛化性上取得了比较大的提升,自动化识别对于不同场景的识别能力有所提高,地面标识召回率得到了较大的改善。算法示意图如下所示:



图 4. R-FCN 算法示意图


以下为一些地面标识检测识别示例:



图 5. R-FCN 算法地面标识识别示例


引入深度学习极大的改善了高精地图地面标识自动识别的性能,地面标识召回得到了很大提升,美中不足的是 R-FCN 存在着一个弊端就是其输出的最终检测位置是基于地面标识类别的得分,但往往得分最高的位置并不一定跟实际位置最贴合,所以在位置预测精度上,R-FCN 并不完美。


2)级联检测器


随着深度学习的发展以及业界对目标检测识别位置精度的要求不断提高,更多高精度检测识别算法被提了出来,如 Iou-Net 等。


我们适时采用了更加先进的识别算法,以期获得更加精准的位置精度来满足产线业务需求,结合级联检测,利用 Deformable-Conv 自适应感受野等技术提升算法识别精度。


该算法不同于传统算法对 roi 进行一次预测回归得到最终位置,而是通过级联的形式不断修正预测的位置和实际位置的偏差,每经过一个级联回归器,算法识别结果均会更加贴合真值,这非常有利于提高识别精度,契合高精地图对目标位置精度的高要求,最后在召回和位置精度上都达到更好的效果。



图 6. 级联检测算法原理图


以下为一些算法识别结果示例:



图 7. 级联检测算法识别示例


通过引入级联形式的检测识别模型令高精产线自动识别能力在识别精度上得到了不错的提升,但我们对自动识别位置精度提升的挖掘是无止尽的,所以有了以下的方案。


3)级联检测 + 局部回归


设想一下,如果我们在地面标识区域进行局部的位置回归,那么网络就能够聚焦到更加细微的地面标识区域,最终得到更加接近边界的位置。结合实际在做地面标志识别时,我们将容易造成精度问题的部分单独做位置精修,得到了更加精细的位置。


以下为部分算法识别结果示例:



图 8. 算法识别示意图


采用检测+回归技术方案实现了更加好的位置检测精度,让我们离“真实世界”更进了一步。其缺点是技术方案流程较长,不够简洁美观。


4)基于角点的检测


基于角点回归的目标检测方法,使用单个卷积神经网络预测两组热力图来表示不同物体类别的角的位置,即将目标边界框检测为一对关键点(即边界框的左上角和右下角),以及每个检测到的角点的嵌入向量。其中角点用于确定目标位置,嵌入向量用于对属于同一目标的一对角点进行分组。


此种方法简化了网络的输出,通过将目标检测为成对关键点,消除了现有的检测器设计中对特征层需要大量 anchors 的弊端,因为大量 anchors 造成了大量的重叠以及正负样本不均衡。同时为了产生更紧密的边界框,网络还预测偏移以精细调整角点的位置。通过预测热力图、嵌入向量、以及偏移最终得到了精确的边界框。



图 9. 角点检测示意图


由于在检测任务中需要获取相同尺寸的特征图对目标进行位置回归、类别分类等,算法会对其进行量化以及降采样等操作,不可避免会有精度上的损失。这个弊端带来的最大影响就是经由检测回归出的位置不够鲁棒,在某些情况下会出现或多或少的偏移。


5)级联检测 + 分割精修


随着语意分割技术的不断成熟,基于深度学习的语意分割已经能够将输入图像进行像素级的分类,而且其精度也越来越高,也就是图片中要素的轮廓越来越精细。


我们采用以 resnet 为主干的分割模型,并结合了自适应感受野、多尺度融合、Coarse-Fine 融合、感兴趣区域注意力机制等技术实现了对地面标识的像素级分割。


为了获取地面标识的实体信息,我们仍然用检测来确定地面标识大致位置,但是不同的是最终由对应区域的地面标识分割语义信息获取最终精确的地面标识位置。



图 10. 地面标识分割示意图


以下为部分检测结合精修示例图:



图 11. 分割精修示例


语义分割的引入使得地面标识的识别位置精度得到了改善,解决了由检测带来的识别位置精度不鲁棒的问题,使得高精地图地面标识自动化效果上了一个新的台阶。


但是这种方法稍显繁琐,而且检测和分割任务都需要耗费大量 GPU 资源,也就是说一张图片需要同时多次 GPU 运算加上后续的 CPU 后处理融合才能够得到最终的结果,如果能够将这些步骤优化,那么必然能够简化流程同时节省大量运算资源。


6)PAnet


基于以上考虑,我们采用了基于 PAnet 的检测识别算法。传统的实例分割模型各层中的信息传播不够充分。PAnet 较好的解决了这些问题,充分融合了 coarse、fine 特征,不仅有自顶向下的特征融合还结合了自底向上的特征融合,在高层特征中充分融合进了底层的强定位特征,解决了浅层特征信息丢失的问题。


另外还结合了自适应特征降采样将不同特征层进行融合提取 roi 特征做预测,以及添加额外 mask 前景背景分类分支,使得预测 mask 更加精确,这些手段结合对于目标检测位置精度有比较大的收益。同时,分割和检测任务结合能够互相促进取得更好的结果。



图 12. PAnet 示意图


以下为一些算法的识别结果示例。可以看到算法对部分磨损模糊的地面标识也有了一定的宽容度,其位置精度有了巨大的改善。(图中地面标识外框为检测得到的大概位置,内框为根据像素级分割得到的位置,取内框为地面标识最终位置)。



图 13. 检测识别实例


采用上述方案需要将点云投影为 2D 空间,中间有一定的归一化量化操作,不可避免的会损失一些信息,最直观的是在一些点云反射率较低的地方容易造成目标丢失。如果能够在原始 3 维点云上提取那么这些问题就迎刃而解。


7)基于 3 维点云的目标检测


基于上面的考虑,我们探索原始点云上的 3D 物体检测,3D 点云识别是各种真实世界应用的一个重要组成部分,如自主导航、重建、VR/AR 等。与基于图像的检测相比,激光雷达提供可靠的深度信息,可以用于精确定位物体并表征它们的形状。


我们探索了多种 3 维点云识别算法,比如基于 bird-view、voxel 等的 3 维点云识别。由于 PointRCNN 在原始 3 维点云目标检测上的良好表现,我们采用基于 PointRCNN 的方法提取地面标识,整个检测框架包括两个阶段:第一阶段将整个场景的点云分割为前景点和背景点,以自下而上的方式直接从点云生成少量高质量的 3D proposal。


第二阶段在规范坐标中修改候选区域获得最终的检测结果,将每个 proposal 经池化后转换为规范坐标,以便更好地学习局部空间特征,同时与第一阶段中全局语义特征相结合,用于预测 Box 优化和置信度预测。



图 14. 3 维点云检测


4. 效果与收益


大数据的支撑使得我们的算法拥有更好的鲁棒性与识别能力。结合算法中各种策略以及多种数据源(点云、可见光等),我们在不断提升地面标识识别精度,其位置精度在 Ground Truth 5cm 范围区间内达到 99%以上,召回也达到了 99.99%以上,各项指标都得到了稳步提升。


上述方案已经正式上线,并处理了大量数据,准召率都达到了生产作业的要求,同时算法对人工作业产线的效率提升作用日益提高。以下是部分效果图:




图 15. 地面标识检测效果图


5. 写在最后


高精地图被称作自动驾驶系统的“眼睛“,与普通地图最大的不同点在于使用主体不同。普通导航地图的使用者是人,用于导航、搜索,而高精地图的使用者是计算机,用于高精度定位、辅助环境感知、规划与决策。因而高精地图对地图要素不仅需要极高的召回率,还需要非常高的位置精度。


高精地图中要素的识别对技术提出了比较高的要求,纵观整个高精地图产业发展,地图制作逐渐从纯人工过渡到半自动乃至全自动。期间识别技术也不断得到发展与完善,从手动构造特征到自动特征、从 2 维识别到 3 维以及更高维识别、从单源识别到多源融合等。


目前,高精地图多采用人工作业,人工作业质量和效率始终是一个矛盾点,相比之下,机器自动识别有着更高的效率、更低的作业成本以及不亚于人工的作业质量。自动识别的应用必将加速高精地图构建,推动高精地图产业发展。高精度地面标识识别技术已经在高德高精地图内部得到应用,有效提升了数据制作效率与制作质量,为高德构建高精地图提供坚实的技术支撑。


本文转载自公众号高德技术(ID:amap_tech)。


原文链接


https://mp.weixin.qq.com/s?__biz=Mzg4MzIwMDM5Ng==&mid=2247484387&idx=1&sn=963592ebacf02c750408f641df0feea0&chksm=cf4a5b00f83dd216561834c4af3f2ec3d785e1a3e682184a509820ec7eb833edad15f0ab921a&scene=27#wechat_redirect


2019 年 12 月 01 日 08:082624

评论

发布
暂无评论
发现更多内容

贴吧电纸书资深用户,从7个方面详谈BOOX Poke2上手体验!

DT极客

为什么你要学习 Go?

司徒公子

go golang 编程语言 谷歌Google

ARTS_20200529

凌轩

Java ARTS 打卡计划

k8s 上运行我们的 springboot 服务之——大文件读写

柠檬

Java nio

我们可能都误解了什么是情商

七镜花园-董一凡

情绪

图片与标题的Ken Burns动效

寇云

CSS css3

Vol.10 Java 25岁了!

Lanpeng20

Java jdk 编程语言 Java25周年

大厂为什么不招30岁以上程序员,看这篇就够了

金刚小书童

职业规划 技术管理 程序员成长 程序员次第 职业成长

平台化服务的基石:权限模型设计

孤岛旭日

企业架构 用户权限 数据建模

谈谈控制感(11):这样提升控制感,谁都能做到

史方远

心理 成长

Nginx 入门及命令行操作

子杨

nginx 运维

Nginx 基础原理和命令行的真相

子杨

nginx 运维

一位测试工程师的自我介绍

姬翔

测试

奈学干货分享:分布式CAP实践分析

奈学教育

分布式

基于 Markdown 的中文文档排版规范

Murphy

markdown 排版规范 GitHub GFM 物联网学前班

毫无意义的人生唯有编织图案

xyz

备案问题汇总

云也退

网站 备案

阿里巴巴为什么让初始化集合时必须指定大小?

王磊

Java 性能

Cassandra可调一致性的使用及原理

老任物联网杂谈

大数据 分布式 Cassandra 可调一致性

终于找到了一篇文章!通俗地讲解计算机工作原理

图灵社区

cpu 存储器 编译器 计算机工作原理

产业区块链:产业是本质,区块链是工具

CECBC区块链专委会

新基建 CECBC 区块链技术 中国电子

2020智源-京东多模态对话挑战赛开战 产学研联合推动AI技术发展

DT极客

工厂模式(三)泛型工厂的概念以及示例代码

LSJ

Mysql常用删除方式比较

云也退

MySQL

幂等问题及解决方案

Joker

幂等 解决方案

Spring源码-BeanFactory创建Bean

云淡风轻

spring 源码

JUC整理笔记四之梳理VarHandle(上)

JFound

Java

广告的发展历程

子悠

广告 计算广告 广告系统 互联网广告 RTB

Django ListView DetailView等基于类的视图如何添加装饰器?

Young先生

Python django LiveView 装饰器

只需CSS的下拉式导航菜单

寇云

CSS css3

Spring Bean生命周期——初始化和销毁

xiaoxi666

Java spring

高精地图中地面标识识别技术历程与实践-InfoQ