Stacked Cross Attention for Image-Text Matching
2020-03-06 15:13:08
Paper: https://arxiv.org/pdf/1803.08024.pdf
Code: https://github.com/kuanghuei/SCAN
Project: https://kuanghuei.github.io/SCANProject/
1. Stacked Cross Attention Network
本文提出了一個 Stacked Cross Attention Network 將 words 和 image regions 映射到一個共同的 embedding space 來預測整張圖和一個句子之間的相似性。作者首先用 bottom-up attention 來檢測和編碼圖像區域,提取其 feature。與此同時,也對 word 進行單詞映射。然后用 Stacked Cross Attention 來推理對齊后的 image region 和 word feature 之間的 image-sentence similarity。
1.1. Stacked Cross Attention:
Stacked Cross Attention 的輸入有兩個:一個是 image features V = {v1, v2, ... , vk},每一個圖像特征編碼了圖像中的一個區域;另外一個是單詞特征組合是 E = {e1, e2, ... , en},每一個單詞特征編碼了句子中的一個單詞。輸出是 image-pair 之間的相似性得分。本文定義了兩種互補的形式:Image-Text 以及 Text-Image 的版本。
Image-Text Stacked Cross Attention:這種形式的模型涉及到兩個階段的 attention,如圖 2 所示。
首先,用對應每一個圖像區域來 attend 句子中的單詞。第二階段中,其對比了每一個圖像區域和對應 attended 句子向量,從而確定圖像區域的重要性。具體來說,給定圖像 I 及其 k 個檢測的區域,一個帶有 n 個單詞的句子 T,我們首先計算所有圖像對之間的余弦相似性:
此處,sij 代表了 第 i 個region 和 第 j 個word 之間的相似性。經驗表明,將該相似性得分進行歸一化處理后為:
為了用對應圖像區域對 word 進行 attend,此處作者給 word representation 進行了加權組合:
給定句子向量,為了確定每一個圖像區域的重要性,作者定義了第 i 個 region 和 句子之間的相關性作為 attended sentence vector 和 image region feature vi 之間的余弦相似性:
受到 speech recognition 中最小化分類誤差的啟發,圖像 I 和 句子 T 之間的相似性可以用 Log-SumExp pooling 來計算:
其中 $\lambda_2$ 是一個超參數,決定了圖像區域特征 和 attend 之后句子向量之間最相關的 pairs 的重要性。作者定義 為:
本質上來說,如果 region i 在句子中沒有被提及,那么,其 feature vi 將不會和對應的 attended 句子向量相似,因為這樣就不會收集較好的信息來計算 $a_i^t$。所以,對比 $a^t_i$ 和 vi 決定了區域 i 對於句子來說是否重要。
Text-Image Stacked Cross Attention:
類似的操作。
1.2. Alignment Objective:
對於 Image-Text matching 來說,通常采用 triplet loss,之前的方法也采用了 hinge-based triplet ranking loss:
其中,S 代表相似性得分函數,即 $S_{LSE}$。給定一個圖像 I,第一個 sum 考慮到了所有的 negative samples;給定一個句子 T,第二個 sum 考慮到了所有的 negative images。實際上,為了計算效率起見,一般只考慮 mini-batch 中的 hard negatives,而不是將所有的 negative samples 都加起來。在本文中,作者聚焦於一個 mini-batch 中的 hardest negatives,對於一個 positive pair (I, T),hardest negatives 可以通過如下的方式給定:
所以,本文的三元組損失函數可以表達為:
1.3. Representing Images with Bottom-Up Attention:
給定一張圖像 I,本文的目標是用一系列的圖像來表示,即:V = {v1, v2, ... , vk},這樣就使得每一個圖像特征編碼了一個區域。關於圖像區域的定義是通用的,然而,本文聚焦於物體級別。本文將顯著性物體的檢測作為一種 bottom-up attention,並且用 Faster RCNN model 來實現。Faster RCNN 模型是一種兩階段的物體檢測框架。在第一個 RPN 的階段,用anchor 機制生成多種樣式的 bounding box。在第二個階段,從 feature map 上得到 RoIs 的 feature,以進行后續 region-wise classification 和 bounding box regression。在 RPN 和 final stages 都會進行 classification 和 localization 的多任務的訓練。本文將 Faster RCNN 和 Resnet-101 進行組合,並且在 Visual Genomes 上進行預訓練。為了用豐富的語義信息學習特征表示,模型預測 attribute classes 和 instance classes,instance classes 包含物體和其他難以定位的東西,如:stuff 像:sky, grass, building;attributes 像 furry。
對於每一個選中的區域 i,$f_i$ 是從該區域中得到的 mean-pooled convolutional feature,這樣就使得 image feature vector 的維度變為 2048。作者添加了一個 fc layer 將 $f_i$ 轉換為 h-dimensional 的向量:
所以,圖像完整的表示是一組 embedding vectors v = {v1, v2, ..., vk},其中每一個 $v_i$ 表示一個顯著區域,k 是 regions 的個數。
1.4. Representing Sentences:
為了連接視覺和語言,作者將 language 映射到和 image regions 相同維度的語義向量。給定一個句子 T,最簡單的方法是將每一個單詞進行單獨的映射。然而,這種方法沒有考慮到句子中的任何語義信息。所以,作者采用 RNN 模型對這些單詞按照他們的內容進行再編碼。對於句子中的每一個單詞,作者用 one-hot vector 對其進行編碼,然后根據一個映射矩陣 We 對其進行 embedding,得到一個 300-D 的向量。$x_i = W_e w_i$,然后利用一個雙向 GRU 將 vector 進行映射,這會考慮到句子兩個方向的信息。作者將前向和反向得到的編碼 feature 拼接到一起當做是句子的最終表達:
2. Experiment: