1. 程式人生 > >微信掃物上線,全面揭祕掃一掃背後的識物技術!

微信掃物上線,全面揭祕掃一掃背後的識物技術!

導語| 12月23 日,微信掃物  iOS 版本正式上線。從識別特定編碼形態的圖片,到精準識別自然場景中商品圖片,有哪些難點需要去克服? 掃物以圖片作為媒介,聚合微信內部有價值的生態內容如電商,百科,資訊進行展示, 會催生哪些新的落地場景?本文將細細道來。

作者| breezecheng,騰訊 WXG 應用研究員

編輯| sukeli、尾尾

微信長期招收計算機視覺和OCR方向的人才, 歡迎簡歷[email protected]

一. 掃一掃識物概述

1.1 掃一掃識物是做什麼的?

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

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

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

圖 2 掃一掃識物實拍展示

 

1.2 掃一掃識物落地哪些場景?

掃一掃識物的目的是開闢一個使用者直達微信內部生態內容的一個新視窗,該視窗以使用者掃圖片的形式作為輸入,以微信生態內容中的百科、資訊、電商作為展示頁提供給使用者。除了使用者非常熟悉的掃操作,後續我們會進一步拓展長按識圖操作,將掃一掃識物打造成使用者更加觸手可及的運用。掃一掃識物的落地場景主要涵蓋 三大部分:

a.科普知識。使用者通過掃物體既可以獲得微信生態中關於該物體相關的百科、資訊等小常識或者趣聞,幫助使用者更好的瞭解該物體;

b.購物場景。同款搜尋功能支援使用者對於見到的喜愛商品立即檢索到微信小程式電商中的同款商品,支援使用者掃即購;

c.廣告場景。掃一掃識物可以輔助公眾號文章、視訊更好的理解裡面嵌入的圖片資訊,從而更好的投放匹配的廣告,提升點選率。

 

1.3 掃一掃識物給掃一掃家族帶來哪些新科技?

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

圖3 掃一掃家族

 

二. 掃一掃識物技術解析

 

2.1 掃一掃識物整體框架

下面我們為大家重點介紹掃一掃識物的完整技術實現方案,圖 4 展示的是掃一掃的整體框架示意圖。該框架主要包含 4 大部分:

1)使用者請求環節;

2)商檢離線入庫環節;

3)同款檢索+資訊百科獲取環節;

4)模型訓練部署環節。

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

圖4 掃一掃識物整體框架

資料構建

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

演算法研發

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

平臺建設

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

 

2.2 掃一掃識物資料建設

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

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

圖5 訓練資料構建(視覺模組)

線上檢索資料庫構建 線上檢索資料庫的覆蓋範圍至關重要,決定了能否支援使用者的任意商品搜尋請求。我們採用定向匯入、長尾加爬、訪問重放、主動發現四種策略不斷擴充套件我們的商家圖規模,目前已覆蓋 95%+常見商品。這一數字還在不斷上漲中,我們希望後續對使用者的任意商品請求都能夠精確召回同款商品。

 

2.2.1 圖片去重

無論是檢測資料庫還是檢索資料庫,第一步都是清理掉重複圖片,這樣既可以降低儲存壓力,也能夠降低模型訓練壓力。常用的圖片去重演算法有如下 2 種:

1)MD5 去重,去除完全相同的圖片;

2)雜湊去重,除完全重複圖外,還能去除在原圖上進行了些簡單加工的圖片,如改變原圖的亮度、尺度、對比度、邊沿銳化、模糊、色度以及旋轉角度,這些圖片保留意義也不大,因為在模型訓練中採用資料增強策略可以覆蓋到。常用的雜湊去重主要有 aHash,dHash,pHash 等,詳細理解可以參閱相關文章[1,2],我們重點對比各個去重演算法的速度和魯棒性,如下圖 6 所示。

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

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

 

2.2.2 檢測資料庫構建

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

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

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

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

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

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

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

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

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

 

2.2.3 檢索資料庫構建

