棒球比分直播球探:Jack Jiang

我的最新工程MobileIMSDK://git.oschina.net/jackjiang/MobileIMSDK
posts - 167, comments - 13, trackbacks - 0, articles - 0

棒球比分大小怎么算 www.355548.live 本文由騰訊WXG應用研究員breezecheng原創發表于公眾號“騰訊技術工程”,原題“微信「掃一掃識物」 的背后技術揭秘”。

一、引言

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

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

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

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

(本文同步發布于://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. 訓練數據構建(視覺??椋?/p>

在線檢索數據庫構建 在線檢索數據庫的覆蓋范圍至關重要,決定了能否支持用戶的任意商品搜索請求。我們采用定向導入、長尾加爬、訪問重放、主動發現四種策略不斷擴展我們的商家圖規模,目前已覆蓋 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 但是同一款式的商品進行合并,從而得到實際有效的款式類目。我們采用分類混淆矩陣來完整自動同款合并?;諍喜⑶暗氖菸頤強梢匝盜煩跏擠擲嗄P?,并計算任意兩個 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 所示?;パ俺嗽黽幽P脫盜肥奔?,對模型上線不增加任何負擔,但是精度能夠較為顯著的增加。

▲ 圖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.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平臺核心架構

8.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 有其缺點:

在多任務自由組合不如 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] 公司內部文檔

附錄:更多相關文章

[1] QQ、微信團隊原創技術文章匯總:

微信朋友圈千億訪問量背后的技術挑戰和實踐總結

騰訊技術分享:騰訊是如何大幅降低帶寬和網絡流量的(圖片壓縮篇)

騰訊技術分享:騰訊是如何大幅降低帶寬和網絡流量的(音視頻技術篇)

微信團隊分享:微信移動端的全文檢索多音字問題解決方案

騰訊技術分享:Android版手機QQ的緩存監控與優化實踐

微信團隊分享:iOS版微信的高性能通用key-value組件技術實踐

微信團隊分享:iOS版微信是如何防止特殊字符導致的炸群、APP崩潰的?

騰訊技術分享:Android手Q的線程死鎖監控系統技術實踐

微信團隊原創分享:iOS版微信的內存監控系統技術實踐

讓互聯網更快:新一代QUIC協議在騰訊的技術實踐分享

iOS后臺喚醒實戰:微信收款到賬語音提醒技術總結

騰訊技術分享:社交網絡圖片的帶寬壓縮技術演進之路

微信團隊分享:視頻圖像的超分辨率技術原理和應用場景

微信團隊分享:微信每日億次實時音視頻聊天背后的技術解密

QQ音樂團隊分享:Android中的圖片壓縮技術詳解(上篇)

QQ音樂團隊分享:Android中的圖片壓縮技術詳解(下篇)

騰訊團隊分享:手機QQ中的人臉識別酷炫動畫效果實現詳解

騰訊團隊分享 :一次手Q聊天界面中圖片顯示bug的追蹤過程分享

微信團隊分享:微信Android版小視頻編碼填過的那些坑》 

微信手機端的本地數據全文檢索優化之路》 

企業微信客戶端中組織架構數據的同步更新方案優化實戰

微信團隊披露:微信界面卡死超級bug“15。。。。”的來龍去脈

QQ 18年:解密8億月活的QQ后臺服務接口隔離技術

月活8.89億的超級IM微信是如何進行Android端兼容測試的

以手機QQ為例探討移動端IM中的“輕應用”

一篇文章get微信開源移動端數據庫組件WCDB的一切!

微信客戶端團隊負責人技術訪談:如何著手客戶端性能監控和優化

微信后臺基于時間序的海量數據冷熱分級架構設計實踐

微信團隊原創分享:Android版微信的臃腫之困與??榛導?/a>》

微信后臺團隊:微信后臺異步消息隊列的優化升級實踐分享

微信團隊原創分享:微信客戶端SQLite數據庫損壞修復實踐》 

騰訊原創分享(一):如何大幅提升移動網絡下手機QQ的圖片傳輸速度和成功率》 

騰訊原創分享(二):如何大幅壓縮移動網絡下APP的流量消耗(下篇)》 

騰訊原創分享(三):如何大幅壓縮移動網絡下APP的流量消耗(上篇)》 

微信Mars:微信內部正在使用的網絡層封裝庫,即將開源》 

如約而至:微信自用的移動端IM網絡層跨平臺組件庫Mars已正式開源》 

開源libco庫:單機千萬連接、支撐微信8億用戶的后臺框架基石 [源碼下載]》 

