首次揭祕!掃福得福:支付寶春節集五福背後的技術分享

小螞蟻導讀:在剛過去不久的春節,你是否也參與了支付寶春節集五福的活動呢?不少小夥伴發現,今年的支付寶掃福更嚴格、更快也更準確了,這背後的技術是怎麼做到的呢?

本期稿件小螞蟻邀請到了支付寶多媒體技術部創新組的算法專家嘉睿與大家分享支付寶春節集五福背後的技術,如果你也對此感興趣,歡迎投簡歷加入我們!該團隊目前正在招聘目標檢測識別、文字檢測識別方向的專業人才,有興趣可以發郵件至:[email protected]
在這裏插入圖片描述

掃福回顧

集五福這個新年俗在2018年又與大家見面了,還是那個熟悉的味道-掃福集福,背後卻是全新的技術架構,技術變革的背後隱藏着哪些故事呢?心歷路程請聽我慢慢道來。
在這裏插入圖片描述
2017年掃福任務,由最初定位爲獲得福卡的一個小功能點,上升到主流玩法,技術上也是猝不及防。手寫行不行?窗花福行不行?任意的福字包羅萬象,初次應對這麼大型且複雜的識別任務,做到什麼程度心裏也沒底,期間和產品討論了很久。這塊簡單描述一下我們採用的什麼措施來識別的。

回顧2017年掃福,一個很重要的舉措就是我們引入了客戶端福字檢測的兜底預案,當服務端扛不住了就全走客戶端,識別效果差點也總比限流都出不來強吧。事實證明我們這個預案派上了大用場,原計劃在大年30高峯期開啓的降級預案,由於用戶的熱情,在活動第一天中午就被迫啓動了。

由於客戶端識別的簡單方案,掃福被小部分網民惡搞了:

在這裏插入圖片描述

開啓2018掃福新篇章

2018年掃福除了要保證絕大部分用戶能夠快速順暢的掃福字外,還面臨着AR同一入口存在更多業務併發的壓力,以及去年負面輿情問題。彙總下來新的一年要解決的問題主要如下:

(1)兼顧福字多樣性的同時避免非福字尤其是相似字誤識。

(2)高併發:去年雖然也考慮了有着億級用戶的支付寶掃一掃入口會有非常大的併發量,但是由於是第一年掃福還是低估了用戶的參與熱情,最終作出部分降級。依據去年的調用量看對於圖像識別算法,如此高的併發是相當有挑戰的,因此今年在整體方案設計中首要考慮的就是客戶端與服務端如何聯動,提供高併發識別服務,儘量在不降級的情況下保證用戶順暢的掃出福字抽福卡。

(3)AR入口承擔更多識別任務:支撐掃福、掃人臉手勢、AR平臺運營活動;其中AR平臺運營活動線上運營活動圖片也有幾百張,需要避免不同業務誤識。

帶着衆多問題,2018年掃福,不能重走老路,我們給自己定了一個小目標:

  • 更高:識別精度更高,提升識別率,同時降低誤識率。
  • 更快:速度快、應急響應快。
  • 更強:併發能力強。

1.架構方案

基於上述分析,在方案設計時,從精度角度出發,有兩種選擇,一種是相對複雜的深度學習目標檢測方法,另一種是輕量的檢測方法+一個小型的校驗網絡,由於複雜一些的深度學習目標檢測網絡雖然誤檢低,但是不能覆蓋低端機型(速度和內存等原因),因此最終選擇傳統的檢測算法,這一步只需要保證快速的檢測出福字候選區域,儘量不漏檢,下一步則通過一個相對小的網絡去校驗。最終福字識別的客戶端與服務端流程如下圖:

在這裏插入圖片描述
客戶端:

a. 檢測部分快速檢出福字候選區域,全機型覆蓋,側重點在於儘量多的檢出福字(90%以上)誤檢可以存在。

b. xFuNet校驗,去掉上一步檢測出來的誤檢,判斷檢測結果是否爲福字,少量不確定部分先流轉到其他業務,超過一定時間沒有命中任何業務,則上傳到服務端進行服務端檢測校驗。

服務端:

a. 檢測部分主要是與客戶端的檢測算法互補,側重點在客戶端無法檢測的少量福字的檢測上,這部分使用基於小網絡的深度學習目標檢測算法,同樣會有部分誤檢存在,因此也需要進行二次校驗。

