高德網路定位演算法的演進
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的位置進行加權平均即可獲得最終位置。
這種方法需要解決的一個挑戰是當有多個候選位置時如何選擇,如下圖所示,有兩個候選位置。
此時需要設計一個策略進行簇選擇,基於每個簇的特徵進行打分,找出最有可能的一個簇作為使用者位置。
基於加權平均的定位,速度很快,但精度比較差,原因是指紋在空間上的分佈並不是連續的,而可能受到建築、地形、道路的影響,呈現一種不規則的分佈,於是在上面定位方式的基礎上,發展出一種基於格子排序的演算法,可以更精準的定位。
首先將地球劃分為25*25的網格,然後統計每個網格內的指紋特徵,最後進行格子排序。設候選網格為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定位的方法為物聯網裝置進行定位。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69941357/viewspace-2670416/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- javaweb使用高德地圖進行網頁定位JavaWeb地圖網頁
- 高德網路定位之“移動WiFi識別”WiFi
- 網路 Server 模型的演進Server模型
- 高德全鏈路壓測——語料智慧化演進之路
- 高德深度資訊接入的平臺化演進
- 導航定位向高精定位的演進與實踐
- Citizen Brando:社交網路演進史
- 從 0-1 聊聊網路的演進
- js高德API定位JSAPI
- 網路邊界—安全防護思想的演進
- LBS定位系統架構是如何演進的架構
- 高德引擎構建及持續整合技術演進之路
- 高德地圖定位實現地圖
- 各大網際網路公司架構演進之路彙總架構
- 虛擬化網路演進模擬對話
- 揭秘!文字識別在高德地圖資料生產中的演進地圖
- 高德客戶端及引擎技術架構演進與思考客戶端架構
- 高德AR & 車道級導航技術演進與實踐
- 從網路接入層到 Service Mesh,螞蟻金服網路代理的演進之路
- 揭祕!文字識別在高德地圖資料生產中的演進地圖
- 電商搜尋演算法技術的演進演算法
- Flutter整合高德定位和地圖功能Flutter地圖
- 圖說母嬰網購平臺演進路——資訊圖
- 網路故障排除工具 | 快速定位網路故障
- 許式偉:二十年的演進,網際網路的下個時代是什麼?
- 移動網際網路:高德的十字路口
- 大型網際網路系統架構演進 BATJ其實無需神化架構BAT
- IP定位的具體網路應用
- 大型網站技術架構的演進網站架構
- Http的演進HTTP
- 蜂窩網路TDOA定位方法的Fang演算法研究及模擬糾錯演算法
- 詳解在Android中整合高德定位功能Android
- 高德地圖的四處進擊地圖
- 雷軍網際網路大會演講:網際網路突飛猛進告一段落 會飛的豬少了
- 架構的演進架構
- 【高德地圖API】從零開始學高德JS API(七)——定位方式大揭祕地圖APIJS
- dubbo應用架構演進路線圖應用架構
- 護網行動與攻防演練的聯絡?網路安全攻防演練的意義!