本文由騰訊WXG應用研究員breezecheng原創發表於公眾號“騰訊技術工程”,原題“微信「掃一掃識物」 的背後技術揭秘”。

一、引言

現在市面上主流的移動端IM應用於都有“掃一掃”功能,看起來好像也就能掃一掃加好友、加群,但實際上作為一個IM產品的重要信息入口,“掃一掃”功能也可以很強大。

▲ 幾款主流IM裡的“掃一掃”功能

以國民應用微信為例,微信的“掃一掃”(即掃碼功能)已經深入人心。

微信的“掃一掃識物”功能2019年12月23日已在iOS版本中正式上線,從識別特定編碼形態的圖片(二維碼/小程序碼/條形碼/掃翻譯),到精準識別自然場景中商品圖片(鞋子/箱包/美妝/服裝/傢電/玩具/圖書/食品/珠寶/傢具/其他商品),掃碼識物以圖片(視頻)作為媒介,聚合微信內部有價值的生態內容如電商、百科、資訊進行展示,有哪些技術難點需要去克服?本文將詳細為你解密微信“掃一掃識物”功能背後的技術秘密。

(本文同步發佈於:http://www.52im.net/thread-2887-1-1.html

二、掃一掃識物是做什麼的?

掃一掃識物是指以圖片或者視頻(商品圖:鞋子/箱包/美妝/服裝/傢電/玩具/圖書/食品/珠寶/傢具/其他商品)作為輸入媒介來挖掘微信內容生態中有價值的信息(電商+百科+資訊,如圖 1 所示),並展示給用戶。這裡我們基本覆蓋瞭微信全量優質小程序電商涵蓋上億商品 SKU,可以支持用戶貨比 N 傢並直接下單購買,百科和資訊則是聚合瞭微信內的搜一搜、搜狗、百度等頭部媒體,向用戶展示和分享與該拍攝商品相關的資訊內容。

▲ 圖1. 掃一掃識物功能示意圖

百聞不如一試,歡迎大傢更新 ios 新版本微信 → 掃一掃 → 識物 自行體驗,也歡迎大傢通過識物界面中的反饋按鍵向我們提交體驗反饋。圖 2 即為掃物實拍展示。

(視頻地址點此查看)

▲ 圖 2. 掃一掃識物實拍展示

三、掃一掃識物落地哪些場景?

掃一掃識物的目的是開辟一個用戶直達微信內部生態內容的一個新窗口,該窗口以用戶掃圖片的形式作為輸入,以微信生態內容中的百科、資訊、電商作為展示頁提供給用戶。除瞭用戶非常熟悉的掃操作,後續我們會進一步拓展長按識圖操作,將掃一掃識物打造成用戶更加觸手可及的運用。

掃一掃識物的落地場景如下圖所示,主要涵蓋 3 大部分:

  • a. 科普知識:用戶通過掃物體既可以獲得微信生態中關於該物體相關的百科、資訊等小常識或者趣聞,幫助用戶更好的瞭解該物體;
  • b. 購物場景:同款搜索功能支持用戶對於見到的喜愛商品立即檢索到微信小程序電商中的同款商品,支持用戶掃即購;
  • c. 廣告場景:掃一掃識物可以輔助公眾號文章、視頻更好的理解裡面嵌入的圖片信息,從而更好的投放匹配的廣告,提升點擊率。

四、掃一掃識物給掃一掃傢族帶來哪些新科技?

對於掃一掃,大傢耳熟能詳的應該是掃二維碼、掃小程序碼,掃條形碼,掃翻譯。無論是各種形態的碼還是文本字符,都可以將其認為是一種特定編碼形態的圖片,而識物則是識別自然場景圖片,對於掃一掃傢族來說是一個質的飛躍,我們希望從識物開始,進一步拓展掃一掃對自然場景圖片的理解能力,比如掃酒,掃車,掃植物,掃人臉等等服務,如下圖 3 所示。

▲ 圖3. 掃一掃傢族

五、掃一掃識物整體框架

下面我們為大傢重點介紹掃一掃識物的完整技術實現方案,圖 4 展示的是掃一掃的整體框架示意圖。

該框架主要包含 4 大部分:

  • 1)用戶請求環節;
  • 2)商檢離線入庫環節;
  • 3)同款檢索+資訊百科獲取環節;
  • 4)模型訓練部署環節。

四大環節抽取核心技術模塊可以總結為三個,即為數據構建、算法研發、平臺建設,我們將一一道來。

▲ 圖4. 掃一掃識物整體框架

數據構建:

AI 時代數據為王,數據構建的目的就是為瞭更好的服務於 AI 算法,比如對於用戶請求圖、商傢入庫圖都需要進行主體檢測、類目預測、特征提取,都需要有高質量的訓練數據來支撐檢測模型、分類模型以及檢索模型。一言以蔽之,數據決定瞭整個掃一掃識物性能上限。

算法研發:

