前言:又到春招季!做爲國民級出行服務平臺,高德業務快速發展,大量校招/社招名額開放,歡迎你們投遞簡歷,詳情見文末。爲幫助你們更瞭解高德技術,咱們策劃了 #春招專欄#的系列文章,組織各業務團隊的高年級同窗以 業務科普+技術應用實踐爲主要內容爲你們作相關介紹。
本文是#春招專欄#系列的第 3 篇,根據 高德視覺技術中心基礎研發部 負責人郝志會在AT技術講壇分享的《視覺技術在POI名稱自動化生成的實踐》內容整理而成,在不影響原意的狀況下略做刪節。git
AT技術講壇(Amap Technology Tribune)是高德發起的一檔技術交流活動,每期圍繞一個主題,咱們會邀請阿里集團內外的專家以演講、QA、開放討論的方式,與你們作技術交流。算法
郝志會所在團隊涉及到計算機視覺方面不少技術:包括目標的檢測、識別、分割,幾何重建、視覺定位,等等。網絡
高德POI數據的採集機器學習
高德有7000萬以上的POI(Point of Interest,興趣點)數據。每一年還會出現不少新增的POI,也會有一部分POI中止營業、關門倒閉。這些POI如何製做和更新?從採集方式來看會有不少獲取POI的方式,有一種重要並且直觀的採集方式,高德經過衆包方式採集街邊店鋪的圖像,利用計算機視覺技術(以及人工輔助)從圖像中提取POI數據。性能
下圖演示了一次衆包化採集過程。高德的採集人員從這條街走過,拍攝連續圖像。最後把圖像和GPS座標,上傳給高德。學習
下圖是一個POI從採集到生產,再到使用的示意圖。輸入的是連續採集的圖像,對於生產環節,最重要的是計算每一個POI的內容和位置。而後和母庫中的POI匹配,確認這個POI是已經存在的,仍是須要新增。從圖像中識別POI的名稱,計算座標,都須要用到計算機視覺技術。字體
本文主要介紹的是名稱的部分。實際上,高德的POI生產不是全自動化的,而是人機結合的方式。當機器不能自動化,或者置信度較低時,交給人工做業。優化
高德的POI數據採集—生產—使用流程示意圖編碼
POI數據豐富多彩的呈現形式,給自動化的處理過程帶來了挑戰,包括:文字的識別、是否爲POI、文字之間關係、如何命名(定名)…spa
如下圖爲例,從原始圖像,到自動生成POI的名稱,包含了如下幾項關鍵的計算機視覺技術:天然場景文字識別、文本屬性斷定和結構化處理、名稱自動生成…
天然場景文字識別
文字識別,簡單說,就是從一張圖片中,找到裏面的文本,給出正確的字符。從文字識別問題的發展過程來看,它包含了不一樣的子問題。
首先,你們比較熟悉的名詞是OCR,中文翻譯過來是光學字符識別。原意是利用光學掃描儀,將印刷體文字讀成二進制數據,再識別成ascii碼字符,輸出出來。
OCR問題歷史比較悠久,上個世紀80、90年代,就有很多研究論文,以及商業化產品。好比咱們熟悉的深度學習創始人之一Yann Lecun,他在90年代初,就用神經網絡識別手寫的郵政編碼,被美國銀行商用化了。
隨着文字識別技術的發展,它的應用範圍也變多了。除了印刷體、手寫體以外,任何一張普通的包含了文字的圖片,是否是均可以識別出來呢?
在下圖中,中間一列的問題叫作born-digitial,也就是說文字是由電腦生成的,文字的字體、版式,相對比較固定。
第3列是天然場景的文字識別問題,稱爲STR,也就是在真實存在的文字,好比店鋪名稱、路牌,這種文字識別問題,由於拍照的角度問題、光照問題、圖片質量問題,應該說難度是最大的。也是如今學術界研究比較多的一種類型。
固然,如今的STR技術,會面臨不少的挑戰:包括字體問題、排版問題、多語言問題,以及由拍攝帶來的光照問題、模糊問題。
一個店鋪門匾上的文字,比其餘場景的會更復雜,由於它要表達本身的特色,要讓你「過目不忘」,因此更容易出現各類藝術字、各類不一樣的裝飾效果。
並且,高德地圖要維護全國的POI數據,在不一樣城市上,它的地名、店鋪名、品牌名,自己是一個很是大的詞庫。
STR技術發展:傳統算法(before 2012)
先簡單介紹一下STR技術。
天然場景文字識別(STR)的發展大體能夠分爲兩個階段,以2012年爲分水嶺,以前是以傳統圖像算法爲主;以後,進入了深度學習算法的階段。
2012年以前,文字識別的主流算法都依賴於傳統圖像處理技術和統計機器學習方法實現。分爲文本行檢測、文字識別兩部分。
文本行檢測,通常是先預處理,利用二值化、連通域分析、MSER顯著性區域算子等算法,定位文字區域,提取文本行候選,而後經過分類,去除掉無效候選。
文字識別,通常是經過切割,找出字符/單詞的候選,再經過機器學習分類器,對每一個字符/單詞進行分類。
傳統的文字識別方法,在簡單的場景下能達到不錯的效果,可是不一樣場景下都須要獨立設計各個模塊的參數。遇到複雜的場景,很難調整參數,獲得泛化性能好的模型。
STR技術發展:深度學習算法(after 2012)
大概從2012年開始,跟其餘的計算機視覺問題同樣,STR也進入了深度學習的階段。
上面講到的文本行檢測、文字識別兩個子問題,分別都有一些深度學習的模型來解決。下面列舉幾個比較典型的工做。
最左邊,是一個文本行檢測模型,華中科技大學的Textboxes++,它是在相似SSD的網絡結構的基礎上,對四邊形的四個頂點的座標分別作迴歸,以解決長寬比、旋轉這類問題。
中間是一個序列識別模型。能夠說這是在深度學習階段之後,出現的一類新的解題方法。輸入一個字符序列的圖像,傳統的方案是必需要切割成單個字符,或者單詞,再對它們作分類,有了LSTM這種RNN模型,能夠對先後特徵序列作編碼,再經過引入CTC loss,就能夠訓練一個完整的序列識別模型。
除了將文本行檢測、識別兩個環節改形成深度學習的方案之外,也有一些工做在試圖把二者整合起來,造成一個end-to-end的方案。整合的目的是什麼呢?不難想象,若是可以識別出文本的內容,理論上應該能夠檢測的更準。好比,若是能夠識別出「深度學」這3個字,那是否是能夠經過某種網絡的反饋信號告訴檢測器,後面應該還有一個「學習的習」字。
第三列是一個end-to-end的工做,他是把faster r-cnn和LSTM接到同一個網絡裏,在對每一個proposal作分類和座標迴歸的同時,也作字符的識別。
高德的STR技術
高德在STR上的技術,其實也是分紅文本行檢測、字符識別兩部分。
在實際工做中並無使用「端到端」的模型,由於這種分模塊的模型,更容易優化局部的效果,好比爲某一個模塊增長樣本,或者換一個模型。
在字符識別的環節,能夠看到高德是平行使用了兩種方案。上面的分支是單字符的檢測和識別,下面的分支是整個文本序列的識別。
高德的STR技術——文本行檢測
首先看文本行檢測。在早期的時候,大概2017年以前,使用語義分割模型,好比FCN、deeplab來分割文本行。
到2017年Mask R-CNN出現以後,Instance segmentation技術愈來愈成熟,咱們發現實例分割在文本行檢測這個問題上的效果,也超過了語義分割模型。最重要的是,由於要單獨識別每一個文本行,實例分割很天然地就解決了這個問題。
而語義分割,還要作大量的後處理,才能把不一樣的文本行區分開。
固然除了Mask R-CNN之外,咱們也會使用其餘的實例分割模型。
在實際的業務問題上,高德的文本行檢測的效果。無論是文本行密集、仍是模糊的狀況下,檢測的效果都達到了很高的水平。
高德的STR技術——文字識別
文字識別,高德其實是用了兩個分支,單字符的檢測識別,以及序列的識別。最終識別結果,是這兩個分支的輸出的融合。
爲何要用兩個分支?
能夠看這個例子,對於「一二三四的一」,單字符是不容易準確地檢測到的,由於它很容易和背景混淆。
可是由於它位於文本行中間,經過整個序列是能夠識別出來的。
那隻依靠序列識別,把單字符的分支去掉,是否能夠?或者說會有什麼問題?這個留給同窗們本身思考。
序列識別模型
早期的序列識別模型,主要是使用 LSTM + CTC loss,後來替換成了帶有attention layer的LSTM。引入了attention,可使在每個timestep輸出時,網絡對特徵輸入更聚焦,預測的效果也更好。
經過這些方法,對於不一樣的字體、不一樣方向、甚至不一樣語言,識別效果都是不錯的。
Hard case的挖掘和生成
在實際的工做中,除了模型的設計和優化,也會面臨不少其餘的問題。
一個比較大的問題是,漢字的字符不少。經常使用漢字有大概3000-5000個,可是在POI中看到的字符,會遠遠超過這個數字。
高德地圖有7000萬個POI,你們能夠想一想會是個什麼數字。
針對這個問題,咱們有幾個不一樣的解決方案。好比能夠從POI的名稱裏,找到感興趣的字符,再找到採集圖片,再交給人工去標註。也能夠經過電腦的字庫,加上一些渲染效果,合成一些樣本。
高德是從2016年左右,開始研發文字識別技術,到如今還在持續優化。爲了檢驗技術能力,高德視覺技術團隊也參加過一些競賽。OCR領域比較大的一個競賽是 ICDAR,高德參加了2017年,2019年的文本行定位、字符識別的比賽,也有一些不錯的成績。
文本屬性斷定和結構化處理
在對場景中的文字進行檢測和識別之後,須要判斷哪些文字和POI名稱有關。所以,須要判斷每一個文本行的屬性;同時,臨近的多個文本行每每是有關係的,須要計算它們的關係,進行結構化的輸出。
文本屬性斷定問題
這個問題是有挑戰性的。一個文本行是否爲POI名稱,和它的文本內容、所處的位置,都有關係。以上圖爲例,僅看「會員上網,2元/小時」,基本能夠猜出來,這不是一個POI名稱。而一樣都是「百世快遞」,當它處在店鋪上方的牌匾上時,它大機率是一個POI名稱;當它處在快遞車身上時,它不是咱們想製做的名稱。
文本屬性的斷定,最直接的一個任務是降噪:將明顯無效的POI文本排除掉。高德使用了圖像和文本雙通道的卷積神經網絡,取得了比較明顯的降噪效果。
既然能夠將文本行斷定成POI名稱和噪聲兩個類別,擴展一下,還能夠將POI名稱相關的文本分紅多個屬性類別,包括主名稱、分店名、營業範圍、聯繫方式等。在製做POI名稱時,人工會根據必定的工藝規範,選取其中一部分文本,也會根據這些文本的屬性,自動選取或捨棄,以及排序,最終生成POI名稱。
另外,高德也引入了牌匾的語義分割,肯定每一個牌匾獨立的邊界。有邊界的狀況下,主名稱是惟一的。
名字自動生成
最後,看一下名稱自動生成的問題,以及解法。
在文字識別、屬性斷定以後,怎樣自動生成POI名稱呢?人在掌握了做業工藝以後,能夠根據掛牌推斷出這個店的正確名稱(這也是一個合格的掛牌的基本功能)。那麼,機器可否學習和掌握命名規則,從而根據掛牌生成名稱呢?
在現實世界中,這個問題的難度並不低。如下方的這個牌子爲例,正確的POI名稱是什麼呢?
來看更多的例子:
名稱自動生成模型
如上,輸入的是多個文本行,輸出是這些文本行的標籤(是否被選擇做爲最終名稱的一部分),以及順序。若是不考慮圖像信息,這是個NLP問題。能夠採用BERT模型訓練。把問題定義成一個雙任務的學習問題,包括分類任務和迴歸任務。
把圖像信息也加入到模型中。輸入是全部文本行的bounding box,使用一個Graph Attention Network將其編碼成特徵,和BERT模型特徵鏈接起來。最終提高了模型的學習能力。
進一步地,受到微軟的工做的啓發,高德也使用了VL-Bert模型。名稱生成的質量,最終提高到了95%。
這是名稱自動生成的一些效果。前3個例子,儘管排版各不相同,模型都可以比較好地學習到名稱生成的規則。
固然,如圖中的bad case,當掛牌的版式不常見時,模型的預測會出現問題。這也是後面的優化方向。
關於高德視覺團隊
由分佈在西雅圖、硅谷、北京等地的傑出科學家和工程師組成,是高德地圖視覺算法核心團隊。爲地圖、導航和出行的新將來解決難題,探索創新技術。涵蓋圖像理解、視頻分析、多源融合等技術,面向地圖及高精地圖製做、定位、交通及預測、AR導航、輔助駕駛以及信息娛樂等領域。是高德地圖高精尖技術發展的核心引擎。