完成了圖片去重和主體檢測之後,大家一個自然的想法就是,能否直接用這批摳圖後的商品圖結合 SKU 貨號進行檢索模型的訓練,答案是否定的,摳圖之後的商品圖還存在兩大問題:1.同款噪聲問題,即同一個 SKU 下面存在非同款的圖片,這可能是由於使用者上傳錯誤圖片、商家展示的是區域性細節圖、檢測摳圖錯誤等因素導致;2.同款合併問題,不同的 SKU 可能對應的是同一個款式商品,不加以合併,會導致分類類別數目急劇膨脹,而且模型難於收斂。因此,在訓練檢索模型之前,我們需要完成同款去噪和同款合併兩個環節,我們提出了基於自動聚類的同款去噪演算法和基於混淆分類矩陣的同款合併演算法,如下圖 11 所示。後續我們將分別對這個演算法進行解析。

圖11 同款去噪+同款合併演算法示意圖

 
2.2.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步驟二過程示意圖

 
2.2.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+),在類別和數目上都要更加豐富。

2.2.3.2 成本收益

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

2.3 掃一掃識物演算法研發

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

2.3.1 物體檢測

物體檢測是掃一掃識物的第一個環節,我們需要有效的定位使用者拍攝圖片中的商品位置,剔除掉背景對後續同款檢索的干擾。學術界和工業界對物體檢測展開了大量的研究,如下圖 18 所示,研究者從不同角度對檢測演算法進行優化,如從速度考慮分為 one-stage 和 two-stage 檢測;從 anchor 出發分為 anchor-based、anchor-free、guided anchors,近期 anchor 又開始崛起,在效能上匹配 two-stage,速度上匹配 one-stage;還有從類別不平衡出發,不同尺度物體檢測等等出發。

圖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演算法架構示意圖

2.3.1 類目預測

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

圖21 直接採用檢測器的類目存在的問題

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

2.3.2 同款檢索

同款檢索是掃一掃識物的靈魂。不同於一般的以圖搜圖,只需要找出相似的圖片即可,同款檢索屬於細粒度檢索,需要檢索出 query 的精確同款,比如華為 watch GT2 需要搜出來的就是該款手錶,不能是其他牌子的手錶,這就導致同款檢索的挑戰非常大,下圖 22 列出了同款檢索的難點與挑戰:1.類間混淆性問題,即如何區分相似款和同款;2.同款召回問題,即同款本身存在較大差異,如何有效的檢索出同款。考慮到這些難點,我們提出了 9 大方向來優化我們的同款檢索模型。下面一一解釋。

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

 
2.3.2.1 同款檢索之分類模型

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

1)特徵空間呈現扇形分佈,因而用餘弦距離檢索會優於歐式距離,後面我們會固定採用餘弦距離進行同款檢索;

2)不同類目分佈不均衡。事實上我們希望同等重視各個類目,他們能均勻的分割整個特徵空間,有利於模型泛化能力;

3)邊界樣本檢索不準確,從特徵圖可知,邊界樣本距離臨近類的餘弦距離很可能小於該樣本到同類之間的距離,造成檢索錯誤。下面,我們重點修整分類模型的所存在的問題。

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

 
2.3.2.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 即可,擴大差異化,有利於模型收斂。

 
2.3.2.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特徵分佈對比

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

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

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

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

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

此處我們對分類模型和其改進版本在商品檢索任務上進行效能對比。評測集合是我們收集的 11 大類商品庫,其中使用者評論圖作為查詢樣本,檢索樣本為同款商家圖和非該款式的噪聲集合組成,可以較好的模擬線上檢索庫。圖 28 展示了分類模型及其改進版本在珠寶類目上的效能對比,可知:1)增加歸一化和角度加性 margin 後,即為 ArcFace[13],檢索效能要優於常用 softmax 分類模型;2)在分類模型基礎上增加排序損失,如 Hard Triplet Loss,檢索效能優於常用 softmax 分類模型;3)分類+歸一化+角度 margin+排序,如最後兩行所示,效能進一步提升,但是提升幅度不是特別大。

圖28 分類模型及其改進版效能對比

 
2.3.2.6 同款檢索之多工模型

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

圖29 檢索特徵嵌入多種商品屬性