算法研發是為瞭充分的利用已有的數據,為識物的每一個環節如檢測、類目預測,檢索特征提取都在精度、速度上到達最優的折中,從而實現用戶任意商品請求都能獲得精準的同款召回,以及更加相關的資訊展示。算法研發的好壞決定瞭掃一掃識物的性能下限。

平臺建設:

無論是數據建設,算法研發,模型上線都離不開一個好的平臺支持,我們為掃一掃識物從數據清洗、模型訓練、部署,上線打造瞭一個完整的平臺。可以說,平臺建設關乎研發效率,決定瞭掃一掃識物能否實現上線。

六、掃一掃識物數據建設

掃一掃識物數據構建分為兩大塊,一大塊是用於模型訓練的訓練數據建設,另一大塊則是支撐用戶任意商品檢索請求的線上檢索庫構建。

模型訓練數據庫構建 訓練數據庫主要是支援模型訓練,如同款檢索中需要的物體檢測模型,類目預測模型以及同款檢索模型等,在百科資訊搜索中則需要訓練商品標題文本分類模型,命名實體識別模型等。本篇文章我們重點關註視覺語義這一塊的算法策略,對於百科資訊用到 NLP 算法我們在下一篇文章中詳細闡述。3.3 章節中我們將闡述數據構建中用到的圖片去重,檢測數據庫標註用到的半監督學習算法,以及檢索數據構建提出的半自動同款去噪+合並算法。

▲ 圖5. 訓練數據構建(視覺模塊)

在線檢索數據庫構建 在線檢索數據庫的覆蓋范圍至關重要,決定瞭能否支持用戶的任意商品搜索請求。我們采用定向導入、長尾加爬、訪問重放、主動發現四種策略不斷擴展我們的商傢圖規模,目前已覆蓋 95%+常見商品。這一數字還在不斷上漲中,我們希望後續對用戶的任意商品請求都能夠精確召回同款商品。

6.1、圖片去重

無論是檢測數據庫還是檢索數據庫,第一步都是清理掉重復圖片,這樣既可以降低存儲壓力,也能夠降低模型訓練壓力。

常用的圖片去重算法有如下 2 種:

  • 1)MD5 去重,去除完全相同的圖片;
  • 2)哈希去重,除完全重復圖外,還能去除在原圖上進行瞭些簡單加工的圖片。

如改變原圖的亮度、尺度、對比度、邊沿銳化、模糊、色度以及旋轉角度,這些圖片保留意義也不大,因為在模型訓練中采用數據增強策略可以覆蓋到。常用的哈希去重主要有 aHash,dHash,pHash 等,詳細理解可以參閱相關文章[1,2],我們重點對比各個去重算法的速度和魯棒性,如下圖 6 所示。

▲ 圖6. 常用去重算法速度和魯棒性對比

對比圖 6 中的數字可知,dHash 的去重速度最快,因為隻需要計算臨近像素的亮度差異,非常簡單易處理,而且對於圖片簡單的 ps 操作具有較好的容忍程度,除圖片旋轉外,諸如亮度、尺度、對比度、邊沿銳化、模糊、色度等較小改變都具有很好的抗幹擾能力,有助於我們清理更多的無效圖片。最終我們也是采用 dHash 對我們訓練庫進行去重操作,11 類全量爬蟲商品庫中,大概清理掉瞭 30%的重復圖片,累計有 300w 左右。

6.2、檢測數據庫構建

從圖 4 展示的整體框架可知,掃一掃識物的首要步驟就是主體檢測,即先定位用戶感興趣的區域,去除掉背景對後續環節的幹擾。主體檢測基本是大部分以圖搜圖產品的公認首要操作,如下圖 7 所示的阿裡的拍立淘,百度的拍照識圖,以及微軟的識花小程序。當然主體檢測的算法各有差異,如拍立淘采用的是物體檢測算法,百度識圖采用的是顯著性區域預測,微軟識花需要用戶配合定位。為瞭解放用戶,我們希望算法能夠自動定位商品區域,考慮到顯著性區域預測很難處理多個商品出現在視野的情況,類似拍立淘,我們采用更加精確的物體檢測算法來定位商品位置,並選擇置信度最高的商品進行後續的商品檢索以及資訊百科展示。

▲ 圖7. 常用以圖搜圖產品的主體檢測操作示意圖

當然物體檢測模型離不開檢測數據庫的支撐,這裡我們對比三種標註物體 boundbox 位置和類別的方法,即人工檢測標註,弱監督檢測標註以及半監督學習檢測標註。

人工檢測標註:常用的人工檢測標註工具 labelimg 如下圖所示,我們需要標註爬蟲的商品庫中 11 類商品出現的位置以及對應的類別標簽。考慮到人工標註的時間和金錢成本都非常巨大,我們隻采用該策略標註少量的樣本,更多的采用後續的算法進行自動檢測框標註。

▲ 圖8. 常用人工檢測標註工具labelimg

