机器学习在交通标志检测与精细分类中的应用

2023-11-18

 导读


数据对于地图来说十分重要,没有数据,就没有地图服务。用户在使用地图服务时,不太会想到数据就像冰山一样,用户可见只是最直接、最显性的产品功能部分,而支撑显性部分所需要的根基,往往更庞大。

地图数据最先是从专业采集来的,采集工具就是车、自行车、飞机和卫星影像等,近两年有了利用智能硬件的众包采集。采集之后,就是把数据更新的速度和精准度都无限提升。因为地面上变化太快了,用户越来越依赖于地图应用。所以数据更新的速度和数据的准确度就是在乎用户体验的地图公司的第一要务了。而数据更新的第一步,就是交通标志检测。

本文将主要介绍机器学习技术在高德的地图数据生产的具体应用,这些技术方案和设计都已经过验证,取得了不错的效果,并且为高德地图数据的快速更新提供了基础的技术保证。

 

“交通标志检测”定义


交通标志检测,特指在普通街景图像上通过自动化手段检测出各种类型的交通标志,如限速、禁止掉头、人行横道和电子眼等。这些检测结果将作为生产数据交付给地图数据制作流程,最终演变为服务于广大用户的地图数据。

 

难点与挑战


交通标志检测的主要难点有样式繁杂,且在拍摄过程中受自然环境的影响较大。此外,为满足数据更新的速度和数据准确度的要求,对于算法的性能要求也格外严格。

样本形态差异大

交通标志的形态差异主要体现在:

  • 类型繁多:国标定义的交通标志有几百个类型;

  • 形状多样:常见交通标志的形状有三角形、圆形、方形、菱形、八边形等,还有地面标线、电子眼、信号灯,以及限高杆、栅栏等物理设施;

  • 颜色分布广泛:常见的有黄色、红色、蓝色、绿色、黑色、白色等;

  • 图像内尺寸差异大:从几百像素(如方牌、人行横道等)到十几像素(如电子眼)不均匀分布;

图1 常见道路交通标志(标牌类)

自然场景下变化多端

在自然场景下,交通标志存在树木或车辆遮挡、磨损等情况;天气、季节等也会影响到图像采集过程中,造成图像模糊、颜色失真等。

图2 自然场景下拍摄的交通标志

一些外形与交通标志相似的标牌,如商户的招牌、交通公益广告牌等,对算法的准确率造成极大的挑战。

图3 类似交通标志的噪声示例

性能要求

  • 准召率:我们的应用场景中对于召回率和准确率的要求极高,任何未召回都会导致数据更新的延迟,而错召回则会影响作业效率与作业周期,最终对数据的快速更新造成影响;

  • 吞吐量:高德每天需要处理上亿张图片,这就要求我们的算法不仅效果要好,处理速度也必须够快,以免造成数据积压,影响地图数据的更新时效;

  • 扩展性:交通标志的类型不是一成不变的(国标会存在调整,不同国家和地区之间各有特色),因此需要算法环节具有非常好的扩展性,能够快速适应新增的各种交通标志类型;

高德地图中的交通标志检测方案


当前学术界针对目标检测任务常用的深度学习模型一般都采用End2End的方式进行训练,以得到全局最优的检测效果。这个方案在使用时非常简单,只需要标注好“几百类物体的样本”,然后放到深度学习的框架里进行迭代训练,就可以获得最终模型,主要可以分为Two Stage(FasterRCNN[1])和One Stage(YOLO[2],SSD[3])两大类。

但是在实际使用过程中,需要应对如下问题:

  • 样本标注成本高:所有训练样本都需要进行全类别标注,当有新增类别时需要将历史训练样本全量补标,成本极高;

  • 无法单类迭代:由于交通标志出现的频率和重要性不等,业务上对于部分类型(如电子眼、限速牌等)的准召率要求更高。但是End2End的模型必须针对所有类型全量迭代,无法优化单一类型,导致算法迭代和测试成本极高;

  • 模型训练难度大:我们需要处理的交通标志有几百类,且各自出现频率差异很大,使用单一目标检测模型完成如此巨大的分类任务,模型训练难度太大,收敛缓慢,召回率、准确率上难以平衡;

结合通用目标检测技术的发展以及高德地图对于交通标志检测的需要,我们最终选择了Faster-RCNN作为基础检测框架,它的检测效果更好(尤其是针对小目标),独立的RPN网路也可以满足扩展性要求。速度方面,我们也进行了针对性的优化调整。

在实际使用时,我们将检测框架分为目标检测与精细分类两阶段:

图4 交通标志检测的目标检测和精细分类阶段

目标检测阶段

目标检测阶段的目的是通过Faster-RCNN在图片中检测所有的交通标志,并进行粗分类,要求极高的召回率和执行速度。在实际使用时,我们采用了如下策略来提升算法能力:

  • 效果方面:将检测目标根据外形特征分为N大类(如圆形、三角形、方形,以及高宽比异常的人行横道等),再为每一类配置专属的RPN网络,各个RPN根据对应的尺寸特性设计Anchor的Ratio和Scale;不同RPN根据需要使用不同层的特征图,设计更有针对性;

  • 效果方面,针对各个类型样本分布不均匀问题,使用多种样本增强手段,并在训练过程中使用OHEM等方式进一步调整样本分布;

  • 效果方面,还借鉴了IoU-Net、Soft-NMS等方案,进一步提升检测效果;

  • 性能方面,各个大类之间共享基础卷积层,保证检测时间不会过分增长;

  • 扩展性方面,对于新增类型,理想情况下只需要新增一个RPN网络单独迭代,可以不对其他类型的效果造成任何影响(如下图,RPN1和RPN2完全独立);

    图5 多RPN设计示意图

精细分类阶段

精细分类阶段的目的是对目标检测阶段得到候选框进行精细分类并滤除噪声,保证极高的召回率和准确率。在实际实现中,还使用以下策略来提升效果:

  • 为每个大类配置独立的精细分类网络,互相之间不干扰;各个大类的迭代完全独立和并行,可以多人并行研发,有效缩短研发周期;

  • 针对各个大类的难易程度,选择不同计算复杂度的网络来完成精细分类和噪声抑制,避免因为某些类型复杂度过高产生效率瓶颈;

  • 样本方面,各个大类可以独立收集样本,可以针对特定类型进行收集和标注,训练和测试集合的构建效率大幅提升;

如下图,针对圆形标牌,其差异比较明确,可以使用简单网络;针对方牌,需要根据文字布局和内容来区分正负样本,分类难度大,因此必须使用较深的网络:

 

图6 精细分类模块示意图

由于同时使用了多个模型,上述方案会导致服务器的显存占用显著增加,对计算资源产生额外要求。针对该问题,我们针对深度学习框架进行优化,动态分配并在各模型间共享临时缓冲区,并裁剪框架的反向传播功能,最终使得显存占用降低50%以上。

 

效果与收益


上述方案已经正式上线,准召率都达到了生产作业的要求,日均图片吞吐量在千万以上。以下是部分效果图(不同框代表不同检测结果):

 

 

 

图7 交通标志检测效果图

小结


交通标志检测技术已经在高德地图内部得到应用,有效提升了高德地图的数据制作效率,达成地图数据更新速度接近T+0(时间差为零)的目标。

目前我们也在把机器学习技术用于数据的自动化制作,进一步减少现实世界和地图数据之间的差异,做到“连接真实世界,让出行更美好”。

 关注高德技术,找到更多出行技术领域专业内容

转载于:https://www.cnblogs.com/amap_tech/p/11238638.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

机器学习在交通标志检测与精细分类中的应用 的相关文章

