人工智慧技術經歷6年的快速發展,重新定義了很多行業的使用者體驗,而這僅是開始。
隨著5G商用大規模落地,以及智慧手機硬體效能越來越強、AIoT裝置的快速普及,基於雲-邊緣-端演算法和算力結構的移動端人工智慧,仍有非常大的發展空間,亟待我們快速理解移動端深度學習的原理,掌握如何將其應用到實際業務中。
在網際網路行業中,在移動端應用深度學習技術的案例越來越多。從深度學習技術的執行端來看,主要可以分為下面兩種。
一種是完全執行在移動端,這種方式的優點顯而易見,那就是體驗好。在移動端高效執行神經網路,使用者使用起來會感覺沒有任何載入過程,非常流暢。前面的“拾相”和手機百度中的影象搜尋都屬於這一流派,還有其他一些比較好的應用,典型的如識別植物花卉的App“識花”。
另一種是在伺服器端執行深度學習技術,移動端只負責UI展示。在第一種流派出現之前,絕大部分App都是使用這種在伺服器端運算、在移動端展示的方式的。這種方式的優點是實現相對容易,開發成本低。
▊植物花卉識別
花卉識別的App近兩年來頗多,“識花”是微軟亞洲研究院推出的一款用於識別花卉的 App,如下圖所示,使用者可以在拍攝後檢視花卉資訊,App會給出該類花卉的詳細相關資訊。精準的花卉分類是其對外宣傳的一大亮點。
▊ 奇妙的風格化效果
將計算機視覺技術應用在App中,可以為圖片實現濾鏡效果。使用深度學習技術實現的風格化濾鏡效果非常魔幻。例如,Philm這款App就可以提供非常出色的體驗,它使用了深度學習技術,有不少風格化濾鏡效果,下面第一張圖是原圖,第二張是增加濾鏡效果之後的圖。
除此之外,還有許多產品也嘗試了在移動端支援視訊、圖片的風格化,如Prisma和Artisto這兩款App也都可以實現風格化的效果。
▊視訊主體檢測技術在App中的應用
深度學習技術在移動端的應用越來越多,視訊主體檢測技術在App中的應用也在加速。目前,手機使用視訊主體檢測技術進行身份認證已經是非常普遍的事。視訊主體檢測技術主要根據物體的特徵來進行判別,整個流程(如識別和監測這樣的操作)包含大量的神經網路計算。下圖是我們團隊在2017年做的一個Demo,它通過實時識別視訊中的影象主體,再通過該區域進行影象搜尋,就可以得到商品、明星等多種垂直分類相關圖片的資訊。
移動端視訊播放器中的視訊主體檢測效果
你可能會問,這一功能的意義是什麼?直接來看,我們可以利用此技術為視訊動態新增演員註解,並且動態支援“跳轉到xxx(某個明星的名字)出現的第一個鏡頭”這樣的命令。擴充套件來看,我們還可以思考一下這一功能實現商業化的方式可能有哪些。例如,假設某個女士看到視訊中出現了她喜歡的包包,但是不知道在哪裡能夠買到。使用了視訊主體檢測技術後,可以讓使用者自行篩選,然後在視訊中自動提示包包的產地、品牌等資訊,甚至可以讓使用者直接購買。這樣就能擴展出非常多的移動AI場景。
在移動端應用深度學習技術,要考慮各種機型和App指標的限制,因此難點較多。如何使深度學習技術穩定高效地執行在移動裝置上是最大的考驗。拆解落地過程中的複雜演算法問題,就是移動端團隊面臨的首要挑戰。
▊在伺服器端和移動端應用深度學習技術的難點對比
通過對比伺服器端的情況,更容易呈現移動端應用深度學習技術的難點,對比如下表所示。
表:在伺服器端和移動端應用深度學習技術的難點對比
在移動端App的開發過程中,需要克服以上所有困難,才能在移動端應用相關技術。將Demo的演示效果轉化為億級安裝量的App線上效果,並不是一件容易的事情。在移動端和嵌入式裝置的App中使用深度學習技術,可以大大提升App給使用者帶來的體驗。但是,只應用深度學習技術還不能實現所有想要的效果,往往還要結合計算機視覺相關的技術,才能解決從實驗到上線的難題。工程師需要具備很高的將工程與演算法結合的能力,才能綜合運用多種技術解決問題。在移動端應用深度學習技術時,往往沒有太多可以查閱和參考的資料,需要開發人員活學活用,因地制宜。接下來通過例項看一下,如何使用諸多辦法來實現AR實時翻譯功能。
▊ 實現AR實時翻譯功能
AR實時翻譯能夠實現所見即所得的翻譯效果,什麼意思呢?來看下面的例項,在下圖中,電腦螢幕上有“實時翻譯”四個字,將其放在百度App影象搜尋實時翻譯框中,就能得到“Real-Time translation”,而且手機上的文字和電腦螢幕上的文字具有同樣的背景色和字色。
實時翻譯效果圖
實時翻譯效果圖AR實時翻譯功能最早在Google翻譯軟體中應用並上線,Google使用了翻譯和OCR(圖片轉文字)模型全部離線的方式。翻譯和OCR離線的好處是,使用者不聯網也能使用實時翻譯功能,且每幀影象在及時處理運算後實時貼圖,以達到即視效果。
但是全部離線的方式也有弊端,那就是OCR和翻譯模型體積較大,且需要使用者下載到手機中才可以使用。另外離線OCR和離線翻譯模型壓縮體積後會導致準確率降低,使用者體驗變差:Google翻譯App中的片語翻譯效果較好,在翻譯整句和整段時表現就不夠理想。
2017年下半年,筆者參與並主導了百度App中的實時翻譯工作的落地。在開始時,團隊面對的首要問題是,翻譯計算過程是使用伺服器端返回的結果,還是使用移動端的本地計算結果?如果使用移動端的計算結果,使用者就不需要等待伺服器端返回結果,能夠減少不必要的延遲。我們只需要針對移動端的OCR和翻譯的計算過程,在移動端做效能調優,即可保證每一幀影象都可以快速貼圖。移動端效能優化技術其實是我們更擅長的。這樣看來,似乎使用移動端計算結果的優點很多,但是其缺點也不容忽視——長文字可能出現“不說人話”的翻譯效果。經過分析和討論,我們回到問題的本質:AR實時翻譯的本質是要給使用者更好的翻譯效果,而不是看似酷炫的實時貼合技術。
最後,我們選擇了使用伺服器端的返回結果。下圖就是上線第一個版本後的試用效果,左邊是原文,右邊是融合了翻譯結果和背景色的效果。
實時翻譯效果圖
上圖中的效果,如果從頭做這件事,應該如何拆解過程?首先,需要將文字提取和翻譯分成兩部分;接著,拿到翻譯結果後,還需要找到之前的位置,準確地貼圖。依次介紹如下。
OCR提取文字需要把單幀圖片內的文字區域檢測出來。a. 檢測文字區域是典型的深度學習技術範疇,使用檢測模型來處理。b. 對文字區域的準確識別決定了貼圖和背景色的準確性。要對文字的內容進行識別,就要知道寫的具體是什麼。a. 識別文字內容需要將影象資訊轉化為文字,這一過程可以在移動端進行,也可以在伺服器端進行。其原理是使用深度學習分類能力,將包含字元的小圖片逐個分類為文字字元。b. 使用的網路結構GRU是LSTM網路的一種變體,它比LSTM網路的結構更加簡單,而且效果也很好,因此是當前非常流行的一種網路結構。翻譯獲取如果是在移動端進行文字提取,那麼在得到提取的文字後,就要將文字作為請求源資料,傳送到伺服器端。伺服器端返回資料後,就可以得到這一幀的最終翻譯資料了。請求網路進行影象翻譯處理,移動端等待結果返回。找到之前的位置當翻譯結果返回後,很可能遇到一個類似“刻舟求劍”的問題:在移動端傳送請求並等待結果的過程中,使用者可能移動了手機攝像頭的位置,伺服器端返回的結果就會和背景脫離關係,從而無法貼合到對應的位置,這是從伺服器端提取結果的弊端。解決這一問題需要使用跟蹤技術。
需要用一個完整的三維座標系來描述空間,這樣就能知道手機現在和剛才所處的位置。需要倒推原來文字所在位置和現在的位置之間的偏移量。在跟蹤的同時需要提取文字的背景顏色,以儘量貼近原圖效果。文字和背景的顏色提取後,在移動端學習得到一張和原文環境差不多的背景圖片。將伺服器端返回的結果貼合在背景圖片上,大功告成。下圖是我們團隊在初期對AR實時翻譯功能進行的技術拆解,從中可以看到,在移動端進行AI創新,往往需要融合使用深度學習和計算機視覺等技術。
實時翻譯流程圖
如果你看過AR實時翻譯的案例後仍然覺得晦澀,請不要著急,等學過移動端的機器學習、線性代數、效能優化等後,就會覺得明朗許多。
移動深度學習需要克服模型壓縮、編譯裁剪、程式碼精簡、多平臺支援、彙編優化等諸多挑戰,本書正是基於作者在此過程中的實戰經驗。首先介紹基礎的數學原理和深度學習模型,然後深入移動計算裝置的體系結構,以及如何在這種體系結構上進行高效的深度學習計算。
▶ 關 於 本 書
本書由淺入深地介紹了如何將深度學習技術應用到移動端運算領域,書中儘量避免羅列公式,嘗試用淺顯的語言和幾何圖形去解釋相關內容。本書第1章展示了在移動端應用深度學習技術的Demo,幫助讀者建立直觀的認識;第2章至第4章講述了如何在移動端專案中應用深度學習技術;第5章至第8章的難度略大,主要講述如何深入地調整框架,適配並定製自己的框架。本書適合移動端研發工程師閱讀,也適合所有對移動端運算領域感興趣的朋友閱讀。
▶ 關 於 作 者
李永會
百度App移動研發部資深工程師。2015年起在百度從事影象搜尋和語音搜尋客戶端研發工作,主持了多個重要創新專案,包括百度Lens、實時翻譯等。同時負責開源移動端深度學習框架Paddle-Lite的開發,長期從事移動端AI高效能運算優化工作,在多種軟硬體平臺上高效能執行深度學習技術。在工作之餘有讀史、書法等愛好。