高德POI數據生產中的電腦視覺技術
- 2021 年 3 月 25 日
- AI
前言:又到春招季!作為國民級出行服務平台,高德業務快速發展,大量校招/社招名額開放,歡迎大家投遞簡歷,詳情見文末。為幫助大家更了解高德技術,我們策划了#春招專欄#的系列文章,組織各業務團隊的高年級同學以業務科普+技術應用實踐為主要內容為大家做相關介紹。
本文是#春招專欄#系列的第 3 篇,根據 高德視覺技術中心基礎研發部 負責人郝志會在AT技術講壇分享的《視覺技術在POI名稱自動化生成的實踐》內容整理而成,在不影響原意的情況下略作刪節。
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、文字之間關係、如何命名(定名)…
以下圖為例,從原始影像,到自動生成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導航、輔助駕駛以及資訊娛樂等領域。是高德地圖高精尖技術發展的核心引擎。