微信新一代通信安全解決方案:基于TLS1.3的MMTLS詳解》 

微信團隊原創分享:Android版微信后臺?;釷嫡椒窒?進程?;釔?》 

微信團隊原創分享:Android版微信后臺?;釷嫡椒窒?網絡?;釔?》 

Android版微信從300KB到30MB的技術演進(PPT講稿) [附件下載]》 

微信團隊原創分享:Android版微信從300KB到30MB的技術演進》 

微信技術總監談架構:微信之道——大道至簡(演講全文)

微信技術總監談架構:微信之道——大道至簡(PPT講稿) [附件下載]》 

如何解讀《微信技術總監談架構:微信之道——大道至簡》

微信海量用戶背后的后臺系統存儲架構(視頻+PPT) [附件下載]

微信異步化改造實踐:8億月活、單機千萬連接背后的后臺解決方案》 

微信朋友圈海量技術之道PPT [附件下載]》 

微信對網絡影響的技術試驗及分析(論文全文)》 

一份微信后臺技術架構的總結性筆記》 

架構之道:3個程序員成就微信朋友圈日均10億發布量[有視頻]》 

快速裂變:見證微信強大后臺架構從0到1的演進歷程(一)

快速裂變:見證微信強大后臺架構從0到1的演進歷程(二)》 

微信團隊原創分享:Android內存泄漏監控和優化技巧總結》 

全面總結iOS版微信升級iOS9遇到的各種“坑”》 

微信團隊原創資源混淆工具:讓你的APK立減1M》 

微信團隊原創Android資源混淆工具:AndResGuard [有源碼]》 

Android版微信安裝包“減肥”實戰記錄》 

iOS版微信安裝包“減肥”實戰記錄》 

移動端IM實踐:iOS版微信界面卡頓監測方案》 

微信“紅包照片”背后的技術難題》 

移動端IM實踐:iOS版微信小視頻功能技術方案實錄》 

移動端IM實踐:Android版微信如何大幅提升交互性能(一)

移動端IM實踐:Android版微信如何大幅提升交互性能(二)

移動端IM實踐:實現Android版微信的智能心跳機制》 

移動端IM實踐:WhatsApp、Line、微信的心跳策略分析》 

移動端IM實踐:谷歌消息推送服務(GCM)研究(來自微信)

移動端IM實踐:iOS版微信的多設備字體適配方案探討》 

信鴿團隊原創:一起走過 iOS10 上消息推送(APNS)的坑

騰訊信鴿技術分享:百億級實時消息推送的實戰經驗

IPv6技術詳解:基本概念、應用現狀、技術實踐(上篇)

IPv6技術詳解:基本概念、應用現狀、技術實踐(下篇)

騰訊TEG團隊原創:基于MySQL的分布式數據庫TDSQL十年鍛造經驗分享

微信多媒體團隊訪談:音視頻開發的學習、微信的音視頻技術和挑戰等

了解iOS消息推送一文就夠:史上最全iOS Push技術詳解

騰訊技術分享:微信小程序音視頻技術背后的故事

騰訊資深架構師干貨總結:一文讀懂大型分布式系統設計的方方面面

微信多媒體團隊梁俊斌訪談:聊一聊我所了解的音視頻技術

騰訊音視頻實驗室:使用AI黑科技實現超低碼率的高清實時視頻聊天

騰訊技術分享:微信小程序音視頻與WebRTC互通的技術思路和實踐

手把手教你讀取Android版微信和手Q的聊天記錄(僅作技術研究學習)

微信技術分享:微信的海量IM聊天消息序列號生成實踐(算法原理篇)

微信技術分享:微信的海量IM聊天消息序列號生成實踐(容災方案篇)

騰訊技術分享:GIF動圖技術詳解及手機QQ動態表情壓縮技術實踐

微信團隊分享:Kotlin漸被認可,Android版微信的技術嘗鮮之旅

社交軟件紅包技術解密(一):全面解密QQ紅包技術方案——架構、技術實現等

社交軟件紅包技術解密(二):解密微信搖一搖紅包從0到1的技術演進

社交軟件紅包技術解密(三):微信搖一搖紅包雨背后的技術細節

社交軟件紅包技術解密(四):微信紅包系統是如何應對高并發的

社交軟件紅包技術解密(五):微信紅包系統是如何實現高可用性的

社交軟件紅包技術解密(六):微信紅包系統的存儲層架構演進實踐

社交軟件紅包技術解密(九):談談手Q紅包的功能邏輯、容災、運維、架構等

