支付寶視覺(jué)算法與端智能
?????♀? 編者按:本文是支付寶體驗(yàn)科技沙龍第 3 期-走進(jìn)螞蟻端智能技術(shù)回顧系列文章。螞蟻集團(tuán)算法工程師面海聚焦移動(dòng)端視覺(jué)算法方向,介紹了面向支付寶 APP 和 IoT 設(shè)備雙端的算法應(yīng)用場(chǎng)景、技術(shù)挑戰(zhàn)、演進(jìn)路線和架構(gòu)方案。

本文主要包括三個(gè)部分:第一部分會(huì)介紹移動(dòng)端視覺(jué)算法在支付寶里的應(yīng)用場(chǎng)景,以及業(yè)務(wù)表現(xiàn)情況。第二部分會(huì)比較大篇幅地介紹支付寶端視覺(jué)算法的一些技術(shù)框架,以及我們的一些研發(fā)方案。第三部分會(huì)簡(jiǎn)單介紹下我們當(dāng)前正在做的一些工作,以及面向未來(lái)的一些工作。
端視覺(jué)算法 @ Alipay
首先給大家介紹整個(gè)終端視覺(jué)算法在支付寶里面的一些具體應(yīng)用場(chǎng)景,基本上可以把它分為四個(gè)大類。

第一個(gè)大類是平臺(tái)運(yùn)營(yíng)。比如大家熟知的新春掃福,就是使用到了移動(dòng)端的算法,還有很多支付設(shè)備里面的互動(dòng)玩法。這里用到了一些互動(dòng)技術(shù),以及針對(duì)線下很多場(chǎng)景提供的 AR 打卡的功能,這些都會(huì)偏運(yùn)營(yíng)屬性的業(yè)務(wù)。
第二個(gè)大類是平臺(tái)工具。比如掃一掃里面的識(shí)物,比如在支付寶里面的短視頻拍攝,也有一些直播,這樣一些拍攝工具,里面也會(huì)用到很多端上的視覺(jué)算法。
第三個(gè)大類是個(gè)人業(yè)務(wù)。很多用戶會(huì)在支付寶里操作的一些個(gè)人業(yè)務(wù),比如綁卡、轉(zhuǎn)賬、開(kāi)通會(huì)員、會(huì)員認(rèn)證,包括做一些基金或者其他金融業(yè)務(wù)的開(kāi)戶操作等等。這里面都會(huì)用到大量的移動(dòng)端的算法能力,以提升整體用戶的一些使用體驗(yàn)。
第四個(gè)大類是垂直場(chǎng)景。比如針對(duì)商品識(shí)別所做的線下 IoT 設(shè)備,AI inside 的這種能力,以及在疫情期間,我們?yōu)楹芏嗑€上的服務(wù)提供了智能化識(shí)別算法,來(lái)提升整體效率。
支付寶移動(dòng)端視覺(jué)算法整體的應(yīng)用范圍是非常的廣泛,應(yīng)用的業(yè)務(wù)場(chǎng)景類型變化也比較大。主要是因?yàn)橹Ц秾毷且粋€(gè)數(shù)字生活平臺(tái),基于這個(gè)大的定位和背景,業(yè)務(wù)對(duì)于算法側(cè),無(wú)論在能力還是性能層面上,都有非常高的要求。

算法能力上,現(xiàn)在整個(gè)支付寶計(jì)算機(jī)視覺(jué)的算法能力已經(jīng)覆蓋了包括分類檢測(cè)、分割、OCR 等主流的 CV 算法方向。
模型性能上,因?yàn)楸旧碇Ц秾毷且粋€(gè)國(guó)民級(jí)的 APP,它里面有很多的業(yè)務(wù),會(huì)有大量的比較重的負(fù)載場(chǎng)景。我們這個(gè)算法也是針對(duì)這樣一個(gè)大背景,實(shí)現(xiàn)了低資源消耗,高性能計(jì)算這樣的能力。
開(kāi)放生態(tài)上,整個(gè)支付寶有一個(gè)非常強(qiáng)的開(kāi)放生態(tài)。我們?cè)谛〕绦蝮w系里面有很多外部的商家,還有一些機(jī)構(gòu)在里面會(huì)為終端用戶提供服務(wù)。我們的移動(dòng)端視覺(jué)算法會(huì)為這些場(chǎng)景提供幾乎零計(jì)算成本的智能服務(wù)。
從業(yè)務(wù)的角度來(lái)看,現(xiàn)在支付寶 APP 線上有數(shù)百個(gè)活躍模型,這個(gè)數(shù)字在不斷地在更新迭代。除此之外,我們 IoT 也有數(shù)十萬(wàn)家的內(nèi)外部設(shè)備會(huì)使用到移動(dòng)端的視覺(jué)技術(shù)。這是對(duì)于內(nèi)部業(yè)務(wù),對(duì)于外部業(yè)務(wù),大家可以在 APP 上通過(guò)小程序的方式接入我們提供的一些解決方案。同時(shí)我們的視覺(jué)解決方案也會(huì)通過(guò)螞蟻的 mPaaS 商業(yè)化產(chǎn)品,給外部的 APP 進(jìn)行輸出。
移動(dòng)端算法在支付寶生態(tài)的優(yōu)勢(shì)

