電信營業廳 APP 作為中國電信在線服務的入口級應用,我們的開發團隊通過 TensorFlow 與人工智能 AI 技術有了親密的接觸。
人工智能這個領域我們以前從未探索過,甚至參與項目開發的工程師都是由 Android 開發轉型而來,所以本文將以機器學習小白的視角談一談我們如何使用 TensorFlow 實現人工智能,以及我們的心路歷程。
為了提升體驗,讓用戶在充值這個最常用功能中感受一下所謂的黑科技,我們在 2016 年啟動了充值卡掃描項目,希望用戶打開攝像頭對準充值卡密碼輕松一掃即可完成充值。其核心 OCR 識別算是比較古老的研究領域,充值卡密碼是數字加空格的組合,想想應該不難。
我們當時使用的方案,大概如下圖的過程:
最終效果當然是不太理想,充值卡與名片文檔不同,密碼區域刮開的大小因人而異、噪點非常不規則、掃描時手的抖動會增加錯誤的發生等等因素,加上我們沒有在 OCR 領域的經驗積累,最終沒能達到良好的用戶體驗而不得不擱淺。但是在隨后的日子里,我們與 TensorFlow 結下了不解情緣。
在 2017 年谷歌開發者大會上我們了解到,谷歌人工智能底層的技術已經開源化,TensorFlow 的推出是為了讓普通開發者將關注點從 “如何造輪子” 轉移到 “輪子的花紋和樣式” 上來,現場由谷歌工程師 Anna 全程用中文為大家介紹這個框架,她的演講很贊,為了不錯過每一個細節我聽得很仔細很投入。
從大會回來之后,我們推翻重來并改變了思路:搭建一個神經網絡讓它學會認識電信充值卡。
end2end learning:
神經網絡思想給我們帶來了徹底的改變,所謂 end2end 模型是要通過這個模型輸入圖片直接獲得結果數字。這種方式,不再需要手工處理圖片的特征,任何部分的誤差,都作為整體的一部分,通過神經網絡的反向傳播都能得到修正。
seq2seqlearning:
seq2seq 是一種 Encoder–Decoder 結構的網絡,它的輸入是一個序列,輸出也是一個序列, Encoder 中將一個可變長度的信號序列變為固定長度的向量表達,Decoder 將這個固定長度的向量變成可變長度的目標的信號序列。這種結構的神經網絡常用于語音識別,也可以用于不定長文字的 OCR 識別。對于我們的項目而言 Encoder 輸入是 200*30 大小的圖像,Decoder 是可變長度的數字加空格組合。
神經網絡搭建:CNN+LSTM+CTC
這是個成熟且先進的神經網絡架構,我們在分析學習了許多科學界論文后選定了這個方案,CNN 卷積神經網絡負責抓取圖片特征,LSTM 長短期記憶網絡負責對字符的識別,CTC 算法對結果進行對齊優化。這個方案有很多優秀的TF項目可以參考,使用 TF 實現其網絡結構也非常方便,這使我們更快更容易的著手開發工作。
在我們剛接觸神經網絡的時候,看到某位大神曾經說過 “深度學習框架是一個煉丹爐”,這句話形容的恰到好處,使我們更直觀的理解機器學習的過程,如今我們已經有了這煉丹爐和配方(TensorFlow、網絡結構方案),下一步的關鍵是數據。數據的質量和數量直接影響模型的識別效果,由于沒有足夠的實體卡樣本,我們使用程序模擬需要的圖片,要盡量做得真實、包含盡可能多的特征才行。先從一張簡單的充值卡入手,我們的取景框將焦點縮小到 200*30 這么大的區域里:
通過不斷訓練、對比模型識別識別結果,將模型沒有學習到的特征加入進來,我們得到了下面的數據優化路線:
基礎版本:
傾斜、變形、位移:
不同的字體:
模擬未干凈效果,加入隨機噪點:
強光:
弱光:
抖動模糊:
以上特征隨機組合出現,且力度在一定區間內隨機取值,生成的訓練數據集 30 萬,測試數據集 1 萬:
接下來是機器訓練的過程,這個階段最磨煉心性,機器在學習人也在成長。分享一點心得:
1、我們能夠總結這段經驗是源于上百次的訓練記錄,詳細記錄每次訓練的筆記是一個好習慣。
2、每次只調整網絡參數或只修改數據特征,這樣方便比較結果。
3、善于運用TensorBoard使你更直觀的查看網絡結構,了解訓練過程。我們保留了 TB 的全部訓練日志,通過訓練曲線對比不同超參數對訓練結果的影響是非常方便的。
最后是方案的選型,我們一開始青睞于 TF Lite 的小巧、靈活,但是當時 TF Lite 還不支持 LSTM 算子,將來我們會再嘗試使用 TF Lite,因為端側人工智能應該是未來的主流。 考慮到我們的圖片只有 200*30 的像素大小,實際傳輸不太消耗網絡,所以 TF Serving 作為最終方案,實際上效果也確實不錯。
方案
TF Lite
TF Mobile
TF Serving ?
優點
1、體積小:大概 300K。
1、支持全部神經網絡算子。
2、性能優秀。
1、客戶端輕量操作。
2、一切云端可控制,包括模型更新等。
3、支持高并發訪問
缺點
1、當時缺少 LSTM 算子
1、體積較大,估計 AndroidSDK大概 5M 左右。
2、需考慮模型更新方案。
3、需考慮適配,安卓低版本機器不支持。
1、識別性能受網絡速度影響。
最終的效果:逆光、抖動、數字嚴重遮擋依然可以輕松識別!
模型訓練的成功率為 99.3% ,完成一次識別的耗時 0.05 秒,達到這樣的效果,讓我們非常驚喜、興奮!用戶體驗之后反響也非常不錯!能夠做到這些得益于優秀的 TensorFlow 機器學習框架、先進的神經網絡解決方案,這讓我想起 2007 年剛接觸 Android 系統時的感受:不再需要考慮設備底層代碼的編寫極大的降低了開發者的門檻,正如今天 TF 帶給我們的一樣,入門級玩家也可以使用人工智能技術。
最后向一直堅持做機器學習的開發者們致敬:你們的堅持和分享精神使我們更快的掌握和使用這項技術,相信在我們共同努力下人工智能領域將不斷突破,正如這條曲線一樣歷經磨練守得云開見月明。
-
人工智能
+關注
關注
1792文章
47354瀏覽量
238830 -
tensorflow
+關注
關注
13文章
329瀏覽量
60538
原文標題:中國電信使用 TensorFlow 實現人工智能
文章出處:【微信號:tensorflowers,微信公眾號:Tensorflowers】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論