随机推荐

  • 【Python学习笔记】Python中的heapq

    Python中的heapq 1 基本介绍 堆是非线性的树形的数据结构 有两种堆 大根堆与小根堆 大根堆 树中各个父节点的值总是大于或等于任何一个子节点的值 小根堆 树中各个父节点的值总是小于或等于任何一个子节点的值 我们一般使用二叉堆来实现
  • python稳定版本是哪些_python3哪个版本稳定_后端开发

    C语言中关系表达式和逻辑表达式的值是什么 后端开发 关系表达式和逻辑表达式的值是布尔型 分别为真 true 或假 false 即0或1 但c语言没有布尔类型 以0为假 非0即真 python3哪个版本稳定 python3中3 4比较稳定 基
  • android状态栏(沉浸式状态栏,改变状态栏字体颜色,背景颜色)

    通过主题设置状态栏 在API21 android 5 0 之后 设置状态栏透明效果为半透明 并且为了保证在API19 android 4 4 正常使用 所以需要3份不同的style文件 即values v19 android 4 4之后使用
  • ajax请求,进行ajax处理后端特殊字符串

    前端传入officeId的值 将office对应ip地址传入到 function getinipaddress var officeId document getElementById officeId value var isinheri
  • Linux学习第16天:Linux设备树下的LED驱动开发:举一反三 专注专心专业

    Linux版本号4 1 15 芯片I MX6ULL 大叔学Linux 品人间百味 思文短情长 在开题之前 先说一下这次的题目 尤其是后面的 举一反三 专注专心专业 到底想给大家传递什么信息 LED驱动开发 目前为止已经学了好几种方法 包括裸
  • python实现常用数据结构

    本文基于Python实现以下几种常用的数据结构 栈 队列 优先队列 二叉树 单链表 双向链表 栈 基于List实现 class Stack 栈 def init self self arr self size 0 def push self
  • windows 10自带命令查看文件的哈希值

    windows的powershell自带了查看文件哈希值的命令 Get FileHash 文件名 Algorithm MD5 SHA1 SHA256 案例 查看文件的MD5值 查看文件的SHA1值 查看文件的SHA256值
  • springboot调整请求头大小_SpringBoot http post请求数据大小设置操作

    背景 使用http post请求方式的接口 使用request getParameter XXX 的方法获取参数的值 当数据量超过几百k的时候 接口接收不到数据或者接收为null RequestMapping value rcv metho
  • GitHub Flavored Markdown 规范

    Markdown是一种轻量级标记语言 它以纯文本形式编写文档 易读 看起来舒服 易写 语法简单 易更改 并最终以HTML格式发布 由于markdown没有明确指定语法 随着编译器不一样 实现方式有很大差异 GitHub Flavored M
  • SocketOutputStream和SocketChannel write方法的区别和底层实现

    Java直接内存原理提到了SocketChannel write的实现原理 通过IOUtil write将java堆内存拷贝到了直接内存 然后再把地址传给了I O函数 那么 BIO 是怎么实现往socket里面写数据的呢 BIO Socke
  • Java多线程知识点总结(思维导图+源码笔记)

    转自 https blog csdn net yelvgou9995 article details 107408709 多线程大家在初学的时候 对这个知识点应该有不少的疑惑的 我认为主要原因有两个 多线程在初学的时候不太好学 并且一般写项
  • Sitecore站点更新License

    一 简介 Sitecore 是一个基于ASP NET 技术的 CMS 系统 它不仅具有传统 Web CMS 的所有功能 还集成了 Marketing 营销 当然 这个功能价格不菲 的功能 可以提供一个一站式的在线营销解决方案 对于 NET
  • 深入理解数据结构——哈夫曼树

    include
  • [589]IDM下载器

    Internet Download Manager 简称 IDM 是一种将下载速度提高5倍的工具 可以恢复和安排下载 由于连接丢失 网络问题 计算机关机或意外停电等原因 全面的错误恢复和恢复功能将重新启动中断或中断的下载 简单的图形用户界面
  • 最快实现一个自己的扫地机

    作者 良知犹存 转载授权以及围观 欢迎关注微信公众号 羽林君 或者添加作者个人微信 become me 扫地机介绍 扫地机器人行业本质是技术驱动型行业 产品围绕导航系统的升级成为行业发展的主旋律 按功能划分 扫地机器人分为四大系统 即导航系
  • 【视频解读】AutoGluon背后的技术

    1 资料来源 AutoGluon背后的技术 哔哩哔哩 bilibili 也是一种Automl框架 在尽量不需要人的帮助下 对输入进行特征提取 选取适合的机器学习模型对它进行训练 大部分基于超参数搜索技术 从数十或者数百个参数中选取一个合适的
  • 判断List、Map集合是否为空的方法

    在Java中 判断集合是否为空有几种方法 以下是其中的一些 1 使用List isEmpty 方法 例如 List
  • openGL之API学习(六十三)GL_RASTERIZER_DISCARD

    glEnable GL RASTERIZER DISCARD 使用GL RASTERIZER DISCARD标志作为参数调用glEnable 函数 告诉渲染管线在transform feedback可选阶段之后和到达光栅器前抛弃所有的图元
  • 与计算机信息技术有关的课题,信息技术课题研究报告.doc

    PAGE PAGE 1 信息技术环境下教学模式和教学方法的创新研究 课题研究报告 摘要 本课题由中央电教馆与有关专家在充分论证的基础上 于2006年12月被批准为中央电化教育馆全国教育技术 十一五 专项课题 在中央电教馆组织下 课题研究得到
  • 机器学习在交通标志检测与精细分类中的应用

    导读 数据对于地图来说十分重要 没有数据 就没有地图服务 用户在使用地图服务时 不太会想到数据就像冰山一样 用户可见只是最直接 最显性的产品功能部分 而支撑显性部分所需要的根基 往往更庞大 地图数据最先是从专业采集来的 采集工具就是车 自行