移動(dòng)端視覺(jué)算法在支付寶里面能夠有這么多的應(yīng)用場(chǎng)景,產(chǎn)生這么多的業(yè)務(wù)價(jià)值,和支付寶整個(gè)生態(tài)是有比較大的關(guān)系,它的優(yōu)勢(shì)也比較能夠發(fā)揮出來(lái)。首先第一個(gè),支付寶本身有廣泛的業(yè)務(wù)場(chǎng)景,第二個(gè),支付寶整個(gè)用戶體量是比較大的。在這兩個(gè)背景下,一個(gè)好的體驗(yàn),好的移動(dòng)端的算法,可以為各種各樣的業(yè)務(wù)提供非常低成本的業(yè)務(wù)使用。
除此之外,大家在使用支付寶的過(guò)程中有一個(gè)比較大的心智,就是支付寶是非常安全的。移動(dòng)端上整個(gè)數(shù)據(jù)的獲取、加工、處理,都是在用戶自己的手機(jī)上進(jìn)行操作,也避免了用戶對(duì)于個(gè)人數(shù)據(jù)隱私的擔(dān)憂。同時(shí)我們的外部業(yè)務(wù)也會(huì)關(guān)心到外部機(jī)構(gòu)的數(shù)據(jù)合規(guī)問(wèn)題,通過(guò)建設(shè)移動(dòng)端算法能力,也能夠規(guī)避這些合規(guī)的風(fēng)險(xiǎn)。
端視覺(jué)算法研發(fā)挑戰(zhàn)

基本上,要能夠?qū)崿F(xiàn)移動(dòng)端視覺(jué)算法在支付寶生態(tài)里面的優(yōu)勢(shì)。本質(zhì)上來(lái)講,我們整個(gè)算法需要有足夠的能力支撐這些業(yè)務(wù)。當(dāng)然這是一個(gè)非常挑戰(zhàn)的事情,同時(shí)隨著整個(gè)手機(jī)硬件的不斷發(fā)展,這個(gè)挑戰(zhàn)也是在不斷地變化。比如在早期,我們最早 2018 年端引擎上線,是配合整個(gè)視覺(jué)算法的應(yīng)用場(chǎng)景一起上線。那個(gè)時(shí)候我們面對(duì)的問(wèn)題是整個(gè)算力存儲(chǔ)資源和網(wǎng)絡(luò)流量的這些限制。這個(gè)對(duì)模型的大小、速度和內(nèi)存都有比較高的要求,而當(dāng)時(shí)整個(gè)業(yè)界基本上的能力還是比較單一的。
那個(gè)時(shí)候雖然出現(xiàn)了一些例如 mobilenet 這種分類網(wǎng)絡(luò)結(jié)構(gòu)。但是它對(duì)于 CV 場(chǎng)景的覆蓋是比較少的。同時(shí)在應(yīng)用層面上,也只有一些特定場(chǎng)景的算法。例如我們的人臉檢測(cè),基于 cascade 的人臉檢測(cè)算法,或者是傳統(tǒng)的字符分割和識(shí)別的 OCR 算法。這種算法對(duì)于支付寶的這種廣泛業(yè)務(wù)場(chǎng)景,是比較難以往其他的場(chǎng)景去拓展的。這個(gè)時(shí)候我們面臨的一個(gè)最大的挑戰(zhàn)就是,我如何樣能夠有一個(gè)統(tǒng)一的框架去研發(fā)不同類型的視覺(jué)算法。
隨著硬件的發(fā)展,我們出現(xiàn)了各種各樣的芯片,GPU 也好, NPU 也好,這種芯片會(huì)越來(lái)越強(qiáng)。這個(gè)時(shí)候我們又面臨了另外一個(gè)挑戰(zhàn),即碎片化的硬件環(huán)境問(wèn)題,因?yàn)橹Ц秾殐?nèi)有 3000+ 機(jī)型,現(xiàn)在的端智能到這個(gè)階段,我們看到業(yè)界各個(gè)大廠在移動(dòng)端算法的研發(fā)上,發(fā)展是比較迅速的。但其實(shí)大部分都局限于單模型的研發(fā)設(shè)計(jì)思路,或者放棄一些機(jī)器覆蓋問(wèn)題。對(duì)于支付寶來(lái)說(shuō),這是不行的。因?yàn)橹Ц秾毧赡芤豢顧C(jī)型就有幾十萬(wàn)上百萬(wàn)的用戶,或者說(shuō)雖然有更好的芯片,但是為了覆蓋會(huì)犧牲掉高端機(jī)的體驗(yàn)。所以在不同的時(shí)間階段,我們面臨了不同的挑戰(zhàn)。
支付寶端視覺(jué)算法發(fā)展歷程

