【論文筆記】Learning Fashion Compatibility with Bidirectional LSTMs

牧言慕語發表於2021-04-11

論文:《Learning Fashion Compatibility with Bidirectional LSTMs》

論文地址:https://arxiv.org/abs/1707.05691

程式碼地址:https://github.com/xthan/polyvore

聯絡方式:

Github:https://github.com/ccc013

知乎專欄:機器學習與計算機視覺AI 論文筆記

微信公眾號:AI 演算法筆記

在這裡插入圖片描述

1. 簡介

時尚搭配推薦的需求越來越大,本文是基於兩個方面的時尚推薦:

  1. 給定已有的服飾,推薦一件空缺的衣服,從而形成一套搭配,即在已經有上衣、褲子的情況下推薦一雙鞋子;
  2. 根據多種形式的輸入,比如文字或者一件衣服圖片,生成一套搭配;

目前存在的難點在於:如何對不同時尚類別的單品通過簡單計算視覺相似性來建模和推理其匹配性關係

目前相關的工作,大部分主要集中在對服飾解析、服飾識別和服飾搜尋這三個方向的工作,而對於少量做服飾推薦的工作,也存在這些問題:

  1. 沒有考慮做一套搭配的推薦;
  2. 只能支援上述兩個方向的其中一種,即要不只是推薦一套搭配或者對已有的搭配推薦缺失的一件衣服;
  3. 目前還沒有工作可以支援多種形式的輸入,比如可以輸入關鍵詞,或者輸入圖片,或者圖片+關鍵詞的輸入形式;

對於一套合適的搭配,如下圖所示,本文認為應該滿足這兩個關鍵屬性:

  1. 這套搭配中的任意一件服飾應該是視覺上匹配並且是形似風格的;
  2. 搭配不能存在重複型別的服飾,比如包含兩雙鞋子或者兩條褲子;
【論文筆記】Learning Fashion Compatibility with Bidirectional LSTMs

目前相關在做搭配推薦的工作中,主要嘗試的方法有:

  1. 利用語義屬性,即規定了哪些衣服之間是匹配的,但是這種需要對資料進行標記,代價很大而且沒辦法大量使用;
  2. 利用度量學習來學習一對時尚單品之間的距離,但是這隻能學習兩兩之間的匹配性,而非一套搭配;
  3. 對於 2 的改進是採用投票策略,但是同樣是計算代價非常的大,而且也沒辦法利用好集合中所有單品的一致性;

為了解決上述的問題,本文提出了通過一個端到端的框架來聯合學習視覺語義向量(visual-semantic embedding) 和服飾物品之間的匹配性關係,下圖就是本文的整體框架。

首先是利用 Inception-V3 模型作為特徵提取器,將輸入圖片轉成特徵向量,然後採用一層共 512 個隱藏單元的雙向 LSTM(Bi-LSTM)。之所以採用雙向 LSTM,是因為作者認為可以將一套搭配當做是一個特定順序的序列,搭配中的每件衣服就是一個時間點(time step)。在每個時間點,Bi-LSTM 模型將根據之前的圖片來預測下一張圖片。

另外,本文的方法還通過將圖片特徵對映到一個語義表示來學習一個視覺語義向量,它不僅提供了語義屬性和型別資訊作為訓練 LSTM 的輸入和正則化方法,還可以實現對使用者的多種形式輸入來生成一套搭配。

訓練好模型後,本文通過三個任務來評估模型,如下圖所示,分別是:

  1. Fill in the blank:給定一套缺失某件衣服的搭配,然後給定四個選擇,讓模型選擇最匹配當前搭配的服飾單品;
  2. 搭配生成:根據多種輸入來生成一套搭配,比如文字輸入或者一張服飾圖片;
  3. 匹配性的預測:給定一套搭配,給出其匹配性得分。

2. Polyvore資料集

本文實驗採用的是一個叫做 Polyvore 的資料集。Polyvore 是一個有名的流行時尚網站,使用者可以在網站裡建立和上次搭配資料,這些搭配包含了很豐富的多種形式的資訊,比如圖片和對單品的描述、對該搭配的喜歡數、搭配的一些雜湊標籤。

Polyvore 資料集總共有 21889 套搭配,本文將其劃分成訓練集、驗證集和測試集,分別是 17316、1497 和 3076 套。

這裡參考了論文《 Mining Fashion Outfit Composition Using An End-to-End Deep Learning Approach》,使用一箇中圖分割演算法保證訓練集、驗證集和測試集不存在重複的衣服,另外對於包含太多單件的搭配,為了方便,僅保留前 8 件衣服,因此,資料集總共包含了 164,379個樣本,每個樣本是包含了圖片以及其文字描述。

