【Dual-Path Convolutional Image-Text Embedding】--- image-text embedding閱讀筆記

論文名稱:Dual-Path Convolutional Image-Text Embedding
論文作者:Zhedong Zheng, Liang Zheng, Michael Garrett, Yi Yang, Yi-Dong Shen
發行時間:Submitted on 15 Nov 2017, last revised 17 Jul 2018
論文地址:https://arxiv.org/abs/1711.05535
代碼開源:https://github.com/layumi/Image-Text-Embedding


一. 模型

1. 網絡結構

將每張訓練集中的1張圖片及其對應的5個caption一共6個樣本(在MSCOCO中平均每個image都有5個captions)視爲一類傳入模型中,使用兩個網絡(deep image CNN(top) 和 deep text CNN(bottom)來對image和text進行學習,如下圖,這兩種都使用ResNet-50 model的結構,但是在basic blocks上有不同的參數:
Network

a. Deep Image CNN

將輸入的image記作II, 輸入的size爲224×224224\times224, 通過前向傳播後,可得到一個爲7×7×20487\times7\times2048的feature vector(見上圖),記爲fimgf_{img}, 用Fimg()F_{img}(\cdot)表示這一前向傳播, 顯然這是一個非線性函數
fimg=Fimg(I)f_{img}=F_{img}(I)

b. Deep Text CNN

將輸入的語句記爲TT, 其size爲n×dn \times d(n是句子的長度,d是字典的大小).

在數據集 Flickr32k 中,字典d=20074d=20074,即有20074個字。每個word在Flock32k數據集中都有一個索引l[1,d)l\in[1,d),則輸入TT可形式化表示成:
T(i,j)={1,if j=li0,otherwise,i[1,n],j[1,d]T(i,j)=\left\{\cdot \begin{matrix} 1, & {\rm if}~j=l_i \\ 0, & {\rm otherwise} & \end{matrix}\right.,i\in[1,n],j\in[1,d]

這裏作者設置n=32n=32,因爲大多數語句比這個短,比這個短的則則00進行填充, 則TT的size爲32×d32\times d, 爲了類似同image有長寬一樣,將其reshape到1×32×d1\times32\times d作爲輸入.

Position shift: 爲了使模型更加魯棒性,讓比32短的句子在句首和句尾隨機填充一定個數的0來使其達到長度爲32。實驗證明,這種方法表現的更加好。

對於其第一個卷積層1×1×d×3001\times 1 \times d \times 300,實驗發現使用 word2vecword2vec 中的d×300d \times 300-dim 的矩陣來初始化這一層比隨機初始化的效果更好.

其他的大致類似於Word CNN,只是每個basic block的一些參數不一樣。

設得到的text vector爲ftextf_{text}, 這一前向傳播的過程記爲FtextF_{text}, 它同樣也是非線性函數。則有:
ftext=Ftext(T)f_{text}=F_{text}(T)

2. 目標函數

a. Ranking Loss

Ranking loss 廣泛應用於檢索問題

使用餘弦距離 D(xi,xj)=fxifxi2×fxjfxj2D(x_i,x_j)=\frac{f_{x_i}}{\left \| f_{x_i} \right \|_2} \times \frac{f_{x_j}}{\left \| f_{x_j} \right \|_2} 來衡量兩個樣本之間的相似性,其中:

  • ff表示樣本的feature
  • 2\left \| \cdot \right \|_2表示的是採用L2範式進行計算

設visual輸入爲 II, text輸入爲 TT, 給定一個二次輸入(Ia,Ta,In,Tn)(I_a, T_a, I_n, T_n), 其中,

  • Ia,TaI_a, T_a 表示由正樣本得到的一個image/text組
  • In,TnI_n, T_n 表示由負樣本得到的一個image/text組

ranking loss的計算表達式:
Lrank=max[0,α(D(Ia,Ta)D(Ia,Tn))]                +max[0,α(D(Ta,Ia)D(Ta,In))]L_{rank}=\max[0,\alpha-(D(I_a,T_a)-D(I_a,T_n))] \\ ~~~~~~~~~~~~~~~~ +\max[0,\alpha-(D(T_a,I_a)-D(T_a,I_n))] 其中, α\alpha 是 margin, 本文中記爲 11.

Ranking loss顯式地建立了image和text之間的聯繫

存在問題: 雖然ranking loss很好地將image和text聯合起來了,但是由於ranking loss要求的是image和text同時進行收斂,而通常這倆由於用到的參數不同,所以很難同時收斂,因此很可能只能收斂到局部最小值

b. Instance Loss

類似一個整合了的loss,將image、text和rank這三個損失通過某種方式整合後得到Instance Loss

  • 對於LrankL_{rank}, 正是上述由Ranking Loss得到的
  • 對於LvisualL_{visual}, 則是由下式得到: Pvisual=softmax(Wsharefimg)Lvisual=log(Pvisual(c))P_{visual}=softmax(W_{share}f_{img}) \\ L_{visual}=-\log(P_{visual}(c))
  • 對於LtextualL_{textual}, 則是由下式得到: Ptextual=softmax(Wshareftext)Ltextual=log(Ptextual(c))P_{textual}=softmax(W_{share}f_{text}) \\ L_{textual}=-\log(P_{textual}(c))
    • 其中,
      • fimgf_{img}ftextf_{text}是由上訴得到的倆特徵,
      • WshareW_{share}則是上面網絡圖中用於全連接層上的參數
      • LL表示loss
      • PP表示所有類的概率, 而P(c)P(c)則是對於正確的類cc的預測的可能性

而Instance loss則定義爲:
L=λ1Lrank+λ2Lvisual+λ3LtextualL=\lambda_1L_{rank}+\lambda_2L_{visual}+\lambda_3L_{textual}
對於其中的參數λ1,λ2,λ3\lambda_1,\lambda_2,\lambda_3, 在後續的提到的兩個training stage中,第一個訓練階段不使用Ranking loss, 即(λ1=0,λ2=1,λ3=1\lambda_1=0,\lambda_2=1,\lambda_3=1). 第二個階段則使用之.

存在問題: Instance loss不能顯示地計算模型內部的距離作爲ranking loss, 但是可以提高對於每種模式中不同的instance的判別法.

c. Two-stage Training

將訓練過程劃分成2個階段:

  • Stage Ⅰ: 針對 image CNN, 固定其預訓練好的權重並結合 Text CNN由 instance loss(No ranking loss) 來對Text CNN進行優化. 之所以不同步對image CNN和text CNN一起進行優化,是因爲對於text CNN來說, 其權重幾乎都是從頭開始學習的. 一旦同步優化的話, text CNN 可能會包含掉之前預訓練的image CNN.
  • stage Ⅱ: 經過 Stage Ⅰ 的處理後,在此時在通過端對端來針對整個網絡進行向好的方向的微調. 此時往 instance loss里加入ranking loss來訓練整個網絡.

實驗證明, 我們網絡經過一系列的處理,更加有競爭性了!

總結

  • 提出dual path CNN(CNN+CNN)來解決傳統的image caption Model中對圖像特徵的丟失問題
  • 本文的亮點在於使用了image-text進行embedding來實現image和text的匹配問題, 通過這種來更具有細粒度的方法來對文本檢索其匹配度最高的image
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章