整個(gè)移動(dòng)端視覺(jué)算法的發(fā)展歷程,也是在挑戰(zhàn)的過(guò)程當(dāng)中不斷地建設(shè)起來(lái)的。
這里我們給了幾個(gè)比較重要的時(shí)間節(jié)點(diǎn)。第一個(gè),2018 年 2 月份,是端算法在五福場(chǎng)景里面第一次進(jìn)行大規(guī)模的驗(yàn)證。這個(gè)時(shí)候也開(kāi)啟了傳統(tǒng) CV 算法檢測(cè)分類的大規(guī)模應(yīng)用。同時(shí)在 2018 年,我們也針對(duì)支付寶里的個(gè)人業(yè)務(wù)對(duì) OCR 需求旺盛的特點(diǎn),結(jié)合移動(dòng)端算法在隱私保護(hù)、實(shí)時(shí)體驗(yàn)和數(shù)據(jù)風(fēng)險(xiǎn)保護(hù)方面的天然優(yōu)勢(shì),聚焦了 OCR 這一非常有挑戰(zhàn)的 CV 技術(shù)方向進(jìn)行移動(dòng)端輕量化的工作。這個(gè)工作也持續(xù)到今天,并在持續(xù)進(jìn)行。在這四五年的發(fā)展過(guò)程當(dāng)中,也一直持續(xù)保持著比較高的技術(shù)水位。
在 2019 年,整個(gè)短視頻業(yè)務(wù)興起,在整個(gè)視覺(jué)互動(dòng)方向,我們看到各個(gè) APP 里面都已經(jīng)培養(yǎng)成了一個(gè)非常強(qiáng)的用戶心智。我們針對(duì)支付寶整個(gè)業(yè)務(wù)的特點(diǎn),聚焦了視覺(jué)互動(dòng)的一個(gè)基礎(chǔ)功能,去布局建設(shè)了支付寶整個(gè)視覺(jué)互動(dòng)技術(shù)。
從 2021 年開(kāi)始,我們著重開(kāi)始面對(duì)碎片化的硬件環(huán)境,和引擎團(tuán)隊(duì)一起合作,提出了可伸縮建模的技術(shù)方案。同時(shí)在應(yīng)用算法層的多個(gè)方向,已經(jīng)驗(yàn)證了一些有效性,后面我將詳細(xì)介紹這方面的工作。
端視覺(jué)算法技術(shù)架構(gòu)?