對於文字描述的清理,這裡刪除了出現次數少於 30 次的單詞,並構建了一個 2757 個單詞的詞典。

另外 Polyvore 資料集的衣服是有一個固定的順序的——一般是tops、bottoms、shoes 以及 accessories,對於 tops 的順序也是固定的,一般是 shirts 或者 t-shirts,然後是外套,而 accessories 的順序一般是手提包、帽子、眼鏡、手錶、項鍊、耳環等;

因此,這種固定順序可以讓 LSTM 模型學習到時間的資訊。

3. 方法

3.1 Fashion Compatibility Learning with Bi-LSTM

第一部分介紹的是基於雙向 LSTM 的服飾匹配性學習。這主要是利用了 LSTM 模型的特性,它們可以學習到兩個時間點之間的關係,同時使用由不同細胞調節的記憶單元,有助於利用長期的時間依賴性

基於這個特性,本文將一套搭配看作一個序列,搭配中的每個圖片就是一個獨立的時間點,然後利用 LSTM 來對搭配的視覺搭配關係進行建模。

給定一套搭配,$F={x_1, x_2, \cdots, x_N}$,其中 $x_t$ 是搭配中第 t 個衣服經過 CNN 後,提取到的特徵。在每個時間點,先採用前向的 LSTM 對給定的圖片預測其下一張圖片,這種做法學習兩個時間點的關係相當於在學習兩件衣服之間的匹配關係。

這裡使用的 loss 函式如下所示:

其中 $\theta_f $表示前向預測模型中的模型引數,而 $P_r(\cdot)$ 是 LSTM 模型計算的,表示基於之前的輸入來預測得到 $x_{t+1}$ 的概率。

更詳細點說,LSTM 將輸入對映到輸出也是通過以下一系列的隱藏狀態,計算公式如下:

其中 $x_t, h_t$ 分別表示輸入和輸出向量,其他的 $i_t, f_t, c_t, o_t$ 分別表示輸入門、遺忘門、記憶單元和輸出門的啟用向量。

參考論文《 Recurrent neural network based language model》中使用 softmax 輸出來預測一個句子中下一個單詞,本文也是在 $h_t$ 之後增加了一個 softmax 層來計算下一件衣服出現的概率:

其中$X$ 表示的是當前 batch 的所有圖片,這種做法可以讓模型在看到多種樣本後學習到具有區分度的風格和匹配性資訊,另外,實際上可以讓 $X$ 表示整個資料集,但是本文沒有考慮這種做法的原因是資料集的數量太多以及圖片特徵的維度太大。只是限制在一個 batch 內可以提高訓練的速度。

除了可以正向預測衣服,實際上也可以反向預測衣服,比如對於一條褲子,其下一件衣服可以是上衣或者是鞋子,所以可以有一個反向 LSTM :

這裡的 $P_r(\cdot)$ 計算方式如下:

注意,這裡在 F 中會新增兩個零向量 $x_0, x_{N+1}$ ,作用是讓雙向 LSTM 知道何時停止預測下一件衣服。

一般來說,一套搭配通常都是同種風格衣服的集合,即有相似的風格,比如顏色或者紋理,而本文的做法,將搭配當做一種固定順序的序列來學習,即可以學到搭配的匹配性,也能學習到搭配的整體風格(主要是通過記憶單元來學習)。

3.2 Visual-semantic Embedding

第二部分是視覺-語義向量的學習。

通常對於服飾推薦,都會有多種形式的輸入,比如圖片或者文字描述型別,所以很有必要學習一個文字和圖片的多模態向量空間。

本文沒有選擇比較耗時耗力的人工標註圖片的標籤屬性方式,而是採用弱標註的網路資料(weakly-labeled web data),即資料集自帶的每張圖片的文字描述資訊。根據這個資訊,本文根據論文《Unifying visual semantic embeddings with multimodal neural language models》裡常用的對圖片-文字對構建模型的方法,將圖片和其文字描述對映到一個聯合空間,訓練得到一個視覺-語義向量。

