高德网络定位算法的演进

1.导读

GPS定位精度高,且早已成为移动设备标配,但GPS也具备一些难以克服的缺陷,包括:算法

  • 冷启动时间长。GPS启动时,须要进行搜星,锁定卫星信号,而后再进行位置技术,这个过程可能会达到几十秒,即便采用诸如AGPS等技术,仍然有秒级的时间没法定位。
  • 室内或有遮挡的场景。GPS信号弱,没法有效定位。

用户须要持续的有效定位,所以须要另外一个技术对GPS进行补充,这就是网络定位技术。数据库

网络定位是将手机设备收到的信号(主要是基站、Wifi、蓝牙)发送到网络服务器,得到位置。之因此要将信号数据发送到网络上,是由于网络定位是利用信号指纹进行定位,须要一个庞大的且持续更新的指纹数据库,这个数据库难以同步到移动设备上。为了进行定位,须要事先创建每一个位置的指纹特征,而后在定位时用实时指纹比对每一个位置的历史指纹,肯定位置。服务器

高德网络定位不只承担着高德地图用户的定位请求,还面向国内全部主流手机厂商,以及国内30万以上App提供服务,日均处理请求千亿次,峰值QPS百万级。网络

在过去的几年中,高德网络定位算法经历了从无监督算法向有监督算法的演进,从定位精度、定位能力透出等方面都有了显著的提高。架构

注:高德网络定位只存在于安卓平台上,在iOS上因为苹果公司未开听任何定位相关的指纹数据(Wifi、基站列表等),定位结果所有来自于iOS自身。函数

2.基于聚类的无监督算法

经典的指纹定位算法是无监督算法,其核心是计算指纹的类似性,用指纹肯定位置。下图是一个例子,AP表明手机扫描到的基站和Wifi设备编号,纵轴表明不一样的位置,两者交点的数值表明该位置扫描到该AP的信号强度,为空表明该位置没有扫描到该AP。性能

要对一个新按期请求进行定位(好比AP1:-30,AP2:-50,AP3:-90),一个最简单的方法,是用KNN逐一计算该指纹与历史指纹的类似度(好比用L2距离或者余弦类似度),取类似度最大的历史位置做为用户位置。学习

这有两个问题,第一是计算量太大(AP是10亿量级,loc是千亿量级),没法知足实时定位的要求,第二是历史指纹在局部可能比较稀疏,对于用户指纹没法精确匹配。大数据

因而须要对历史数据进行预处理,提取出AP和网格的通用指纹,这样在定位时只须要比对一次便可。下图是利用一个AP的历史采集位置进行聚类,得到AP实际位置和覆盖半径的过程,有了每一个AP的位置,在定位时将多个AP的位置进行加权平均便可得到最终位置。优化

这种方法须要解决的一个挑战是当有多个候选位置时如何选择,以下图所示,有两个候选位置。

此时须要设计一个策略进行簇选择,基于每一个簇的特征进行打分,找出最有可能的一个簇做为用户位置。

基于加权平均的定位,速度很快,但精度比较差,缘由是指纹在空间上的分布并非连续的,而可能受到建筑、地形、道路的影响,呈现一种不规则的分布,因而在上面定位方式的基础上,发展出一种基于格子排序的算法,能够更精准的定位。

首先将地球划分为25x25的网格,而后统计每一个网格内的指纹特征,最后进行格子排序。设候选网格为l,信号向量是S,则定位过程就是计算

根据贝叶斯公式,有

根据1-1,因为全部候选网格的分母相同,只须要计算分子,即:

其中P(l)是某个位置在全量用户位置中出现的几率,能够用定位PV表示,而P(S=S0|l)则须要计算在每一个网格内出现某种信号向量的几率,因为向量维数高,几率难以计算,所以对不一样维进行独立假设,认为每一个信号出现的几率是独立的。有:

这样,能够基于历史指纹对每一个网格内的每一个AP的信号强度进行直方图统计,便可计算出几率,最后对全部格子的几率进行排序,得到几率最高的那一个,以下图:

3.基于分层排序的有监督算法

无监督算法的一个问题,是难以迭代,对于badcase没法进行有效优化,一旦调整策略就会影响到其余case,没法得到全局最优。

所以,有监督学习就变得颇有必要,高德定位从近两年开始全面转向有监督学习,持续进行特征和模型设计,提高效果,取得了不错的收益,解决了50%以上的大偏差问题(5千米以上),在移动Wifi识别上得到了99%以上的识别准确率。

有监督学习须要使用大量的特征,特征的计算须要消耗较多资源,考虑到定位服务要承受10万以上的QPS,模型的复杂性与效果同等重要,所以咱们首先将定位服务进行了分层,上面的层级针对大网格,计算粗略的位置,下面的层级针对小网格,逐步细化位置。这样能够极大减小没必要要的计算,在性能和效果间取得平衡。

对于每个单独的算法模块,都采用相似下面的神经网络模型对每一个候选网格进行打分,再使用LTR损失函数做为目标进行训练,从而得到神经网络的参数。在特征方面,同时考虑如下三类:

  • AP的动态特征,好比信号强度
  • 网格特征,好比PV、UV、AP数、周边候选网格数等
  • AP在网格上的特征,好比信号强度分布、PV、UV等