經(jīng)過(guò)這幾年的發(fā)展,我們形成了一個(gè)從模型的研發(fā)部署到應(yīng)用的系統(tǒng)性技術(shù)框架?;旧峡梢苑譃閮蓚€(gè)大層。首先下面的兩層是屬于核心的算法研發(fā)部分。其中包括了應(yīng)用算法,網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)這部分,以及我們和引擎團(tuán)隊(duì)在研發(fā)模式工具鏈上面的一些共建的操作。這些工作可以更好地去應(yīng)對(duì)前面提到的有限的計(jì)算資源以及碎片化影響環(huán)境的雙重挑戰(zhàn),從而提升整個(gè)端視覺(jué)算法的核心競(jìng)爭(zhēng)力。
向上是我們對(duì)于業(yè)務(wù)側(cè)或者是用戶側(cè)的一個(gè)透出,包含了兩個(gè)層面。第一個(gè)是屬于這種場(chǎng)景模型的自主研發(fā)。因?yàn)?CV 的算法場(chǎng)景性是比較重的??赡苓@個(gè)業(yè)務(wù)今天要識(shí)別一個(gè)杯子,那個(gè)業(yè)務(wù)明天要識(shí)別一個(gè)筆記本。所以常規(guī)性的這種需求會(huì)非常多。特別是對(duì)于支付寶來(lái)講,自主研發(fā)功能可以大幅提升整個(gè)應(yīng)用算法的研發(fā)效率,也幫助實(shí)現(xiàn)在各個(gè)業(yè)務(wù)場(chǎng)景里普惠使用移動(dòng)端視覺(jué)算法能力。
除此之外,有很多可復(fù)用的產(chǎn)品化能力,多個(gè)業(yè)務(wù)方都可以接入。這些能力我們可以封裝成一些插件或者 SDK 的形式提供給到不同的業(yè)務(wù)團(tuán)隊(duì)或者是技術(shù)團(tuán)隊(duì)來(lái)接入。
算法輕量化設(shè)計(jì)思想

面對(duì)運(yùn)行環(huán)境以及資源限制,算法輕量化的設(shè)計(jì)本身對(duì)于移動(dòng)端來(lái)說(shuō),需要優(yōu)化的目標(biāo)是非常多的,可歸結(jié)為以下三個(gè)方面:
首先在網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)上,核心是基礎(chǔ)網(wǎng)絡(luò)充分實(shí)現(xiàn)輕量化和精度的平衡,第二,在網(wǎng)絡(luò)設(shè)計(jì)好之后,如何充分利用輕量化網(wǎng)絡(luò)的容量,來(lái)充分挖掘網(wǎng)絡(luò)的容量。第三,移動(dòng)端本身也有應(yīng)用層面上的優(yōu)勢(shì),這些優(yōu)勢(shì)的使用,可以進(jìn)一步提升整個(gè)移動(dòng)端算法最終給用戶呈現(xiàn)的效果。所以移動(dòng)端算法的整個(gè)研發(fā),不只是一個(gè)網(wǎng)絡(luò)設(shè)計(jì)的問(wèn)題,它需要通過(guò)算法建模到整個(gè)識(shí)別流程進(jìn)行全方位的設(shè)計(jì),來(lái)達(dá)到整體效果的提升。
1. 網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì):網(wǎng)絡(luò)結(jié)構(gòu)選型

在整個(gè)網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)層面上,除了網(wǎng)絡(luò)對(duì)于整個(gè)深度寬度這樣的調(diào)整之外,其實(shí)整個(gè)設(shè)計(jì)思想借鑒了 2017 年谷歌提出來(lái)的 depth wise 的卷積,以及 2018 年 group convolution 的卷積。這些思想的提出也推進(jìn)了整個(gè)輕量化網(wǎng)絡(luò)設(shè)計(jì)比較大的進(jìn)步。這幾個(gè)基礎(chǔ)的卷積層的操作就形成了幾個(gè)比較典型或者比較有名的 block 的框架,比如說(shuō) Involved Residual Block 或者說(shuō) Shuffle Block 這種結(jié)構(gòu)。我們?cè)诓煌娜蝿?wù)里面也大量地借鑒了這樣的卷積層設(shè)計(jì),或者稱為 block 的設(shè)計(jì)思想。
此外還有一些工作,我可以引入一些相對(duì)來(lái)說(shuō)比較輕量化的計(jì)算模塊,增強(qiáng)一些特征表達(dá)。這對(duì)于一些需要提升提取高層語(yǔ)義的任務(wù)會(huì)非常有效。例如文字識(shí)別。這里簡(jiǎn)單給幾個(gè)數(shù)據(jù),就是前面提到的移動(dòng)端 OCR。因?yàn)?OCR 本身是一個(gè)非常重計(jì)算量的視覺(jué)方向。我們通過(guò)在網(wǎng)絡(luò)結(jié)構(gòu)這方面的調(diào)整,已經(jīng)實(shí)現(xiàn)了 OCR 檢測(cè)和識(shí)別模型加在一起,基本上能達(dá)到 1M 左右大小的規(guī)模。同時(shí)在計(jì)算速度上,檢測(cè)速度基本可以在 40 毫秒,即可完成一張圖的文字檢測(cè)。單行文字的識(shí)別速度可以達(dá)到 9 毫秒。
有了網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)之后,第二部分的容量已經(jīng)定了。那么如何能夠更好地去使用這個(gè)容量,去學(xué)習(xí)我們需要完成的識(shí)別任務(wù)呢?比較直觀的一個(gè)做法就是蒸餾。它可以很好地挖掘模型容量。移動(dòng)端整個(gè)網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)還是從一個(gè)服務(wù)端的大網(wǎng)絡(luò)轉(zhuǎn)化而來(lái)的,所以通過(guò)大網(wǎng)絡(luò)對(duì)小網(wǎng)絡(luò)進(jìn)行蒸餾的學(xué)習(xí),可以進(jìn)一步地提升整個(gè)網(wǎng)絡(luò)容量的利用效率,有利于提升整個(gè)網(wǎng)絡(luò)精度,減少整體訓(xùn)練時(shí)間,提升訓(xùn)練穩(wěn)定性。
2. 訓(xùn)練策略:容量的充分利用?

