李飛飛CS231n專案:這兩位工程師想用神經網路幫你還原買家秀

大資料文摘發表於2018-08-02

你有沒有看過某個網紅小姐姐穿了一件特別棒的衣服,然後急切地想找到同款?

你不是一個人——全球零售商都們都想用這個策略獲利。

每當某個明星或者時尚博主在微博或者朋友圈po出一張圖,這就是一次低成本的營銷機會。隨著網購與照片分享變得越來越流行,利用使用者原創內容(UGC, User Generated Content)的市場營銷策略已成為驅動流量與零售額增長的關鍵。通俗點說,一張漂亮的“買家秀”可能抵得過一票銷售辛苦的遊說。

相比於專業內容,“買家秀”的價值在於,以影象與視訊為例,效果更加具有真實性。

然而,這也存在一定風險,因為很難控制內容質量及其產生的效果。

比如說:

李飛飛CS231n專案:這兩位工程師想用神經網路幫你還原買家秀

來自微軟的軟體工程師Erika Menezes與Twitter軟體工程師Chaitanya Kanitkar用AI工具建立一個深度學習模型,希望將買家衣物影象與網店中相同或相似的物品相匹配。

本專案為史丹佛大學2018年春季 CS231n課程作業的一部分。

連結:

http://cs231n.stanford.edu/

感興趣的同學也可以檢視大資料文摘在網易雲專欄上的漢化版課程

網址:

http://study.163.com/course/courseMain.htm?courseId=1003223001&share=2&shareId=10146755

這個“買家秀”還原問題被通稱為買家到商家(consumer-to-shop)或街道到商店(street-to-shop)衣物檢索問題。

李飛飛CS231n專案:這兩位工程師想用神經網路幫你還原買家秀

本文將具體展示如何使用微軟的機器學習平臺Azure機器學習(AML)與Azure資料科學虛擬機器(DSVM)快速推動該專案的開發。

李飛飛CS231n專案:這兩位工程師想用神經網路幫你還原買家秀

圖1.建立,訓練與配置跨領域視覺搜尋模型的微軟AI平臺架構圖

定義問題

在買家到商家衣物檢索問題中,我們試圖將使用者拍的圖片(即一種UGC)與同一件衣物但是由專業攝影師按既定要求拍攝的圖片相匹配。使用者的圖片一般都是手機拍攝,質量比店家的專業商品展列圖片差很多。

具體來說,對於每一張新輸入的UGC圖片,我們希望返回k個與該圖片最為相似的商品圖片,並從中得到一件最匹配的商品。我們將需要定義一個距離度量函式,來量化被搜尋圖片與所有商品品類圖片之間的相似度,並且根據其值排序得到k個最相似圖片。

資料

本文資料採用Deep Fashion資料集的一部分。該資料集包括UGC圖片及多種衣物類別的商品品類圖片。我們使用四個最主要的衣物類別來進行實驗:連衣裙,半裙,上衣與下衣。詳見下圖。

Deep Fashion資料集:

http://mmlab.ie.cuhk.edu.hk/projects/DeepFashion.html

李飛飛CS231n專案:這兩位工程師想用神經網路幫你還原買家秀

圖2.各類衣物圖片資料量

Deep Fashion資料集

http://mmlab.ie.cuhk.edu.hk/projects/DeepFashion.html

圖3與圖4分別為買家與店家圖片示例。這些例子展示了本任務的複雜性:匹配衣物的樣式,但顏色不需要一致。

李飛飛CS231n專案:這兩位工程師想用神經網路幫你還原買家秀

圖3.(從左至右)圖片1與2為買家衣服秀,圖片3與4為同款店家衣服秀

從圖3很容易看出,店家圖片的質量較高,整件衣物都位於圖片中央。買家資料集的挑戰在於,每張圖片都只對應唯一一個正確商品編碼,所以有的與之非常相似但並不是同一商品的衣物就會導致模型精確度降低(請看圖4)。為緩解此問題,我們使用Top-K準測來評估模型效能[QZ1](該方法也被用於衡量衣物相似度)。

李飛飛CS231n專案:這兩位工程師想用神經網路幫你還原買家秀