弱監督檢測標註:該算法的核心思想是標註圖片中所含物體的類別相比標註框+類別的時間成本要低很多,如何隻利用全圖類別信息來自動推斷物體的位置信息,從而完成自動檢測標註呢?學術界和工業界有大量的研究者對這一方向進行瞭研究和探索,主要思路都是挖掘圖片中的局部顯著性區域,用其來表征全圖的類別語義信息,如圖 9 列舉瞭幾篇代表性文章。圖 9 左下角算法重點闡述下,它是業內第一篇用深度學習來做弱監督檢測的文章,實驗室師兄研發,我們還基於該算法參加過 ImageNet14 的競賽,拿瞭一個小分支的冠軍。盡管願景很美好,弱監督檢測算法有個嚴重的缺陷,就是很容易擬合到局部區域,比如從大量貓的圖片中擬合到的位置是貓臉區域,而很難定位到完整的貓的位置,這對於我們同款商品檢索來說是難於接受的,我們需要精確召回同一款商品(細粒度檢索),所有信息量都非常重要,因而該算法基本被我們 pass 掉瞭。

▲ 圖9. 常用弱監督檢測算法[3,4,5,6]

半監督檢測標註:相比弱監督檢測算法,半監督檢測算法更加貼近任務本身:基於少量的人工標註檢測框+檢測開源數據庫初始化檢測模型,然後用該模型去自動標註剩下的商品數據庫,並用增加的標註來重新更新檢測模型,之後迭代進行模型更新和自動標註。當然為瞭控制上述環節持續正向激勵,我們為對置信度較低的標註樣本進行人工校正,算法示意圖如下所示。基於該算法,我們完成瞭整個商品檢測數據庫的標註,11 類全量商品庫標註瞭上百萬個檢測框,其中人工啟動標註隻有十幾萬,其他的基本都是基於算法自動標註,大大節省瞭標註的時間和金錢成本。

▲ 圖10. 半監督檢測算法流程示意圖

6.3、檢索數據庫構建

完成瞭圖片去重和主體檢測之後,大傢一個自然的想法就是,能否直接用這批摳圖後的商品圖結合 SKU 貨號進行檢索模型的訓練,答案是否定的。

摳圖之後的商品圖還存在兩大問題:

  • 1)同款噪聲問題,即同一個 SKU 下面存在非同款的圖片,這可能是由於用戶上傳錯誤圖片、商傢展示的是局部細節圖、檢測摳圖錯誤等因素導致;
  • 2)同款合並問題,不同的 SKU 可能對應的是同一個款式商品,不加以合並,會導致分類類別數目急劇膨脹,而且模型難於收斂。

因此,在訓練檢索模型之前,我們需要完成同款去噪和同款合並兩個環節,我們提出瞭基於自動聚類的同款去噪算法和基於混淆分類矩陣的同款合並算法,如下圖 11 所示。後續我們將分別對這個算法進行解析。

▲ 圖11. 同款去噪+同款合並算法示意圖

6.3.1同款去噪

我們采用聚類算法來自動去除每個商品 SKU 中存在的噪聲圖片。我們研究瞭常用的聚類算法,如下圖 12 所示,

▲ 圖12. 常用聚類算法聚類效果展示及速度對比

關於這些算法的理論及實現流程,大傢感興趣可以參閱[7]。我們在圖 13 中對上述聚類算法在常見指標上進行瞭對比分析,考慮到商品 SKU 聚類的特性,我們更加關註聚類算法的抗噪聲能力,對不同 SKU 特征分佈的適應性以及處理速度,綜合分析實踐後,我們選擇瞭 DBSCAN 作為我們的聚類算法,並對其進行改造來更加適配商品的聚類去噪,我們稱其為層次法 DBSCAN。

▲ 圖13. 常用聚類算法各種指標對比

層次法 DBSCAN 主要分為兩個環節,分別為 step1.尋找距離最緊致的最大類簇,以及 step2.重訪噪聲樣本, 撈回同款困難樣本,增加多樣性。下面我簡要介紹這兩個步驟。

層次法 DBSCAN 步驟 1 該步驟的目的是挑選 SKU 中距離最緊致的最大類簇,因為 SKU 中的同款樣本相對噪聲樣本分佈更有規律,數目也一般會更多。算法示意圖如下圖 14 所示,我們鄰域內最小樣本數目設置為 2,將所有的核心點聯通後,假設有多個類簇,我們選擇數目最多的類簇作為我們挑選的商品圖片,剩下的樣本作為噪聲樣本。

▲ 圖14. 層次法DBSCAN步驟一過程示意圖

圖 15 展示瞭某個實際 SKU 的步驟一聚類效果,從中我們可以發現最大聚類由於控制的閾值很嚴格,樣本分佈很單一化,而在噪聲中實際有一些誤為噪聲的困難正樣本(用紅圈示意)。這些困難的正樣本對於提升檢索模型的魯棒性和泛化能力非常重要,因而我們需要把噪聲中的困難正樣本撈回到左邊的最大類簇中來,即為步驟 2 完成的事情。

▲ 圖15. 某個SKU的步驟一實際聚類效果展示圖

