小螞蟻導讀:在剛過去不久的春節,你是否也參與了支付寶春節集五福的活動呢?很多小夥伴發現,今年的支付寶掃福更嚴格、更快也更準確了,這背後的技術是怎麼作到的呢?算法
本期稿件小螞蟻邀請到了支付寶多媒體技術部創新組的算法專家嘉睿與你們分享支付寶春節集五福背後的技術,若是你也對此感興趣,歡迎投簡歷加入咱們!該團隊目前正在招聘目標檢測識別、文字檢測識別方向的專業人才,有興趣能夠發郵件至:qiang.heq@antfin.com
網絡
集五福這個新年俗在2018年又與你們見面了,仍是那個熟悉的味道-掃福集福,背後倒是全新的技術架構,技術變革的背後隱藏着哪些故事呢?心歷路程請聽我慢慢道來。
2017年掃福任務,由最初定位爲得到福卡的一個小功能點,上升到主流玩法,技術上也是猝不及防。手寫行不行?窗花福行不行?任意的福字一應俱全,初次應對這麼大型且複雜的識別任務,作到什麼程度內心也沒底,期間和產品討論了好久。這塊簡單描述一下咱們採用的什麼措施來識別的。架構
回顧2017年掃福,一個很重要的舉措就是咱們引入了客戶端福字檢測的兜底預案,當服務端扛不住了就全走客戶端,識別效果差點也總比限流都出不來強吧。事實證實咱們這個預案派上了大用場,原計劃在大年30高峯期開啓的降級預案,因爲用戶的熱情,在活動第一天中午就被迫啓動了。併發
因爲客戶端識別的簡單方案,掃福被小部分網民惡搞了:高併發
2018年掃福除了要保證絕大部分用戶可以快速順暢的掃福字外,還面臨着AR同一入口存在更多業務併發的壓力,以及去年負面輿情問題。彙總下來新的一年要解決的問題主要以下:性能
(1)兼顧福字多樣性的同時避免非福字尤爲是類似字誤識。學習
(2)高併發:去年雖然也考慮了有着億級用戶的支付寶掃一掃入口會有很是大的併發量,可是因爲是第一年掃福仍是低估了用戶的參與熱情,最終做出部分降級。依據去年的調用量看對於圖像識別算法,如此高的併發是至關有挑戰的,所以今年在總體方案設計中首要考慮的就是客戶端與服務端如何聯動,提供高併發識別服務,儘可能在不降級的狀況下保證用戶順暢的掃出福字抽福卡。優化
(3)AR入口承擔更多識別任務:支撐掃福、掃人臉手勢、AR平臺運營活動;其中AR平臺運營活動線上運營活動圖片也有幾百張,須要避免不一樣業務誤識。spa
帶着衆多問題,2018年掃福,不能重走老路,咱們給本身定了一個小目標:設計
基於上述分析,在方案設計時,從精度角度出發,有兩種選擇,一種是相對複雜的深度學習目標檢測方法,另外一種是輕量的檢測方法+一個小型的校驗網絡,因爲複雜一些的深度學習目標檢測網絡雖然誤檢低,可是不能覆蓋低端機型(速度和內存等緣由),所以最終選擇傳統的檢測算法,這一步只須要保證快速的檢測出福字候選區域,儘可能不漏檢,下一步則經過一個相對小的網絡去校驗。最終福字識別的客戶端與服務端流程以下圖:
客戶端:
a. 檢測部分快速檢出福字候選區域,全機型覆蓋,側重點在於儘可能多的檢出福字(90%以上)誤檢能夠存在。
b. xFuNet校驗,去掉上一步檢測出來的誤檢,判斷檢測結果是否爲福字,少許不肯定部分先流轉到其餘業務,超過必定時間沒有命中任何業務,則上傳到服務端進行服務端檢測校驗。
服務端:
a. 檢測部分主要是與客戶端的檢測算法互補,側重點在客戶端沒法檢測的少許福字的檢測上,這部分使用基於小網絡的深度學習目標檢測算法,一樣會有部分誤檢存在,所以也須要進行二次校驗。
b. 服務端校驗負責:對於少許客戶端不支持xFuNet校驗的機型,將客戶端檢測結果送至服務端進行xFuNet校驗。服務端檢測結果的二次校驗。
如上文所述咱們目前須要一個輕量級的校驗網絡,爲了確保客戶端快速高精度的分類效果,咱們對業界主流的深度學習網絡進行了評估,最符合項目需求的要算是MobileNet0.25了。可是其訓練速度較慢,同時因爲多個業務輪詢,咱們但願速度能低於10ms。基於這些現狀,咱們自研了一套輕量級的深度學習網絡xFuNet,它是基於resnet18改造而來。
xFuNet的主要設計思路是:
a. 儘早縮小feature map大小
b. 控制參數數量(kernel size 和num output)
c. 控制卷積層數目
xFuNet性能特色以下:
-速度快(10ms),模型小(120k,可進一步壓縮),識別率高,迭代快(低於2h)。
-服務業務場景:福字、手勢、AR平臺其它場景。
在福字識別的場景中,咱們同MobileNet0.25進行了比較:
能夠看出xFuNet雖然很是小,可是在特定場景校驗部分表現的很是好,不遜色於一些開源的網絡,更適合咱們客戶端需求大的場景。
在此前的活動中,咱們積累了大量實拍的福字圖片。爲了實現識別率高、誤識率低的目標,針對福字分類的訓練投入了大量精力。
校驗網絡的目標是區分出形態萬千的福字(敬業福、窗花、手寫、門貼)、諸如「逼」、「禍」這類的負面類似字、其餘負樣本圖,下圖列出部分示例圖:
不得不感慨漢字的博大精深,同一個字真的能夠寫出花來,但這同時加大了校驗的難度,到底應該分爲幾類更合適?後續出現輿情如何能快速的增長特定圖片同時儘可能減小對福字識別率的影響。
分兩類?全部的福字一類,非福字一類,顯而易見這個方案不靠譜,類內差異過於大。那麼福字與非福字具體怎麼分合適呢?
福字:手寫福(相對正規的打印福)和非手寫福比劃粗細結構各方面會有較大的不一樣,每一個用戶的手寫福都有差異,連體多的手寫福同逼字自己很難區分,所以福字至少分爲兩類,而敬業福屬於特定設計福字,與其餘福字分爲一類也不合適,所以單獨做爲一類,這樣福字分爲三類。
非福字:對於非福字最簡單的是分爲一類,可是考慮到大部分用戶不會徹底隨意的拍攝,咱們的重點是逼、禍或者其餘類似的字,同時輿情也大部分集中在這些字上面,所以將字類負樣本同非字類分開。字類負樣本和手寫福字單獨成類的另外一個主要緣由是增長了動態控制能力,這兩類自己是容易分錯出現輿情的類別,萬一出現問題能夠經過閾值的調整快速的解決一部分;同時後續優化模型的時候能夠經過少許針對性樣本進行finetune,訓練快同時最有效;若是混爲一類,當臨時增長負樣本時finetune樣本比例很差控制,極可能引發保證福字檢出率負樣本的攔截率就不夠,反之則會出現大幅度下降福字檢出率的狀況。
經過一系列的努力,2018年的掃福得到了不錯的效果,相比2017年來講,相關指標——包括識別率和識別速度均有了大幅提高,實現了低於1%的誤識率。回到開頭,圍繞掃福的負面聲音今年也獲得了有效控制,經過微博輿情監控咱們能夠明顯感覺到咱們的努力沒有白費。
有了去年的經驗,通過一年的技術沉澱,2018年春節掃福字活動圓滿結束,雖然過程當中仍是會碰到許多預期以外的問題,可是在團隊共同努力下也都一一獲得解決。在此,感謝紅包項目各兄弟團隊的鼎力支持和幫助,尤爲是得益於多媒體部的另外一項利器,XNN引擎對咱們訓練好的xFuNet網絡模型進行有效的壓縮,支撐其在客戶端高效運行。
接下來,咱們將繼續豐富支付寶AR平臺能力,好比紅包期間沉澱的手勢識別能力即將登錄AR平臺,敬請期待。
原文來自:雲棲社區;原文連接:https://yq.aliyun.com/article...
點擊閱讀更多,查看更多詳情