采用这种方法能够解决绝大部分格子选择不许确的问题,遗留的一个问题是当定位依据特别少的时候,好比只有一个基站和一个Wifi,两者分别位于距离较远的两个网格,此时不管选择哪一个都有50%的错误几率。为了解决这个问题,咱们引入了用户历史定位点辅助进行各自选择。

在特征部分加入历史定位点序列,输出一个历史位置特征(能够当作是一个预测的新位置),让这个预测位置参与网格打分。当有两个距离较远但打分接近的网格进行对比时,经过预测位置进行加权。这样模型应该能够学出这样的规律:若是网格距离预测位置比较远,打分就下降,若是比较近,分就高。经过这个方法,大偏差case的比例能够下降20%。

4.场景化定位

用户在不一样场景下对定位的要求是不一样的,好比用户在旅途中可能只须要知道大体的位置,不须要很精确,可是在导航时就须要精确的知道本身在哪条道路上,距离出口多远。

所以,除了在总体算法架构上进行优化,高德还在不一样特定场景上进行针对性的优化,知足用户不一样场景下的定位需求。

室内场景

指纹定位的一个局限,是须要采集带GPS的样本做为真值进行训练,因为GPS只能在室外被采集到,即便用户在室内,其定位结果有很大几率在室外,这会对用户形成很多困扰,特别是在用户准备出行的时候,其定位点的漂移会致使起点偏离真实位置较大。

为了解决这个问题,有两个解决办法,一是采集室内真值,但这种方法须要大量人工采集工做,工做量巨大,目前高德在一些热门商场和交通枢纽进行人工指纹采集(除了基站Wifi还支持蓝牙、传感器定位)。第二个办法是借助大数据,无需人工干预,对Wifi进行建筑/POI关联,用建筑/POI位置去修正定位结果。

Wifi-POI关联有多种方法,一个简单的方法是用POI名字与Wifi名字的类似度判断是否有关联,好比麦当劳的Wifi名字就是McDonald,关联的时候须要考虑中英文、大小写、中英文缩写等。从名称能分析出关联关系的Wifi毕竟是少数。另一种覆盖能力更强的方法是利用Wifi信号分布规律去挖掘Wifi的真实位置,毕竟绝大部分Wifi都是部署在室内的。

这里咱们采用的是CNN的方法,将楼块数据、POI数据、采集真值数据绘制为二维图像,而后进行多层卷积计算,label为Wifi所在的真实楼块区域。下图中蓝色块为楼块,绿色为采集点,颜色越亮表明信号强度越高,红色点表明Wifi真实位置。

目前算法能挖掘出30%Wifi对应的真实位置,在最终定位效果上,用户在室内时,能正肯定位到室内的样本比例提高了15%

高铁场景

从用户报错状况看,有大量报错是用户乘坐高铁时定位异常。高铁在近两年开通了车载Wifi,这些Wifi都是移动Wifi,所以这些AP是没有一个固定位置的,若是不进行任何处理,算法训练得到的Wifi位置必定是错误的,很大几率会在沿途的某个车站(用户集中,采集量高)。

针对这种场景,须要将移动Wifi所有去除再进行定位。咱们开发了针对高铁和普通场景的移动Wifi挖掘算法,利用采集点时空分布等特征判断某个Wifi是否移动,挖掘准确率和召回率均超过99%,能够解决绝大部分高铁定位错误的问题。

地铁场景

地铁场景有点相似高铁,用户扫到的Wifi基本都是移动Wifi(少许车站有固定Wifi),所以只能借助基站进行定位。但基站深埋地下,缺少采集数据,如何得到基站的真实位置呢?咱们采用了两种策略,第一个策略是利用相邻基站信息,当用户在一个请求里或者在短暂时间段内同时扫描到地铁基站(无GPS采集)和非地铁基站(有GPS采集)时,咱们能够用后者的位置去推算前者位置,固然这种方式获得的基站位置不太准确。因而咱们进行了进一步优化,利用用户轨迹去精准挖掘出每一个请求对应的地铁站,从而构建出指纹对应的真值。

基于以上方法,地铁内的定位精度可达到90%以上,实现地铁报站和换乘提醒。

5.将来演进

在将来,定位技术特别是移动设备的定位技术还将快速发展,主要突破可能来自如下方面:

图像定位:谷歌已经发布了基于街景的AR定位,能够解决在城市峡谷区域内的精准定位。这种定位利用了更丰富的数据源,对用户体验的提高也会很是显著。

5G定位:5G相比4G,频率更高,频带更宽,用于测距时精度更高(好比利用相位差进行传输时间计算),行业协会也在孵化5G定位相关的标准,运营商在将来可能会支持基于5G网络的定位,届时在5G覆盖区将会有相似GPS精度的定位效果。

IOT定位:随着物联网的普及,基于NB-IOT的定位技术也会应运而生,它可使用相似基站定位的方法,或者使用P2P定位的方法为物联网设备进行定位。


本文做者:高德技术小哥

阅读原文

本文为阿里云内容,未经容许不得转载。

相关文章
相关标签/搜索