b. 服務端校驗負責:對於少量客戶端不支持xFuNet校驗的機型,將客戶端檢測結果送至服務端進行xFuNet校驗。服務端檢測結果的二次校驗。

2.核心技術xFuNet

如上文所述我們目前需要一個輕量級的校驗網絡,爲了確保客戶端快速高精度的分類效果,我們對業界主流的深度學習網絡進行了評估,最符合項目需求的要算是MobileNet0.25了。但是其訓練速度較慢,同時由於多個業務輪詢,我們希望速度能低於10ms。基於這些現狀,我們自研了一套輕量級的深度學習網絡xFuNet,它是基於resnet18改造而來。

xFuNet的主要設計思路是:

a. 儘早縮小feature map大小

b. 控制參數數量(kernel size 和num output)

c. 控制卷積層數目
在這裏插入圖片描述
xFuNet性能特點如下:

-速度快(10ms),模型小(120k,可進一步壓縮),識別率高,迭代快(低於2h)。

-服務業務場景:福字、手勢、AR平臺其它場景。

在福字識別的場景中,我們同MobileNet0.25進行了比較:
在這裏插入圖片描述
可以看出xFuNet雖然非常小,但是在特定場景校驗部分表現的非常好,不遜色於一些開源的網絡,更適合我們客戶端需求大的場景。

3.福字的校驗訓練

在此前的活動中,我們積累了大量實拍的福字圖片。爲了實現識別率高、誤識率低的目標,針對福字分類的訓練投入了大量精力。

校驗網絡的目標是區分出形態各異的福字(敬業福、窗花、手寫、門貼)、諸如“逼”、“禍”這類的負面相似字、其他負樣本圖,下圖列出部分示例圖:
在這裏插入圖片描述

不得不感慨漢字的博大精深,同一個字真的可以寫出花來,但這同時加大了校驗的難度,到底應該分爲幾類更合適?後續出現輿情如何能快速的增加特定圖片同時儘量減少對福字識別率的影響。

分兩類?所有的福字一類,非福字一類,顯而易見這個方案不靠譜,類內差別過於大。那麼福字與非福字具體怎麼分合適呢?

福字:手寫福(相對正規的打印福)和非手寫福比劃粗細結構各方面會有較大的不同,每個用戶的手寫福都有差別,連體多的手寫福同逼字本身很難區分,因此福字至少分爲兩類,而敬業福屬於特定設計福字,與其他福字分爲一類也不合適,因此單獨作爲一類,這樣福字分爲三類。

非福字:對於非福字最簡單的是分爲一類,但是考慮到大部分用戶不會完全隨意的拍攝,我們的重點是逼、禍或者其他相似的字,同時輿情也大部分集中在這些字上面,因此將字類負樣本同非字類分開。字類負樣本和手寫福字單獨成類的另一個主要原因是增加了動態控制能力,這兩類本身是容易分錯出現輿情的類別,萬一出現問題可以通過閾值的調整快速的解決一部分;同時後續優化模型的時候可以通過少量針對性樣本進行finetune,訓練快同時最有效;如果混爲一類,當臨時增加負樣本時finetune樣本比例不好控制,很可能引起保證福字檢出率負樣本的攔截率就不夠,反之則會出現大幅度降低福字檢出率的情況。

4.2018掃福效果

通過一系列的努力,2018年的掃福獲得了不錯的效果,相比2017年來說,相關指標——包括識別率和識別速度均有了大幅提升,實現了低於1%的誤識率。回到開頭,圍繞掃福的負面聲音今年也得到了有效控制,通過微博輿情監控我們可以明顯感受到我們的努力沒有白費。

在這裏插入圖片描述

後記

有了去年的經驗,經過一年的技術沉澱,2018年春節掃福字活動圓滿結束,雖然過程中還是會碰到許多預期之外的問題,但是在團隊共同努力下也都一一得到解決。在此,感謝紅包項目各兄弟團隊的鼎力支持和幫助,尤其是得益於多媒體部的另一項利器,XNN引擎對我們訓練好的xFuNet網絡模型進行有效的壓縮,支撐其在客戶端高效運行。

接下來,我們將繼續豐富支付寶AR平臺能力,比如紅包期間沉澱的手勢識別能力即將登陸AR平臺,敬請期待。

原文來自:雲棲社區;原文鏈接:https://yq.aliyun.com/articles/563095

點擊閱讀更多,查看更多詳情

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章