關(guān)于第 2 個(gè)部分,需要強(qiáng)調(diào)的一點(diǎn)是數(shù)據(jù)對(duì)于輕量化網(wǎng)絡(luò)設(shè)計(jì)的重要性。這里給了一個(gè)簡(jiǎn)單的例子,例如一個(gè)線性分類器和一個(gè)非線性分類器。更多的訓(xùn)練數(shù)據(jù)更有助于比較簡(jiǎn)單或者輕量化分類器的參數(shù)學(xué)習(xí)。
對(duì)于輕量化網(wǎng)絡(luò)來(lái)說(shuō),數(shù)據(jù)會(huì)變得非常重要。同時(shí)數(shù)據(jù)本身對(duì)于所有的算法研發(fā)來(lái)說(shuō),都是一個(gè)難題。特別是對(duì)于一些新興的業(yè)務(wù)。這時(shí)候我們大量使用到弱監(jiān)督學(xué)習(xí)這個(gè)技術(shù)方向里面的技術(shù)來(lái)提升數(shù)據(jù)的使用率,讓整個(gè)小模型也能夠?qū)W到很好的知識(shí)。
模型有了網(wǎng)絡(luò)結(jié)構(gòu)訓(xùn)練好了之后,第三個(gè)工作就是可以使用定點(diǎn)化。定點(diǎn)化計(jì)算方案可以實(shí)現(xiàn)網(wǎng)絡(luò)容量的進(jìn)一步壓縮。從我們整個(gè)實(shí)測(cè)來(lái)看,現(xiàn)在的一個(gè) INT8 計(jì)算代替浮點(diǎn)計(jì)算,整個(gè)計(jì)算速度基本上可以加速一倍。同時(shí)也可以減少一半的內(nèi)存占用,這對(duì)整體尤其是低端機(jī)的受益是非常大的。
這里我給個(gè)示例,關(guān)于訓(xùn)練策略的使用,這是比較特殊的一類網(wǎng)絡(luò)的輕量化。即對(duì)抗生成模型,GAN 網(wǎng)絡(luò)的輕量化工作。本身 GAN 這個(gè)方向的模型結(jié)構(gòu)差異是非常大的。不同網(wǎng)絡(luò)的整個(gè)模型結(jié)構(gòu)差異很大。同時(shí)它的輕量化難度比較大,因?yàn)樗猩赡P?,有?duì)抗模型。它訓(xùn)練中可能還有多個(gè)對(duì)抗模型,所以它牽扯到多個(gè)網(wǎng)絡(luò)的同時(shí)輕量化,它的訓(xùn)練其實(shí)很難保證穩(wěn)定。我們基本上采用了一個(gè)蒸餾的框架來(lái)完成這項(xiàng)工作,把這個(gè)效果的調(diào)優(yōu)和我們輕量化的設(shè)計(jì)進(jìn)行一個(gè)解耦。我們使用一個(gè)統(tǒng)一的輕量化網(wǎng)絡(luò)結(jié)構(gòu)來(lái)完成這個(gè)訓(xùn)練。大網(wǎng)絡(luò)主要是為輕量化網(wǎng)絡(luò)提供它學(xué)習(xí)用的數(shù)據(jù)。對(duì)于全圖大分辨率的計(jì)算速度,以及人臉小分辨率的計(jì)算速度,都能夠達(dá)到實(shí)時(shí)或者準(zhǔn)實(shí)時(shí)的要求。
3. 場(chǎng)景化設(shè)計(jì):精度進(jìn)一步提升