圖4.左一為買家衣服圖。左二與左三為同一件商品的店家圖。左四與左五為另一件非常相似但卻是不同商品的店家圖。

t分佈隨機鄰嵌入(t-Distributed Stochastic Neighbor Embedding, or t-SNE)是一種將高維資料對映到二維空間的常用視覺化方法。我們使用t-SNE將預訓練ImageNet模型從買家圖片中提取出的特徵進行視覺化,結果如圖5所示。褲子的圖聚類於左下部,而半裙則聚類於右上部。左半邊的圖片多為包括腿部的買家圖片,而右半邊的則是放在平面上拍攝的衣物圖片。

李飛飛CS231n專案:這兩位工程師想用神經網路幫你還原買家秀

圖5.t-SNE處理後的買家圖片ResNet50分類特徵結果

方法

我們嘗試了三種方法:

  • 白盒特徵

  • 預訓練CNN特徵

  • 使用預訓練CNN特徵的孿生網路

下面詳細介紹每一種方法。

1.白盒特徵(White-Box Features)

我們第一個嘗試的白盒特徵圖片提取器曾在計算機視覺上被廣泛應用。特徵先被提取,然後它們被連線起來以為每一張圖片構造一種多特徵的表述。我們在此提取了以下特徵:

  • 方向梯度直方圖(Histogram of Oriented Gradients),計算影象的每一細分割槽塊內各梯度方向的發生次數。

  • 色彩直方圖(Color Histograms),將影象中所有顏色劃分為25個顏色區間並製作直方圖以檢視其分佈。

  • 色彩一致性(Color Coherence),衡量每一畫素的色彩與其所屬大區塊顏色的相似度。顏色是衣物非常重要的一個屬性,因此本特徵提取器是用於補充色彩直方圖資訊的。

  • 哈里斯邊角偵測(Harris Corner Detection),提取影象中代表邊角的特徵點。

我們使用白盒特徵計算了每一張買家圖片的K近鄰,並嘗試了若干種標準距離度量函式(L1,L2,餘弦函式)。結果如下圖所示:

李飛飛CS231n專案:這兩位工程師想用神經網路幫你還原買家秀

圖6. 各類衣物白盒特徵在不同距離函式下的表現

2.預訓練CNN特徵

在本方法中,我們使用預訓練CNN模型對ImageNet上的1000個物體類別影象進行分類訓練。

我們使用神經網路每層的啟用函式作為特徵表示。[w2] 我們在買家影象與店家影象上使用VGG-16,VGG-19,Inception v3和ResNet50進行訓練,並且使用了L1作為度量函式。下圖展示了上述模型的層數與引數數量。

李飛飛CS231n專案:這兩位工程師想用神經網路幫你還原買家秀預訓練神經網路結構

圖7展示了模型結果。總體來說提取特徵表現有了很大的提高,ResNet50提取的特徵在所有類別上都具有最好的整體表現。半裙類別達到了最好的結果,使用Top-20準確率達到了17.75%。

李飛飛CS231n專案:這兩位工程師想用神經網路幫你還原買家秀

圖7.各大類預訓練CNN特徵表現

在之前的方法中,我們分兩步來計算距離函式。首先,我們使用低等級影象表徵或預訓練過的卷積神經網路最後一層隱藏層中提取出的特徵,從影象中提取表徵向量。然後將該向量代入標準化向量距離函式(如L1,L2與餘弦函式)進行計算。然而在本方法中,我們使用提取出的買家與店家影象特徵對來學習得到距離函式。這裡我們使用孿生神經網路

3.孿生網路

孿生網路包含兩個或多個完全相同的子網路。這些子網路基本上擁有一致的結構與權重。輸入值被分別傳入這些網路,最後輸出時再合成一個單獨的輸出值。該輸出值衡量輸入值之間的距離。該網路使用這些輸出值進行訓練,最小化相似輸入值之間的距離,以及最大化不同輸入值的距離。詳見圖8。

李飛飛CS231n專案:這兩位工程師想用神經網路幫你還原買家秀

圖8.模型結構

我們使用對數交叉熵損失函式,其表示式如下:

李飛飛CS231n專案:這兩位工程師想用神經網路幫你還原買家秀