層次法 DBSCAN 步驟 2 為瞭將噪聲樣本中的困難正樣本撈回,提升訓練樣本的豐富性,我們需要重訪噪聲樣本,計算噪聲樣本和最大類簇的距離,並將滿足閾值條件的近距離噪聲樣本重新分配給最大類簇,如下圖 16 所示。

▲ 圖16. 層次法DBSCAN步驟二過程示意圖

6.3.2同款合並

同款合並的目的是為瞭將不同 SKU 但是同一款式的商品進行合並,從而得到實際有效的款式類目。我們采用分類混淆矩陣來完整自動同款合並。基於合並前的數據我們可以訓練初始分類模型,並計算任意兩個 SKU 之間的混淆概率。混淆概率定義為 p_ij=c_ij/n_i,其中 p_ij 為第 i 類預測為第 j 類的混淆概率,c_ij 為模型將第 i 類預測為第 j 類的樣本個數,n_i 為第 i 類樣本的實際個數。某個 SKU 的混淆概率矩陣如下所示,可知,當兩個 SKU 實際為同一個款式時,如圖 17 左中類目 1 和 3,那麼他們之間很難區分,混淆的概率就會偏大。通過設定合並同款的分數閾值,我們能夠將同款 SKU 進行合並。實際操作過程中,我們采用下圖右邊的迭代步驟進行,即先采用高的閾值合並置信度最高的同款,然後更新優化分類模型,並降低閾值合並更多的同款 SKU,上述步驟迭代進行,直到沒有同款 SKU 需要合並。

▲ 圖17. 左:商品SKU之間的混淆概率示意圖,右:迭代合並流程示意圖

合並完同款之後,我們得到的訓練檢索數據庫的規模如下圖所示,總共為 7w+多類目,1kw+訓練樣本,相比目前主流的開源數據庫如 ImageNet(1000 類,130w+)和 OpenImage(6000 類,900w+),在類別和數目上都要更加豐富。

6.3.3成本收益

這裡我們對采用算法進行同款去噪+同款合並,和采用純人工清理進行對比在時間和金錢上都有巨大的收益提升,加快瞭整個項目的迭代速度。

七、掃一掃識物算法研發

兵馬未動,糧草先行,上一章節我們已經講述瞭如何備好糧草(清洗高質量的訓練數據),那麼這一章節自然而然就是亮兵器瞭(高效利用現有訓練數據的算法模型)。按照掃一掃識物整體框架,我們重點介紹視覺同款搜索涉及到的三大模塊,即為物體檢測、類目預測和同款檢索。

7.1、物體檢測

物體檢測是掃一掃識物的第一個環節,我們需要有效的定位用戶拍攝圖片中的商品位置,剔除掉背景對後續同款檢索的幹擾。

學術界和工業界對物體檢測展開瞭大量的研究,如下圖 18 所示:

  • 1)研究者從不同角度對檢測算法進行優化,如從速度考慮分為 one-stage 和 two-stage 檢測;
  • 2)從 anchor 出發分為 anchor-based、anchor-free、guided anchors,近期 anchor 又開始崛起,在性能上匹配 two-stage,速度上匹配 one-stage;
  • 3)還有從類別不平衡出發,不同尺度物體檢測等等出發。

▲ 圖18. 物體檢測常用深度學習算法

考慮商品檢測中,主要重視三個問題:

  • 1)速度問題;
  • 2)檢測標註類別不平衡;
  • 3)物體尺度變化差異大。

綜合這三個問題,我們選擇圖 19 中的 retinanet [8]作為我們的檢測器。眾所周知,retinanet 屬於 one-stage 檢測器,從原圖出發直接回歸物體的位置和類別,因而速度快,其次它采用金字塔架構,有效的適配多尺度物體檢測,最後,retinanet 提出瞭 focal loss 可以有效的適應類別不平衡問題,以及樣本難易問題。後續我們會采用 anchor-free 的策略進一步優化 retinanet 的 head 部分,進一步加速模型的檢測速度,這裡不展開介紹。

▲ 圖19. retinanet算法架構示意圖

我們將 retinanet-resnet50fpn 和經典的單階段檢測器 yolov3,和兩階段檢測器 faster-rcnn-resnet50-fpn 進行對比,如下表格 20 所示。評測數據采用的是外包采集的 7k 張圖片,涵蓋瞭 11 大類,對比表格結果可知,retinanet 在速度和精度上達到瞭很好的折中效果。後續我們會通過 tensorRT 進一步優化 retinanet 的前向速度,劇透下最快可以達到 80FPS。

▲ 圖20. retinanet算法架構示意圖

7.2、類目預測

類目預測是為瞭確定檢測摳圖中物體的類別,從而方便後續用指定類目的模型進行特征提取和同款索引。大傢可能會有所疑慮,因為前面檢測器已經識別出瞭商品的位置和類目,為何不直接用檢測器的類目,而是要重新來過一次類目預測呢?原因如下圖 21 所示:訓練檢測器的數據有限,而用戶上傳的圖片可能千奇百怪,那麼訓練庫未出現的子類很容易造成檢測器分類錯誤,其次是類間混淆性也會帶來分類錯誤。