整個(gè)網(wǎng)絡(luò)結(jié)構(gòu)的模型訓(xùn)練已經(jīng)完成了,在使用到移動(dòng)端時(shí),移動(dòng)端本身的特點(diǎn)可以進(jìn)一步地對(duì)網(wǎng)絡(luò)精度進(jìn)行提升。這里我們稱移動(dòng)端的流式識(shí)別和本地化的實(shí)時(shí)計(jì)算優(yōu)勢(shì)的結(jié)合。因?yàn)閿?shù)據(jù)采集和計(jì)算都在本地完成的,所以通過(guò)實(shí)時(shí)視頻流里的多幀信息融合,可以進(jìn)一步提升算法在應(yīng)用層的一些效果。這里可以通常來(lái)講,我們可以在前處理和后處理的部分都會(huì)增加一些這種流式識(shí)別的融合模式。
我舉兩個(gè)例子,一個(gè)是場(chǎng)景化數(shù)據(jù),這是在前處理層面上。例如在人臉的檢測(cè),或者是肢體關(guān)鍵點(diǎn)檢測(cè),因?yàn)樗赡苡卸喾较虻暮芏嘧藨B(tài)的。但是因?yàn)檎麄€(gè)的動(dòng)作是一個(gè)連續(xù)的動(dòng)作,所以我們?cè)谡麄€(gè)使用過(guò)程中,在預(yù)測(cè)推理的過(guò)程中,會(huì)使用前一陣的預(yù)測(cè)角度去對(duì)它進(jìn)行一個(gè)預(yù)轉(zhuǎn)正。就是在整個(gè)模型學(xué)習(xí)的過(guò)程中,我更加關(guān)注去學(xué)習(xí)一個(gè)相對(duì)正的人臉,比如說(shuō)關(guān)鍵點(diǎn),比如一個(gè)正的人體的姿態(tài)的學(xué)習(xí),這樣一個(gè)緊湊的樣本空間,本身就可以降低模型的學(xué)習(xí)的難度。這些應(yīng)用本身大量是使用在互動(dòng)場(chǎng)景,它對(duì)實(shí)時(shí)性要求非常高。所以我可以把整個(gè)模型壓得更小。從整個(gè)測(cè)試來(lái)看,它的預(yù)測(cè)誤差或者預(yù)測(cè)精度會(huì)有比較大的提升。除了這種前處理的方式,另外一個(gè)就是后處理,后處理相對(duì)來(lái)說(shuō)比較直觀一點(diǎn)。它主要是提升精度,或者是在感知方面來(lái)提升精度,對(duì)于互動(dòng)方向主要來(lái)提升整體穩(wěn)定性。例如前面提到的五福的模型,我們不是以單幀的結(jié)果來(lái)作為最終的結(jié)果。它是有一個(gè)多幀投票策略在里面,它的識(shí)別精度可以提升到 99.9% 以上。
對(duì)于互動(dòng)場(chǎng)景來(lái)說(shuō),例如對(duì)于人臉的 2D 3D 的關(guān)鍵點(diǎn)回歸,中間的結(jié)果平滑可以對(duì)一些大角度,快速或者慢速的運(yùn)動(dòng)效果都能夠達(dá)到一個(gè)比較好的跟蹤效果。
面向碎片化硬件的模型研發(fā)