這裡的X1與X2分別為買家與店家影象特徵,t則為目標值——相似特徵對則為1,不相似特徵對則為0。使用孿生網路以及預訓練ResNet50提取特徵,結果在幾乎所有類別上都有總體表現上的提升(除了連衣裙大類)。最佳表現來自於半裙類別,Top-20精確度為26%。

李飛飛CS231n專案:這兩位工程師想用神經網路幫你還原買家秀

圖9.三種方法在各類衣物圖片的表現對比 1) 白盒特徵 2) 預訓練ResNet50特徵 3) 使用孿生網路相似度的ResNet50特徵

下圖是模型能夠正確匹配衣物的例子(見圖10),其中排名前20的另外那些返回值也都直觀上非常相似,他們基本都是同一件商品或相似商品不同顏色或不同材質。

李飛飛CS231n專案:這兩位工程師想用神經網路幫你還原買家秀

圖10. 前20位正確與錯誤匹配圖(錯誤匹配中僅顯示兩張圖)

應用資料科學虛擬機器與Visual Studio AI整合開發工具

本部分中我們將展示如何使用資料科學虛擬機器以及Visual Studio AI整合開發工具來開發深度學習模型。此外,我們還將解釋如何使用Azure機器學習以通過類似API的方式操作模型。

資料科學虛擬機器

資料科學虛擬機器(DSVM)為Azure虛擬機器映象。它被預先安裝、配置並測試。所用工具在資料分析、機器學習及人工智慧訓練中非常流行,如GPU 驅動以及深度學習框架(比如TensorFlow)。它幫助你在配置上節約大量時間,提高工作效率。

資料科學虛擬機器:

https://azure.microsoft.com/en-us/services/virtual-machines/data-science-virtual-machines/

Visual Studio AI整合開發工具

Visual Studio AI整合開發工具是一個用來建立,測試並部署深度學習/人工智慧應用的擴充功能。它與Azure機器學習無縫整合,並提供強大的實驗魯棒性——包括但不限於,向不同計算目標完全透明地提交資料準備與模型訓練任務。此外,它還提供自定義衡量指標與歷史記錄追蹤;實現了資料科學的可複用能力與審查能力。

Azure機器學習

Azure機器學習服務為資料科學家與機器學習開發者們提供了處理資料、開展實驗、建立、管理並部署機器學習與人工智慧模型等的一系列工具。它們允許使用任何Python工具與庫。你可以在Azure上使用各種資料與計算服務來儲存並使用資料。

訓練

我們使用Azure機器學習命令列介面(Command Line Interface,CLI)和VS Code來將我們的資料科學虛擬機器建立為一個遠端計算目標,“my_dsvm”,並藉此提交訓練指令來執行實驗。

李飛飛CS231n專案:這兩位工程師想用神經網路幫你還原買家秀圖11.Azure機器學習CLI配置VS Code編輯器介面

部署

我們將模型與程式碼部署成網頁服務的形式,從而可通過REST方式訪問。為此,我們使用AML操作模型,結合Visual Studio AI整合程式碼工具以及Azure機器學習來進行部署,如下所示:

az ml service create realtime -f score.py –model-file model.pkl -s service_schema.json -n outfit_finder_api -r python –collect-model-data true -c aml_config\conda_dependencies.yml

這將使得任何使用REST API的使用者都可以使用模型。

詳細的部署指導:

https://blogs.technet.microsoft.com/machinelearning/2018/06/05/deep-learning-for-emojis-with-vs-code-tools-for-ai-part-2/

總結

本文中我們討論瞭如何建立一個深度學習模型來對買家服裝影象與網店相同或相似商品影象相匹配。我們展示瞭如何使用Azure的資料科學虛擬機器與Visual Studio AI整合程式碼工具來快速開始建立、訓練與部署模型。我們還展示瞭如何使用Azure機器學習來輕鬆操作模型。

程式碼連結:

https://github.com/ckanitkar/CS231nFinalProject。

編者注:Top-K Accuracy即,在返回的前K個結果中,只要出現了正確的預測結果,則該資料點被記為“正確預測”。

相關報導:

https://blogs.technet.microsoft.com/machinelearning/2018/07/10/how-to-use-siamese-network-and-pre-trained-cnns-for-fashion-similarity-matching/

相關文章