数据对于地图来讲十分重要,没有数据,就没有地图服务。用户在使用地图服务时,不太会想到数据就像冰山同样,用户可见只是最直接、最显性的产品功能部分,而支撑显性部分所须要的根基,每每更庞大。算法
地图数据最早是从专业采集来的,采集工具就是车、自行车、飞机和卫星影像等,近两年有了利用智能硬件的众包采集。采集以后,就是把数据更新的速度和精准度都无限提高。由于地面上变化太快了,用户愈来愈依赖于地图应用。因此数据更新的速度和数据的准确度就是在意用户体验的地图公司的第一要务了。而数据更新的第一步,就是交通标志检测。服务器
本文将主要介绍机器学习技术在高德的地图数据生产的具体应用,这些技术方案和设计都已通过验证,取得了不错的效果,而且为高德地图数据的快速更新提供了基础的技术保证。网络
交通标志检测,特指在普通街景图像上经过自动化手段检测出各类类型的交通标志,如限速、禁止掉头、人行横道和电子眼等。这些检测结果将做为生产数据交付给地图数据制做流程,最终演变为服务于广大用户的地图数据。框架
交通标志检测的主要难点有样式繁杂,且在拍摄过程当中受天然环境的影响较大。此外,为知足数据更新的速度和数据准确度的要求,对于算法的性能要求也格外严格。机器学习
交通标志的形态差别主要体如今:工具
类型繁多:国标定义的交通标志有几百个类型;布局
形状多样:常见交通标志的形状有三角形、圆形、方形、菱形、八边形等,还有地面标线、电子眼、信号灯,以及限高杆、栅栏等物理设施;性能
颜色分布普遍:常见的有黄色、红色、蓝色、绿色、黑色、白色等;学习
图像内尺寸差别大:从几百像素(如方牌、人行横道等)到十几像素(如电子眼)不均匀分布;测试
在天然场景下,交通标志存在树木或车辆遮挡、磨损等状况;天气、季节等也会影响到图像采集过程当中,形成图像模糊、颜色失真等。
一些外形与交通标志类似的标牌,如商户的招牌、交通公益广告牌等,对算法的准确率形成极大的挑战。
准召率:咱们的应用场景中对于召回率和准确率的要求极高,任何未召回都会致使数据更新的延迟,而错召回则会影响做业效率与做业周期,最终对数据的快速更新形成影响;
吞吐量:高德天天须要处理上亿张图片,这就要求咱们的算法不只效果要好,处理速度也必须够快,以避免形成数据积压,影响地图数据的更新时效;
扩展性:交通标志的类型不是一成不变的(国标会存在调整,不一样国家和地区之间各有特点),所以须要算法环节具备很是好的扩展性,可以快速适应新增的各类交通标志类型;
当前学术界针对目标检测任务经常使用的深度学习模型通常都采用End2End的方式进行训练,以获得全局最优的检测效果。这个方案在使用时很是简单,只须要标注好“几百类物体的样本”,而后放到深度学习的框架里进行迭代训练,就能够得到最终模型,主要能够分为Two Stage(FasterRCNN[1])和One Stage(YOLO[2],SSD[3])两大类。
可是在实际使用过程当中,须要应对以下问题:
样本标注成本高:全部训练样本都须要进行全类别标注,当有新增类别时须要将历史训练样本全量补标,成本极高;
没法单类迭代:因为交通标志出现的频率和重要性不等,业务上对于部分类型(如电子眼、限速牌等)的准召率要求更高。可是End2End的模型必须针对全部类型全量迭代,没法优化单一类型,致使算法迭代和测试成本极高;
模型训练难度大:咱们须要处理的交通标志有几百类,且各自出现频率差别很大,使用单一目标检测模型完成如此巨大的分类任务,模型训练难度太大,收敛缓慢,召回率、准确率上难以平衡;
结合通用目标检测技术的发展以及高德地图对于交通标志检测的须要,咱们最终选择了Faster-RCNN做为基础检测框架,它的检测效果更好(尤为是针对小目标),独立的RPN网路也能够知足扩展性要求。速度方面,咱们也进行了针对性的优化调整。
在实际使用时,咱们将检测框架分为目标检测与精细分类两阶段:
目标检测阶段的目的是经过Faster-RCNN在图片中检测全部的交通标志,并进行粗分类,要求极高的召回率和执行速度。在实际使用时,咱们采用了以下策略来提高算法能力:
效果方面:将检测目标根据外形特征分为N大类(如圆形、三角形、方形,以及高宽比异常的人行横道等),再为每一类配置专属的RPN网络,各个RPN根据对应的尺寸特性设计Anchor的Ratio和Scale;不一样RPN根据须要使用不一样层的特征图,设计更有针对性;
效果方面,针对各个类型样本分布不均匀问题,使用多种样本加强手段,并在训练过程当中使用OHEM等方式进一步调整样本分布;
效果方面,还借鉴了IoU-Net、Soft-NMS等方案,进一步提高检测效果;
性能方面,各个大类之间共享基础卷积层,保证检测时间不会过度增加;
扩展性方面,对于新增类型,理想状况下只须要新增一个RPN网络单独迭代,能够不对其余类型的效果形成任何影响(以下图,RPN1和RPN2彻底独立);
精细分类阶段的目的是对目标检测阶段获得候选框进行精细分类并滤除噪声,保证极高的召回率和准确率。在实际实现中,还使用如下策略来提高效果:
为每一个大类配置独立的精细分类网络,互相之间不干扰;各个大类的迭代彻底独立和并行,能够多人并行研发,有效缩短研发周期;
针对各个大类的难易程度,选择不一样计算复杂度的网络来完成精细分类和噪声抑制,避免由于某些类型复杂度太高产生效率瓶颈;
样本方面,各个大类能够独立收集样本,能够针对特定类型进行收集和标注,训练和测试集合的构建效率大幅提高;
以下图,针对圆形标牌,其差别比较明确,可使用简单网络;针对方牌,须要根据文字布局和内容来区分正负样本,分类难度大,所以必须使用较深的网络:
因为同时使用了多个模型,上述方案会致使服务器的显存占用显著增长,对计算资源产生额外要求。针对该问题,咱们针对深度学习框架进行优化,动态分配并在各模型间共享临时缓冲区,并裁剪框架的反向传播功能,最终使得显存占用下降50%以上。
上述方案已经正式上线,准召率都达到了生产做业的要求,日均图片吞吐量在千万以上。如下是部分效果图(不一样框表明不一样检测结果):
交通标志检测技术已经在高德地图内部获得应用,有效提高了高德地图的数据制做效率,达成地图数据更新速度接近T+0(时间差为零)的目标。
目前咱们也在把机器学习技术用于数据的自动化制做,进一步减小现实世界和地图数据之间的差别,作到“链接真实世界,让出行更美好”。
本文为云栖社区原创内容,未经容许不得转载。