為了適應多屬性標註標註的學習,我們設計如下圖 30 的多工協同學習模型。多工協同學習模型的好處非常明顯,可以更好的利用屬性之間的相關性,有利於網路的優化收斂,以及提升模型的泛化能力,這樣得到的檢索特徵更加有利於商品同款檢索。這裡有個問題,不同任務權重如何設計?當然我們可以手工設定每個任務的權重,但這需要對各個任務理解較為深入加上大

圖30 多工學習網路來利用多屬性標註

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

圖31 基於驗證集趨勢演算法的多工協同學習模型

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

圖32 多工模型相比單任務模型檢索效能對比

 
2.3.2.7 同款檢索之注意力模型

在圖 22 中我們講述了同款檢索的一個巨大的挑戰即為相似款對同款檢索的混淆。為了更好的區分同款和相似款,我們希望更加關注一些顯著的區域,如下圖 33 中手錶的 logo,刻寫的文字,鞋子的 logo,花紋等。常用的注意力模型分為三種[15],有特

圖33 注意力模型

特徵空間注意力,特徵通道注意力,以及 2 種注意力相結合。通過實驗對比可知,增加特徵空間注意力後,模型檢索效能提升,但是增加特徵通道注意力,檢索效能反而下降,如下圖 34 所示。我們認為空間注意力有利於強化模型重視顯著空間區域,而特徵通道注意力可能造成了模型過擬合,效能反而有所下降。

圖34 三種注意力模型檢索效能對比

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

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

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

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

圖36 層級困難感知模型

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

圖37 層級困難感知模型同款減速效能

 
2.3.2.9 同款檢索之互學習模型

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

圖38 互學習模型

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

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

 
2.3.2.10 同款檢索之區域性顯著性擦除

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

圖40 常用CNN模型都會過分關注影象紋理,而忽略形狀

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

圖41 區域性顯著性擦除

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

圖42 區域性顯著性擦除同款檢索效能

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

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

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

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

2.4 掃一掃識物平臺建設

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

2.4.1 資料清理平臺

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

2.4.2 模型訓練平臺

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

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

 
2.4.2.1 caffe

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

1)支援豐富的資料增廣策略;2)支援多型別資料載入;3)支援蒸餾學習/互學習演算法;4)支援困難感知模型演算法;5)支援排序模型演算法;6)支援 batchsize 擴充。

caffe 的優缺點非常明顯,其優點有:1)訓練快,結果穩定;2)基於 prototxt 快速試驗各種多模型/多標籤/多資料來源任意組合。其缺點有:1)新演算法開發慢;2)除錯不靈活;3)視訊記憶體優化不好;4)學術前沿方法更新少。第 4 個缺點是較為致命的,我們無法快速跟進學術前言,因而我們後續決定開發 pytorch 檢索平臺。

圖45 caffe平臺核心架構

 
2.4.2.2 pytorch

我們開發的 pytorch 檢索架構如下圖 46 所示,基本支援 caffe 檢索平臺的所有特點:1)支援豐富的資料增廣策略;2)支援多型別資料載入;3)支援蒸餾學習/互學習演算法;4)支援排序模型演算法;5)支援更多主流網路 EfficientNet;6)支援資料去噪/合併同款/檢索;7)支援混合精度訓練。pytorch 優缺點也非常明顯,其優點:1)自動求導,演算法開發效率高;2)動態圖,Python 程式設計,簡單易用;3)Tensorboard 視覺化方便;4)Github 資源多,緊跟前沿;5)Pytorch1.3 支援移動端部署。當然 pytorch 也不是完美無缺的,相比 caffe 有其缺點:1)在多工自由組合不如 caffeprototxt 方便。

圖46 pytorch同款檢索平臺構建

 

2.4.3 模型部署平臺

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

圖47 模型訓練到部署

 
2.4.3.1 模型部署平臺:tensorRT

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

圖48 tensorRT部署加速

 
2.4.3.2 模型部署平臺:ncnn

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

圖49.手機移動端ncnn部署

 

2.4.4 任務排程系統平臺

任務調動平臺由我們的後臺大神們開發,主要用於各個任務的有效呼叫,考慮到我們的檢索庫是上億的資料庫,需要保證平臺具有較好的容錯、容災,以及魯棒機制。如下圖 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] Adaptively Weighted Multi-task Deep Network for Person A!ribute
Classification, 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