▲ 圖21. 直接采用檢測器的類目存在的問題

那麼該如何提升類目識別的精度呢?這裡我們利用海量的線上檢索庫來提升類目預測的精度。即為我們將用戶 query 在檢索庫中進行一次檢索,查詢最近鄰的 top-20 所屬的類目,結合檢測器的預測類目,來重新加權投票得到物體的最終類目。最終,通過檢測+檢索,我們能極大提升類目預測的精度,將近 6 個點的提升。

7.3、同款檢索

同款檢索是掃一掃識物的靈魂。不同於一般的以圖搜圖,隻需要找出相似的圖片即可,同款檢索屬於細粒度檢索,需要檢索出 query 的精確同款,比如華為 watch GT2 需要搜出來的就是該款手表,不能是其他牌子的手表,這就導致同款檢索的挑戰非常大。

下圖 22 列出瞭同款檢索的難點與挑戰:

  • 1)類間混淆性問題,即如何區分相似款和同款;
  • 2)同款召回問題,即同款本身存在較大差異,如何有效的檢索出同款。

考慮到這些難點,我們提出瞭 9 大方向來優化我們的同款檢索模型。下面一一解釋。

▲ 圖22. 同款檢索的難點與挑戰

7.3.1同款檢索之分類模型

這是我們的 baseline 模型。我們使用的分類模型如下圖 23 左側所示。眾所周知,分類模型采用 softmax 將邏輯值映射為類目的概率值,下圖右上角表格所示,softmax 能很好的放大邏輯值的差異,將正確類目的概率逼近 1,有利於模型快速收斂。下圖中我們還展示瞭 softmax 分類模型的決策邊界,以及在 mnist-10 類目上學習得到的特征分佈[9,10]。

觀察可知,softmax 分類器學習到的特征空間有 3 大特征:

  • 1)特征空間呈現扇形分佈,因而用餘弦距離檢索會優於歐式距離,後面我們會固定采用餘弦距離進行同款檢索;
  • 2)不同類目分佈不均衡。事實上我們希望同等重視各個類目,他們能均勻的分割整個特征空間,有利於模型泛化能力;
  • 3)邊界樣本檢索不準確,從特征圖可知,邊界樣本距離臨近類的餘弦距離很可能小於該樣本到同類之間的距離,造成檢索錯誤。

下面,我們重點修整分類模型的所存在的問題。

▲ 圖23. 分類模型的重要特性分析

7.3.2同款檢索之分類模型改進 1 歸一化操作

歸一化包括兩種,對圖 23 中的分類權重 W 進行歸一化,以及對特征 x 進行歸一化。那麼歸一化的作用是什麼呢?先來說說權重 W 的模長和特征空間分佈不均衡的關系。有研究者[10]表明,訓練數據庫中樣本多的類目對應的 W 的模長也會越長,表征模型越重視該類的分類正確程度,而忽視瞭其他樣本數目少的類目,如圖 24 所示,MNIST 和 WebFace 兩個數據庫都驗證瞭上述的映射關系。而實際上我們希望的是每一類都能被平等的重視,特征空間中每一類能夠均衡的劃分整個空間。

因而我們需要對 W 進行歸一化,讓所有類別的權重一致,即:

▲ 圖24. 每一類的樣本數目和分類權重W的映射關系

特征歸一化的操作類似,即為:

回顧 softmax 分類的決策邊界:

我們將 W 和 x 都進行歸一化,因而決策邊界隻取決於角度,迫使模型訓練收斂後特征分佈更加扇形化,有利於餘弦檢索。但是兩者同時歸一化,會造成模型難於收斂,大傢可以思考一番為何?參考圖 23 中的 softmax 特性,由於權重和特征都進行瞭歸一化,分類邏輯值最大為 1,最小為-1,同樣的三類分類學習中 gt 類目對應的 softmax 概率最大隻到 0.78,遠小於 1,導致模型仍有較大 loss,不好收斂。解決方法比價簡單,對邏輯值乘以一個尺度值 s 即可,擴大差異化,有利於模型收斂。

7.3.3同款檢索之分類模型改進 2 角度 Margin

增加角度 Margin 的核心目的是讓 softmax 分類的扇形分佈更加有利於檢索:即為同類更加聚集,不同類更加遠離。常見的 3 種增加角度 margin 的策略入下圖 25 所示:乘性 margin[10,11],加性餘弦 margin[12],加性角度 margin[13]。

▲ 圖25. 常見softmax和margin softmax對比

增加 margin 後,softmax 分類模型得到的類內特征更加緊湊,如下圖 26 所示。這裡多說幾句,相比乘性 margin,加性 margin 更加容易訓練,這是因為乘性 margin 將餘弦的單調區間從[0,π]縮小為[0,π/m],梯度更新區間變小瞭,而加性 margin 單調區間不變,有利於模型收斂。