這裡給出一些定義,令 $S={w_1,w_2,\cdots, w_M}$ 表示文字描述,其中 $w_i$ 表示單詞,然後將其用一個 one-hot 向量 $e_i$ 進行表示,然後對映到向量空間 $v_i = W_T \cdot e_i$,其中 $W_T$ 表示詞向量矩陣,所以最終這個文字描述的表示就是
$$
v=\frac{1}{M}\sum_i v_i
$$
而圖片向量表示為:
$$
f=W_I\cdot x
$$
在視覺-語言向量空間,本文會採用餘弦相似性來評估圖片和其文字描述的相似性:
$$
d(f,v) = f\cdot v
$$
其中 f 和 v 都會進行歸一化,因此對於視覺-語義向量學習會用一個對比損失(contrastive loss) 進行優化:
$$
E_e(\theta_e)=\sum_f \sum_k max(0, m-d(f,v)+d(f,v_k)) + \sum_v\sum_k max(0, m-d(v,f)+d(v,f_k))
$$
其中 $\theta_e={W_I, W_T}$ 表示模型引數,$v_k$ 表示和 f 不匹配的文字描述,而$f_k$ 表示和 v 不匹配的圖片。所以最小化上述 loss 來達到讓圖片向量 f 和其文字描述 v 的距離,比 f 到不匹配的文字描述 $v_k$ 的距離要更近一個間隔 m ,對 v 也是相同的實現效果。在訓練過程中,同個 batch 中這種不匹配的樣本例子是用於優化上述 loss,這種做法使得具有相似語義屬性和風格的服飾在學習到的向量空間中距離更近。

3.3 Joint Modeling

這裡是將上述兩種操作都聯合起來,即同時學習搭配的匹配性和視覺-語義向量,因此整體的目標函式如下所示:

其中前兩個就是雙向 LSTM 的目標函式,第三個則是計算視覺語義向量 loss。整個模型的訓練可以通過 Back-Propagation through time(BPTT) 來實現。對比標準的雙向 LSTM,唯一的區別就是 CNN 模型的梯度是兩個來源的平均值(即 LSTM 部分和視覺語義向量學習),這讓 CNN 同時也可以學習到有用的語義資訊。

4. 實驗

4.1 實現細節

  • 雙向 LSTM:採用 InceptionV3 模型,輸出 2048 維的 CNN 特徵,然後經過一個全連線層,輸出 512 維的特徵,然後輸入到 LSTM,LSTM 的隱藏單元數量是 512,設定 dropout 概率是 0.7;
  • 視覺-語義向量:聯合向量空間的維度是 512 維,所以 $W_I$ 的維度是 $2048\times 512$ ,$W_T$ 的維度是 $2757\times 512$ ,2757 是字典的數量,然後令間隔 m=0.2
  • 聯合訓練:初始學習率是 0.2,然後衰減因子是 2,並且每 2 個 epoch 更新一次學習率;batch 大小是 10,即每個 batch 包含 10 套搭配序列,大概 65 張圖片以及相應的文字描述,然後會微調網路的所有層,當驗證集 loss 比較穩定的時候會停止訓練。

4.2 幾種不同實驗的結果

對於 fill in the blank,實驗結果如下:

一些好的例子和不好的例子:

【論文筆記】Learning Fashion Compatibility with Bidirectional LSTMs

對於搭配匹配性預測,一些預測的例子如下所示:

【論文筆記】Learning Fashion Compatibility with Bidirectional LSTMs

對於搭配生成,第一種實現是輸入的只是衣服圖片,如下所示:

  • 給定單張圖片,那麼就如 a 圖所示,同時執行兩個方向的 LSTM,得到一套完整的搭配;
  • 如果是給定多張圖片,如 c 圖所示,兩張圖片,那麼會先進行一個類似 fill in the blank 的操作,先預測得到兩張圖片之間的衣服,然後如 d 所示,再進行預測其他位置的衣服,得到完整的搭配;

如果是輸入衣服和文字描述,如下所示:

這種輸入的實現,首先會基於給定的衣服圖片生成一套初始的搭配,然後對於給定的輸入文字描述 $v_q$ ,在初始搭配中的非查詢衣服 $f_i$ 會進行更新,更新方式為 $argmin_f d(f, f_i+v_q)$ ,所以更新後的衣服圖片將不僅和原始衣服相似,還會在視覺語義向量空間裡和輸入的查詢文字距離很接近。

或者是隻輸入文字描述,如下所示:

  • 第一種場景,即前兩行的圖片例子,輸入的文字描述是衣服的一種屬性或者風格,首先最接近文字描述的衣服圖片會被當做是查詢圖片,然後Bi-LSTM 將通過這張圖片來生成一套搭配,接著是會基於給定的圖片和文字輸入更新搭配;
  • 第二種場景,即後面兩行圖片例子,給定的文字描述是指向某種衣服類別,所以會根據文字描述檢索相應的衣服圖片,然後作為查詢圖片來生成搭配。

相關文章