QQ設計團隊分享:新版 QQ 8.0 語音消息改版背后的功能設計思路

微信團隊分享:極致優化,iOS版微信編譯速度3倍提升的實踐總結

IM“掃一掃”功能很好做?看看微信“掃一掃識物”的完整技術實現

>> 更多同類文章 ……

[2] 更多IM開發熱門技術方面的文章匯總:

新手入門一篇就夠:從零開發移動端IM

移動端IM開發者必讀(一):通俗易懂,理解移動網絡的“弱”和“慢”

移動端IM開發者必讀(二):史上最全移動弱網絡優化方法總結

從客戶端的角度來談談移動端IM的消息可靠性和送達機制

現代移動端網絡短連接的優化手段總結:請求速度、弱網適應、安全保障

騰訊技術分享:社交網絡圖片的帶寬壓縮技術演進之路

小白必讀:閑話HTTP短連接中的Session和Token

IM開發基礎知識補課:正確理解前置HTTP SSO單點登陸接口的原理

移動端IM中大規模群消息的推送如何保證效率、實時性?

移動端IM開發需要面對的技術問題

開發IM是自己設計協議用字節流好還是字符流好?

請問有人知道語音留言聊天的主流實現方式嗎?

IM消息送達保證機制實現(一):保證在線實時消息的可靠投遞

IM消息送達保證機制實現(二):保證離線消息的可靠投遞

如何保證IM實時消息的“時序性”與“一致性”?

一個低成本確保IM消息時序的方法探討

IM單聊和群聊中的在線狀態同步應該用“推”還是“拉”?

IM群聊消息如此復雜,如何保證不丟不重?

談談移動端 IM 開發中登錄請求的優化

移動端IM登錄時拉取數據如何作到省流量?

淺談移動端IM的多點登陸和消息漫游原理

完全自已開發的IM該如何設計“失敗重試”機制?

通俗易懂:基于集群的移動端IM接入層負載均衡方案分享

微信對網絡影響的技術試驗及分析(論文全文)

即時通訊系統的原理、技術和應用(技術論文)

開源IM工程“蘑菇街TeamTalk”的現狀:一場有始無終的開源秀

QQ音樂團隊分享:Android中的圖片壓縮技術詳解(上篇)

QQ音樂團隊分享:Android中的圖片壓縮技術詳解(下篇)

騰訊原創分享(一):如何大幅提升移動網絡下手機QQ的圖片傳輸速度和成功率

騰訊原創分享(二):如何大幅壓縮移動網絡下APP的流量消耗(上篇)

騰訊原創分享(三):如何大幅壓縮移動網絡下APP的流量消耗(下篇)

如約而至:微信自用的移動端IM網絡層跨平臺組件庫Mars已正式開源

基于社交網絡的Yelp是如何實現海量用戶圖片的無損壓縮的?

騰訊技術分享:騰訊是如何大幅降低帶寬和網絡流量的(圖片壓縮篇)

騰訊技術分享:騰訊是如何大幅降低帶寬和網絡流量的(音視頻技術篇)

字符編碼那點事:快速理解ASCII、Unicode、GBK和UTF-8

全面掌握移動端主流圖片格式的特點、性能、調優等

子彈短信光鮮的背后:網易云信首席架構師分享億級IM平臺的技術實踐

IM開發基礎知識補課(五):通俗易懂,正確理解并用好MQ消息隊列

微信技術分享:微信的海量IM聊天消息序列號生成實踐(算法原理篇)

自已開發IM有那么難嗎?手把手教你自擼一個Andriod版簡易IM (有源碼)

融云技術分享:解密融云IM產品的聊天消息ID生成策略

IM開發基礎知識補課(六):數據庫用NoSQL還是SQL?讀這篇就夠了!

適合新手:從零開發一個IM服務端(基于Netty,有完整源碼)

拿起鍵盤就是干:跟我一起徒手開發一套分布式IM系統

IM里“附近的人”功能實現原理是什么?如何高效率地實現它?

IM開發基礎知識補課(七):主流移動端賬號登錄方式的原理及設計思路

IM開發基礎知識補課(八):史上最通俗,徹底搞懂字符亂碼問題的本質

IM“掃一掃”功能很好做?看看微信“掃一掃識物”的完整技術實現

>> 更多同類文章 ……

(本文同步發布于://www.52im.net/thread-2887-1-1.html


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    Jack Jiang的 Mail: [email protected], 聯系QQ: 413980957, 微信: hellojackjiang
    {ganrao}