▲ 圖26. 常見softmax和margin softmax特征分佈對比

7.3.4同款檢索之分類模型改進 3 排序損失

分類模型的學習目的是類別可區分,和檢索任務還是有一定區別,引入排序損失的目的就是顯示的去優化檢索任務,即為歐式空間中同類樣本的距離要小於不同類。一般排序損失和分類損失疊加使用效果要更好,我們設計的模型結構如下圖 27 所示:

▲ 圖27. 分類模型+排序損失模型架構

圖 27 中右邊展示的是常用的排序損失函數,如 contrastive loss, triplet loss, lifted structure loss 等。圖中重點展示瞭三元組損失函數以及優化的可視化目標,即同類距離要比不同類距離小於一個 margin。

7.3.5同款檢索之分類模型及其改進後性能對比

此處我們對分類模型和其改進版本在商品檢索任務上進行性能對比。

評測集合是我們收集的 11 大類商品庫,其中用戶評論圖作為查詢樣本,檢索樣本為同款商傢圖和非該款式的噪聲集合組成,可以較好的模擬線上檢索庫。

圖 28 展示瞭分類模型及其改進版本在珠寶類目上的性能對比,可知:

  • 1)增加歸一化和角度加性 margin 後,即為 ArcFace[13],檢索性能要優於常用 softmax 分類模型;
  • 2)在分類模型基礎上增加排序損失,如 Hard Triplet Loss,檢索性能優於常用 softmax 分類模型;
  • 3)分類+歸一化+角度 margin+排序,如最後兩行所示,性能進一步提升,但是提升幅度不是特別大。

▲ 圖28. 分類模型及其改進版性能對比

7.3.6同款檢索之多任務模型

為瞭進一步提升檢索模型的特征表達能力,我們探索讓檢索特征捕捉更加豐富的商品特性,如在款式的類別上,加上視角、品牌等商品屬性,如下圖 29 所示。

▲ 圖29. 檢索特征嵌入多種商品屬性

為瞭適應多屬性標註標註的學習,我們設計如下圖 30 的多任務協同學習模型。多任務協同學習模型的好處非常明顯,可以更好的利用屬性之間的相關性,有利於網絡的優化收斂,以及提升模型的泛化能力,這樣得到的檢索特征更加有利於商品同款檢索。這裡有個問題,不同任務權重如何設計?

當然我們可以手工設置每個任務的權重,但這需要對各個任務理解較為深入加上大量調參得到,另外的策略是自動得到各個任務的權重,有許多研究者對此進行瞭研究,這裡我們采用驗證集趨勢算法[14]來自動計算得到各個任務的權重,如下圖 31 所示。該算法思想比較直接,即為人工設置高權重用於主任務,如款式分類,其他任務基於其優化難易程度來得到權重,如難優化(損失波動大且絕對值高)的任務權重大,易優化的權重小。使用多任務協同學習後,模

▲ 圖30. 多任務學習網絡來利用多屬性標註

▲ 圖31. 基於驗證集趨勢算法的多任務協同學習模型

型的檢索性能相比單任務模型有較大的提升,如下圖 32 所示。

▲ 圖32. 多任務模型相比單任務模型檢索性能對比

7.3.7同款檢索之註意力模型

在圖 22 中我們講述瞭同款檢索的一個巨大的挑戰即為相似款對同款檢索的混淆。為瞭更好的區分同款和相似款,我們希望更加關註一些顯著的區域,如下圖 33 中手表的 logo,刻寫的文字,鞋子的 logo,花紋等。常用的註意力模型分為三種[15],有特特征空間註意力,特征通道註意力,以及 2 種註意力相結合。通過實驗對比可知,增加特征空間註意力後,模型檢索性能提升,但是增加特征通道註意力,檢索性能反而下降,如下圖 34 所示。我們認為空間註意力有利於強化模型重視顯著空間區域,而特征通道註意力可能造成瞭模型過擬合,性能反而有所下降。

▲ 圖33. 註意力模型

▲ 圖34. 三種註意力模型檢索性能對比

7.3.8同款檢索之層級困難感知模型

同樣針對同款檢索的兩大難點和挑戰,即類間混淆性和類內差異性,我們采用層級困難感知模型來充分重視這兩大難題,如下圖 35 所示的包包。盡管是同款,其相似程度可能有很大差異,如該款式包包由於拍攝視角、遮擋等造成的變化,對於非同款的負樣本,也有非常相似的其他款式包包,和差異比較大的其他商品入酒類、口紅等。

▲ 圖35. 商品檢索中同款類內差異性和類間混淆性的層級分佈特性

層級困難感知模型模型[16]結構如下圖 36 所示,其排序損失按層級分佈,第一層級針對所有的正負樣本進行排序學習,第二層負責較為困難的正負樣本對,而第三層則負責更加困難的正負樣本對,並且對於越困難的樣本對,模型網絡設計的越深。

▲ 圖36. 層級困難感知模型