前面我主要介紹了我們?cè)趹?yīng)用算法層面上的一些研發(fā)思路和整個(gè)研發(fā)過(guò)程?,F(xiàn)在將介紹另外一個(gè)挑戰(zhàn),即碎片化硬件環(huán)境的問(wèn)題。之前我們所有的研發(fā)模式基本上都是叫單模型的研發(fā)模式。就是為了保證在支付寶 APP 所覆蓋的這些機(jī)型的覆蓋率。因?yàn)橐豢顧C(jī)器可能有幾十萬(wàn)上百萬(wàn)的用戶在使用,所以我們基本上是以最低端設(shè)備作為我們的優(yōu)化目標(biāo),這個(gè)時(shí)候便帶來(lái)了一個(gè)問(wèn)題,我的算力越強(qiáng),我可以用更大或者性能更好的模型,這個(gè)時(shí)候?yàn)榱思骖櫟投藱C(jī)去犧牲了它的體驗(yàn)。
為了避免這個(gè)問(wèn)題,我們?cè)谑謩?dòng)研發(fā)模式的時(shí)候,會(huì)采用一種方式叫分級(jí)模型研發(fā)。我會(huì)在中高低端手機(jī)里面會(huì)挑幾款主流的機(jī)型去進(jìn)行模型研發(fā)。這種模式本身的研發(fā)成本和我們選擇機(jī)型的數(shù)量就是相關(guān)的。這個(gè)效率其實(shí)是很低的。針對(duì)這個(gè)問(wèn)題,我們也和引擎團(tuán)隊(duì)一起去探索另外一種新的研發(fā)模式:可收縮建模??蚣軐訒?huì)提供整個(gè)模型訓(xùn)練的研發(fā)框架,我們?cè)趹?yīng)用算法層面上,會(huì)進(jìn)行這個(gè)建模方案的設(shè)計(jì)。
這里舉一個(gè)例子,是我們今年上半年做的一個(gè)工作。我們首先要定義一個(gè)權(quán)重共享的動(dòng)態(tài)化的超網(wǎng)。在每次訓(xùn)練過(guò)程當(dāng)中,會(huì)采樣里面的不同子網(wǎng)進(jìn)行更新。收斂之后,這些子網(wǎng)之間的權(quán)重是可以共享的。這個(gè)子網(wǎng)訓(xùn)練成之后,就可以對(duì)不同的子網(wǎng)精度和耗時(shí)有相應(yīng)的分布點(diǎn)狀圖。有了這個(gè)點(diǎn)狀圖,我們可以根據(jù)不同機(jī)型的性能要求,對(duì)里面進(jìn)行采樣,然后達(dá)到自動(dòng)化的分級(jí)模型研發(fā)。一次訓(xùn)練便可以產(chǎn)生不同性能消耗下的多級(jí)模型。同時(shí)它本身是帶有網(wǎng)絡(luò)搜索這樣的概念在里面。所以相對(duì)于手動(dòng)設(shè)計(jì),它可以探索到更多樣的網(wǎng)絡(luò)結(jié)構(gòu)。
基于可伸縮建模的端算法研發(fā)

在整個(gè)可伸縮建模里面,在應(yīng)用算法設(shè)計(jì)層面上,我們其實(shí)要考慮幾個(gè)因素。第一個(gè),算法研發(fā)的 Loss 和評(píng)價(jià)要一致,這個(gè)是蠻重要的。因?yàn)槲覀冊(cè)诤芏嗳蝿?wù)里面使用這種框架,有可能它的訓(xùn)練會(huì)不穩(wěn)定,有可能會(huì)搜出來(lái)的這種網(wǎng)絡(luò)結(jié)構(gòu)不夠好。很大一部分是因?yàn)槔锩娴囊恍┎灰恢碌膯?wèn)題影響的,那么這個(gè)便可以提升整個(gè)超網(wǎng)訓(xùn)練的穩(wěn)定性。
第二個(gè),整個(gè)移動(dòng)端算法會(huì)有異構(gòu)的問(wèn)題存在。異構(gòu)的情況下,模型的設(shè)計(jì)層面需要去使用這些適用于不同 backend 的結(jié)構(gòu)或者算子。這是需要算法和引擎團(tuán)隊(duì)一起去配合,去做一些挑選的。
第三個(gè),這本身是一個(gè)為了提升效率的方案,我不太可能拿一個(gè)非常大的模型,或者大的搜索空間去進(jìn)行搜索,這非常的耗時(shí),耗計(jì)算資源。所以在整個(gè)應(yīng)用算法層,我們?cè)诙x搜索空間時(shí),會(huì)在已有的輕量化網(wǎng)絡(luò)結(jié)構(gòu)周圍進(jìn)行搜索,從而降低整個(gè)搜索的復(fù)雜度。
下面這部分給大家介紹的是一個(gè)使用案例,這有兩個(gè)業(yè)務(wù)模型,handcraft 是我們最早的手動(dòng)設(shè)計(jì)的網(wǎng)絡(luò)結(jié)構(gòu)。后面這個(gè)是我們通過(guò)可伸縮建模搜索出來(lái)的。然后從這里面去采樣了高中低檔三檔的模型結(jié)構(gòu)。
從兩個(gè)業(yè)務(wù)模型的角度來(lái)看,首先結(jié)果來(lái)看,我們可以到得到一個(gè)一致性的結(jié)論。第一,本身這樣的框架能夠一次性產(chǎn)出多個(gè)高性能的分級(jí)模型。第二,它有助于下探一個(gè)模型的性能。就是在這個(gè)結(jié)構(gòu)搜索空間進(jìn)行定義之后,得到的這種 tiny 的模型,在同等計(jì)算量情況下,它的精度其實(shí)是普遍提升的?;蛘呤俏覀円粋€(gè)相同精度下,它的速度提升其實(shí)也比較明顯,所以這個(gè)是我們目前在 OCR 分割檢測(cè)分類這些任務(wù)里面都會(huì)頻繁使用的這樣模型設(shè)計(jì)思維的一個(gè)研發(fā)模式。
支付寶端視覺(jué)算法能力

