GPS定位精度高,且早已成爲移動設備標配,但GPS也具備一些難以克服的缺陷,包括:算法
用戶須要持續的有效定位,所以須要另外一個技術對GPS進行補充,這就是網絡定位技術。數據庫
網絡定位是將手機設備收到的信號(主要是基站、Wifi、藍牙)發送到網絡服務器,得到位置。之因此要將信號數據發送到網絡上,是由於網絡定位是利用信號指紋進行定位,須要一個龐大的且持續更新的指紋數據庫,這個數據庫難以同步到移動設備上。爲了進行定位,須要事先創建每一個位置的指紋特徵,而後在定位時用實時指紋比對每一個位置的歷史指紋,肯定位置。服務器
高德網絡定位不只承擔着高德地圖用戶的定位請求,還面向國內全部主流手機廠商,以及國內30萬以上App提供服務,日均處理請求千億次,峯值QPS百萬級。網絡
在過去的幾年中,高德網絡定位算法經歷了從無監督算法向有監督算法的演進,從定位精度、定位能力透出等方面都有了顯著的提高。架構
注:高德網絡定位只存在於安卓平臺上,在iOS上因爲蘋果公司未開聽任何定位相關的指紋數據(Wifi、基站列表等),定位結果所有來自於iOS自身。函數
經典的指紋定位算法是無監督算法,其核心是計算指紋的類似性,用指紋肯定位置。下圖是一個例子,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的信號強度進行直方圖統計,便可計算出機率,最後對全部格子的機率進行排序,得到機率最高的那一個,以下圖:
無監督算法的一個問題,是難以迭代,對於badcase沒法進行有效優化,一旦調整策略就會影響到其餘case,沒法得到全局最優。
所以,有監督學習就變得頗有必要,高德定位從近兩年開始全面轉向有監督學習,持續進行特徵和模型設計,提高效果,取得了不錯的收益,解決了50%以上的大偏差問題(5千米以上),在移動Wifi識別上得到了99%以上的識別準確率。
有監督學習須要使用大量的特徵,特徵的計算須要消耗較多資源,考慮到定位服務要承受10萬以上的QPS,模型的複雜性與效果同等重要,所以咱們首先將定位服務進行了分層,上面的層級針對大網格,計算粗略的位置,下面的層級針對小網格,逐步細化位置。這樣能夠極大減小沒必要要的計算,在性能和效果間取得平衡。
對於每個單獨的算法模塊,都採用相似下面的神經網絡模型對每一個候選網格進行打分,再使用LTR損失函數做爲目標進行訓練,從而得到神經網絡的參數。在特徵方面,同時考慮如下三類:
採用這種方法能夠解決絕大部分格子選擇不許確的問題,遺留的一個問題是當定位依據特別少的時候,好比只有一個基站和一個Wifi,兩者分別位於距離較遠的兩個網格,此時不管選擇哪一個都有50%的錯誤機率。爲了解決這個問題,咱們引入了用戶歷史定位點輔助進行各自選擇。
在特徵部分加入歷史定位點序列,輸出一個歷史位置特徵(能夠當作是一個預測的新位置),讓這個預測位置參與網格打分。當有兩個距離較遠但打分接近的網格進行對比時,經過預測位置進行加權。這樣模型應該能夠學出這樣的規律:若是網格距離預測位置比較遠,打分就下降,若是比較近,分就高。經過這個方法,大偏差case的比例能夠下降20%。
用戶在不一樣場景下對定位的要求是不一樣的,好比用戶在旅途中可能只須要知道大體的位置,不須要很精確,可是在導航時就須要精確的知道本身在哪條道路上,距離出口多遠。
所以,除了在總體算法架構上進行優化,高德還在不一樣特定場景上進行鍼對性的優化,知足用戶不一樣場景下的定位需求。
室內場景
指紋定位的一個侷限,是須要採集帶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%以上,實現地鐵報站和換乘提醒。
在將來,定位技術特別是移動設備的定位技術還將快速發展,主要突破可能來自如下方面:
圖像定位:谷歌已經發布了基於街景的AR定位,能夠解決在城市峽谷區域內的精準定位。這種定位利用了更豐富的數據源,對用戶體驗的提高也會很是顯著。
5G定位:5G相比4G,頻率更高,頻帶更寬,用於測距時精度更高(好比利用相位差進行傳輸時間計算),行業協會也在孵化5G定位相關的標準,運營商在將來可能會支持基於5G網絡的定位,屆時在5G覆蓋區將會有相似GPS精度的定位效果。
IOT定位:隨着物聯網的普及,基於NB-IOT的定位技術也會應運而生,它可使用相似基站定位的方法,或者使用P2P定位的方法爲物聯網設備進行定位。
本文做者:高德技術小哥
本文爲阿里雲內容,未經容許不得轉載。