層級困難感知模型通過層級設計,匹配正負樣本對的層級分佈特性,能夠有效的提升模型的同款檢索性能,如下圖 37 的實驗所示。

▲ 圖37. 層級困難感知模型同款減速性能

7.3.9同款檢索之互學習模型

眾所周知,一般競賽中大傢都會融合多個模型的結果來提升精度。但是在實際的項目落地,我們需要同時考慮部署模型的精度和速度,融合多個模型會占用更多計算資源,降低前向速度。那麼怎麼既然融合多個模型結構的優勢,又不增加計算資源呢?這就是互學習模型的核心思想,如下圖所示,互學習模型通過 KL 散度 loss 來吸收其他模型的結構優勢,部署的時候隻需要部署一個模型即可,不增加計算資源。

▲ 圖38. 互學習模型

實驗中,我們利用 resnet152 和 inceptionv4 進行互學習,實際部署采用 resnet152 進行檢索,其性能如下圖 39 所示。互學習除瞭增加模型訓練時間,對模型上線不增加任何負擔,但是精度能夠較為顯著的增加。

▲ 圖39. 互學習模型同款檢索精度

7.3.10同款檢索之局部顯著性擦除

通過上述所有策略來提升模型的同款檢索性能後,我們發現仍然存在一個問題,就是深度學習模型會過分關註圖像的紋理區域,而忽視物體的形狀。比如在行旅箱的同款檢索中,返回的是印有相同圖案的書包,錢包等,而非行旅箱。如何讓模型在關註

▲ 圖40. 常用CNN模型都會過分關註圖像紋理,而忽略形狀

紋理的同時,也關註下物體的形狀信息呢?我們采用局部顯著性擦除技術來破壞原圖的紋理,迫使模型來關註物體的形狀。常見的局部顯著性擦除有 3 種,如下圖 41 所示,分別為隨機擦除,伯努利擦除,對抗擦除。這裡我們重點對比瞭前兩者,對抗擦除後

▲ 圖41. 局部顯著性擦除

續有時間再補上其性能,實驗結果如下圖 42 所示,局部顯著性擦除能夠極大的提升模型的同款檢索精度。

▲ 圖42. 局部顯著性擦除同款檢索性能

7.3.11同款檢索之互 k 近鄰編碼重排序

前面我們講述的都是優化檢索模型,這裡我們講述的是如何進一步優化檢索模型的檢索結果,即重排序。

在重排序裡面,我個人非常欣賞互 k 近鄰算法[17],非常簡單高效。互 k 學習算法最早被提出來用於行人再檢索,如下圖 43 所示,其核心發現是,對於 query 樣本,其檢索的 top-10 樣本中,正樣本(和 query 為同一人)換做查詢樣本時,其 k 近鄰中有原始的 query 樣本,而負樣本(和 query 非同一個人),其 k 近鄰中沒有原始 query 樣本,基於該發現,作者在馬氏距離的基礎上,增加瞭基於互 k 近鄰的距離度量,如圖中下方所示,基於該度量可以有效的對原排序進行重排序,將正樣本挪前,將負樣本挪後。

▲ 圖43. 行人再識別中的互k學習算法

但是實際上,我們無法直接利用該算法用於商品同款檢索,原因在於我們的 query 是用戶評論圖,而檢索圖是商傢圖,他們存在很大的差異,造成互 k 近鄰會失效,後續我們重點是如何優化特征度量空間,讓模型的域差異減小,然後再利用互 k 近鄰來進行重排序。

7.3.12競品對比

最後,我們基於用戶上傳的 7k 張圖片進行 11 類檢測準確度評測, 運行環境 NVIDIA GPU P4,來對比不同競品的精度差異。對比試驗可知,我們的算法要優於京東,接近拍立淘。

八、掃一掃識物平臺建設

正所謂磨刀不誤砍柴工,平臺建設對於我們的數據構建,模型學習,模型部署都是至關重要。下面我們一一介紹。

8.1、數據清理平臺

為瞭加快人工校驗以及人工標註的速度,我們開發瞭一系列工具來輔助標註和檢驗模型精度,這裡不做過多解釋。

8.2、模型訓練平臺

這幾年,機器學習平臺發展迅猛,很多公司擁有自己的深度學習平臺,我們人少錢少,主要是基於開源的深度學習平臺來開發符合商品同款檢索的特有平臺。我們主要是開發瞭 caffe 和 pytorch 兩套同款檢索平臺,後續重點介紹。

▲ 圖44. 機器學習平臺發展史[18]

8.2.1caffe

我們開發的第一個模型訓練平臺是 caffe。caffe 平臺的核心架構如下圖 45 所示,caffe 平臺現在主要是工業界用的多,現在學術界用的少些。

我們開發的 caffe 同款檢索平臺,具有如下特點:

  • 1)支持豐富的數據增廣策略;
  • 2)支持多類型數據加載;
  • 3)支持蒸餾學習/互學習算法;
  • 4)支持困難感知模型算法;
  • 5)支持排序模型算法;
  • 6)支持 batchsize 擴充。