通過(guò)端視覺(jué)算法全鏈路的建設(shè),以及和引擎團(tuán)隊(duì)在可伸縮建模研發(fā)方案上面的探索,現(xiàn)在我們?cè)谖浵伝蛘咧Ц秾毜囊苿?dòng)端視覺(jué)算法里面,無(wú)論是我們的網(wǎng)絡(luò)結(jié)構(gòu)、視覺(jué)算法的類型,還是上層應(yīng)用透出,都已經(jīng)達(dá)到了非常大的覆蓋。這里大概列出了幾個(gè)我們常用的一些場(chǎng)景,包含了視覺(jué)感知類的任務(wù),以及視覺(jué)互動(dòng)類的任務(wù)。同時(shí)這些任務(wù)也在支付寶里面通過(guò)了一些封裝,會(huì)以插件的形式給到內(nèi)部或者外部的用戶去使用。
端視覺(jué)研發(fā)未來(lái)展望

最后介紹一下我們當(dāng)前正在做的一些工作,以及未來(lái)一兩年內(nèi)可能會(huì)持續(xù)探索的三個(gè)方面。
第一,網(wǎng)絡(luò)結(jié)構(gòu)的演進(jìn),我們其實(shí)和引擎團(tuán)隊(duì)一起在配合,在深挖,就是 transformer 這種新的架構(gòu)在端上的使用,因?yàn)樗挠?jì)算量還是比較大的。我們目前已經(jīng)在一些相應(yīng)的任務(wù)上使用,主要聚焦在視覺(jué)感知這個(gè)方向。比如說(shuō) OCR 的檢測(cè)和 OCR 的識(shí)別,當(dāng)然它現(xiàn)在性能層面上比傳統(tǒng)的 CNN 結(jié)構(gòu)還要差一些,還沒(méi)有達(dá)到那么快的速度。但它的精度提升是非常大的,我們?cè)谶@個(gè)方向也在持續(xù)的演進(jìn)。
第二,訓(xùn)練方式的演進(jìn),移動(dòng)端視覺(jué)算法對(duì)于數(shù)據(jù)的依賴非常重。我們之前的方案都是希望能夠例如通過(guò)弱監(jiān)督或者主動(dòng)學(xué)習(xí)這樣的學(xué)習(xí)方案,去盡量使用不完整的標(biāo)注樣本,或者是帶噪音的標(biāo)注樣本。我們今天也在去探索預(yù)訓(xùn)練模型在整個(gè)輕量化模型、網(wǎng)絡(luò)結(jié)構(gòu)訓(xùn)練過(guò)程當(dāng)中的作用。我們現(xiàn)在在分割場(chǎng)景、大規(guī)模商品識(shí)別場(chǎng)景里已經(jīng)有了一些初步的結(jié)果,希望后面能夠有機(jī)會(huì)再和大家進(jìn)行分享。
第三,研發(fā)模式的演進(jìn)。主要是面向我們整個(gè)異構(gòu)的 backend。基于跟引擎團(tuán)隊(duì)在可伸縮建模上面的研發(fā),希望能夠打通從模型結(jié)構(gòu)設(shè)計(jì)到模型結(jié)構(gòu)搜索,在應(yīng)用部署層面上能夠打通整條鏈路。能夠在支付寶 APP 里面實(shí)現(xiàn)真正的千機(jī)千模概念,能夠真正的在視覺(jué)上為不同的機(jī)型的用戶能夠提供更好的用戶體驗(yàn)和算法服務(wù)。