caffe 的優缺點非常明顯,其優點有:

  • 1)訓練快,結果穩定;
  • 2)基於 prototxt 快速試驗各種多模型/多標簽/多數據源任意組合。

其缺點有:

  • 1)新算法開發慢;
  • 2)調試不靈活;
  • 3)顯存優化不好;
  • 4)學術前沿方法更新少。

第 4 個缺點是較為致命的,我們無法快速跟進學術前言,因而我們後續決定開發 pytorch 檢索平臺。

▲ 圖45. caffe平臺核心架構

8.2.2pytorch

我們開發的 pytorch 檢索架構如下圖 46 所示,基本支持 caffe 檢索平臺的所有特點:

  • 1)支持豐富的數據增廣策略;
  • 2)支持多類型數據加載;
  • 3)支持蒸餾學習/互學習算法;
  • 4)支持排序模型算法;
  • 5)支持更多主流網絡 EfficientNet;
  • 6)支持數據去噪/合並同款/檢索;
  • 7)支持混合精度訓練。

pytorch 優缺點也非常明顯,其優點:

  • 1)自動求導,算法開發效率高;
  • 2)動態圖,Python 編程,簡單易用;
  • 3)Tensorboard 可視化方便;
  • 4)Github 資源多,緊跟前沿;
  • 5)Pytorch1.3 支持移動端部署。

當然 pytorch 也不是完美無缺的,相比 caffe 有其缺點:

  • 在多任務自由組合不如 caffeprototxt 方便。

▲ 圖46. pytorch同款檢索平臺構建

8.2.3模型部署平臺

模型訓練我們可以不在乎模型運行時間代價,但是在模型部署時候我們得要充分重視模型的資源占用情況,盡量提升模型的並發能力,如 GPU 部署時候優化顯存,適配硬件,加快速度。這裡我們重點介紹後臺 GPU 部署使用的 tensorRT 和手機端部署使用的 ncnn。

▲ 圖47.模型訓練到部署

8.2.3.1)模型部署平臺:tensorRT

tensorRT 是英偉達開發的部署平臺,能夠有效的降低模型顯存,加速模型前向速度。這裡我們不展開細節,大傢可以關註下面的檢測模型和檢索模型,通過 tensorRT 量化加速後,顯存和速度都有瞭巨大的飛躍。

▲ 圖48.tensorRT部署加速

8.2.3.2)模型部署平臺:ncnn

移動端部署,我們用騰訊自己開發的 ncnn 架構,其優點如下圖 49 左圖所示,demo 如右圖所示。

▲ 圖49.手機移動端ncnn部署

8.3、任務調度系統平臺

任務調動平臺由我們的後臺大神們開發,主要用於各個任務的有效調用,考慮到我們的檢索庫是上億的數據庫,需要保證平臺具有較好的容錯、容災,以及魯棒機制。如下圖 50 所示,當然這裡展示的隻是冰山一角,後面等後臺大神們在 KM 裡給大傢詳細解釋。

▲ 圖50. 億級檢索任務調度平臺

九、掃一掃識物展望

最後,我們對我們的掃一掃識物進行未來展望,還是那句話,我們期待掃一掃識物成為大傢的一個生活習慣:掃一掃,知你所看;掃一掃,新生活,新姿勢。

▲ 圖51. 掃一掃識物未來展望

十、參考文獻

  • [1] 公司內部文檔
  • [2] https://blog.csdn.net/Notzuonotdied/article/details/95727107
  • [3] Learning Deep Features for Discriminative Localization,CVPR16
  • [4] Weakly Supervised Object Localization with Latent Category Learning, ECCV14
  • [5] Weakly Supervised Deep Detection Networks, arXiv16
  • [6] Seed, Expand and Constrain: Three Principles for Weakly-Supervised Image Segmentation, arXiv16
  • [7] https://scikit-learn.org/stable/modules/clustering.html
  • [8] Focal Loss for Dense Object Detection, arXiv18
  • [9] https://zhuanlan.zhihu.com/p/76391405
  • [10] SphereFace: Deep Hypersphere Embedding for Face Recognition,arXiv18
  • [11] Large-Margin Softmax Loss for Convolutional Neural Networks, arXiv17
  • [12] CosFace: Large Margin Cosine Loss for Deep Face Recognition, arXiv18
  • [13] ArcFace: Additive Angular Margin Loss for Deep Face Recognition, arXiv18
  • [14] A Multi-task Deep Network for Person Re-identification, MM17
  • [15] Concurrent Spatial and Channel ‘Squeeze & Excitation’ in Fully Convolutional Networks, arXiv18
  • [16] Hard-Aware Deeply Cascaded Embedding, ICCV17
  • [17] Re-ranking Person Re-identification with k-reciprocal Encoding, CVPR17
  • [18] 公司內部文檔

附錄:更多相關文章

(本文同步發佈於:http://www.52im.net/thread-2887-1-1.html