本文將介紹一種特殊的行人re-id任務,也就是利用自然語言文本信息來檢索大規模數據集中的行人圖片,這其實是跨模態檢索的一個更加細粒度的應用領域。通常來說,多模態學習包含模態間的映射模態間對齊多模態信息融合等子問題,例如,我們常見的看圖說話(Image Captioning)屬於模態間的映射問題,視覺問答(Visual Question Answering)就包含多模態信息融合問題,而本文的任務屬於模態間對齊的問題。由於在某些場景下,我們無法獲取可靠的待搜索對象的視覺信息。譬如在安防領域,在得不到犯罪分子照片的情況下,我們只能根據目擊證人通過自然語言描述犯罪分子的外貌特徵去在數據集中搜索對應的人。又或者在搜索引擎中搜索圖片時,通常會遇到在不知道待搜索對象的確切信息的情況,所以我們只能使用模糊的語言描述來作為搜索信息。這就需要我們的演算法和模型在訓練中能對自然語言和視覺這兩種信息進行恰當地處理,以求在只有自然語言作為檢索信息的情況下,模型能夠搜索到對應的行人圖片。相比直接用圖片或視頻作為搜索信息的傳統行人re-id問題,基於自然語言的跨模態行人re-id這項任務更加具有挑戰性,需要研究者同時對CV和NLP問題有著更深的理解。本文將以解讀論文的方式和讀者一同學習該領域的主流方法。

數據集

CUHK_PEDES

這項任務在CVPR 2017年大會中由商湯科技首次提出(Person Search with Natural Language Description),並構建了一個數據集CUHK_PEDES,目前學術界能獲取到的跨模態行人re-id數據集也只有這個。其中訓練集包含34054張圖片, 11,003個id和68,126條文本描述,驗證集包含3,078張圖片, 1,000個id和6,158條文本描述. 以及測試集包含3,074張圖片, 1,000個id和6,156條文本描述。平均每張圖片大概對應2條文本描述,每條文本描述平均大約23個單詞,整個數據集共大約9,408個不同的單詞。

主流方法

GNA-RNN(CVPR 2017)

論文:Person Search with Natural Language Description

代碼:github.com/ShuangLI59/P

該方法就出自CUHK_PEDES數據集的論文中,論文基於在視覺與NLP相關交叉領域的一些工作(Image Captioning,Visual Question Answering等)搭建了幾個baseline,然後作者在亞馬遜眾包平台進行了user study來調研對於人類而言,有哪些影響因素會對基於NLP的行人re-id結果產生影響,作者提出了Recurrent Neural Network with Gated Nueral Attention(GNA-RNN),網路結構如下圖所示。

整體框架由2個子網路組成,分別為visual sub-network (VSN)和 language sub-network(LSN)。主體思路是將視覺子網路(VSN)輸出的unit activation和文本子網路(LSN)對每個單詞提取特徵並輸出的 word-level gate (類似每個word對於檢索結果的影響的權重) 和 unit-level activation三者得到的特徵進行element-wise乘積作為每個單詞和圖片的相關度,最後把一個句子所有word對應的相關度求和得到文本和圖片的相關度。

1.Visual Sub-Network

使用VGG-16作為圖像的特徵提取器,在最後加了2個512維的全連接層,最終產生的是一個512維的視覺向量,也就是輸出的Unit Activation。整個visual子網路先在CUHK_PEDES數據集上使用行人ID分類任務進行了預訓練,但是在跟LSN聯合訓練時只更新兩個全連接層的參數以提高訓練效率。這2個全連接層能在聯合訓練過程中學習到視覺單元的語義信息。

2.Language Sub-Network

Attention over Visual Units

對於一個description,每個word先被編碼成K維的one-hot vector,K是vocabulary size。給定一個描述語句,有一個可學習(參數會更新)的word-fc1全連接層將word進行word embedding成一個feature,WORD-LSTM每一步的輸入是word-fc1和vis-fc2輸出的兩個feature進行cancat後的vector,輸出的hidden state依次經過帶Relu層的全連接層attention-fc1和帶softmax層的全連接層attention-fc2得到一個512維的Unit-level attention vector,通過這一支路的attention機制,獲得了對VSN網路輸出的512維度的visual unit vector的attention weights,512個attention weights的加和為1,通過訓練能讓網路學習並關注到視覺分支(VSN)中與檢索任務更相關的視覺語義特徵(也就是VSN輸出的Visual Units)。下圖就表示此時一個description中第t個word文本信息和經過attention後行人圖片視覺信息的相關度at。

Word-level gates for Visual Units

由於文中user study發現,在亞馬遜眾包平台對該任務使用人工檢索,並按照詞性(名詞、動詞、形容詞等)對description進行化簡,發現每個word對檢索的重要程度不一樣(名詞>形容詞>動詞),因此作者認為每個word對相似度的貢獻程度應該也要賦予不同的權值。所以在WORD-LSTM輸出的hidden state經過一個帶sigmoid的全連接層gate-fc1得到一個標量值作為word的權值gt,gt就代表了每個word對相似度的貢獻程度,類似於對word使用了一次attention機制。因此,最終一個description中第t個word文本信息和行人圖片視覺信息的相關度就可以表示為下圖。

最後一個description中所有的word對應的affinity求和就得到description和行人圖片的相關度。

3.Training Scheme

除了上述提到的VGG-16骨架使用行人ID數據進行預訓練後凍結權重外,GNA-RNN使用batch SGD進行端到端訓練,將訓練集的文本圖片對隨機打亂,batch設置為128,每個batch正負樣本比例1:3,使用交叉熵損失進行訓練。其中當文本description與行人圖片是相關時ground truth標籤為1,否則為0。

4.實驗結果

文中對GNA-RNN與文中構建的一些baseline進行了性能對比,並對是否需要對VGG-16進行pretrain,是否添加word-level gates,是否進行visual unit-level attention以及對visual units的維度對性能的影響進行了ablation study。

Dual Path CNN

論文:Dual-Path Convolutional Image-Text Embedding with Instance Loss

代碼:github.com/layumi/Image

這篇文章的motivation在於,作者希望解決一個instance-level細粒度的retrieval,而非class-level或category-level相對更粗粒度的retrieval,這就希望網路能提取到更detail的視覺和文本特徵。為此,文中提出了以下貢獻點:

  • 除了使用在跨模態檢索中work較好的Ranking Loss外,文中提出的Instance Loss進行聯合訓練,也就是把每個行人ID和相關的Text Descriptions看作一類,進行softmax分類,這樣獲得更加精細的約束,以使網路學到更加細粒度的特徵。
  • 與常見的RNN+CNN結構不同的是,文中採用了雙路CNN結構來分別提取文本和視覺特徵,通過並行訓練,來fine-tune整個網路。

1.網路結構

從上圖可以看出,文中提出的網路結構非常簡單明了,沒有attention等「高大上」的機制,直接用2路CNN分別提取Image和Text的特徵,最後接了2個全連接層分別得到2048維的視覺特徵和文本特徵,其中最後一個全連接層是權重共享的以使網路在權重更新中讓Text和Image映射到同一個語義特徵空間,Text CNN第一個conv層的權重使用了word2vec來初始化,結合Instance Loss和Ranking Loss來對整個網路進行end-to-end訓練。

2.損失函數

Ranking Loss

Ranking Loss在檢索問題中使用較多,通常使用cosine similarity來表示兩個模態間的相似度,取值在[-1,1],值越大表示2個模態間的相似度越高,反之越低。為了更好地拉近兩個模態間的相似度,Ranking Loss其實與Triplet Loss非常相似,同樣是有Anchor和Negative等概念。由於存在2個模態的特徵,因此輸入變成了四元組(Ia, Ta, In, Tn),Ia和Ta表示Image Anchor和Text Anchor,也就是一組Image-Text pair正樣本,而In和Tn則分別代表了2個模態的負樣本。為此,Ranking Loss就可以表達為如下式子:

其中α是metric Learning的margin。通過訓練,可以增大Image Anchor和text Anchor在特徵空間上的cosine similarity,同時減小Image Anchor和Text Negative以及Text Anchor和Image Negative之間的cosine similarity。

Instance Loss

如上文所說,把每個行人ID和所有其相關的Text Descriptions看作一類,進行softmax分類,這樣獲得更加精細的約束,以使網路學到更加細粒度的特徵。為了使網路在權重更新中讓Text和Image的特徵映射到同一個語義特徵空間,最後一個全連接層是權重共享的。

Total Loss

把Ranking Loss和Instance Loss作加權求和,得到最終的Loss。

4.訓練策略

網路採用2步(2-stage)訓練方法對網路進行端到端訓練。

Stage 1

對Image CNN採用ImageNet預訓練權重初始化並進行凍結,而Text CNN除了第一個conv層使用word2vec作為權重初始化之外,其他層使用隨機初始化,然後僅僅使用Instance Loss對整個網路進行fine tune,文中稱這麼做的原因是Text CNN支路基本上是train from scratch,如果對2個支路同時訓練,由於最後一個全連接層是權重共享的,Text CNN支路可能會對Image CNN支路產生妥協(compromise)。並且此時僅使用Instance Loss對網路進行訓練後可以為後續的Ranking Loss訓練獲得較好的初始化,因為此時相當於最後一個全連接層對每個Image-Text pair都有了一個類中心W,這樣能讓後續Ranking Loss進行Metric Learning時更好收斂,如下圖所示。

Stage 2

在Stage 1收斂後,開始進行Stage 2的訓練,也就是加入Ranking Loss,讓Ranking Loss和Instance Loss一同進行訓練 (λ1 = 1, λ2 = 1, λ3 = 1),這時不再對Image CNN的權重進行凍結,而是對整個網路進行端到端的fine-tuning,最後讓網路收斂到一個更好的性能。

5.實驗結果

除了CUHK_PEDES數據集,文中還在MSCOCOFlickr30k數據集上進行了實驗,由於本文主要關注跨模態行人re-id,故這裡主要對CUHK_PEDES數據集的實驗性能進行展示。

文中還對是否更深的Text CNN能獲取更好的性能,是否無監督的聚類方法(如K means)與Instance Loss能獲得類似的效果,Text CNN首個conv層是否使用word2vec能獲得更好的性能,是否進行Text的Position Shift(文中前面隨機空幾個位置)能獲得更好的性能等等做了詳盡的Abalation Study,感興趣的同學可查看原文。

GALM

論文:Pose-Guided Joint Global and Attentive Local Matching Network for Text-Based Person Search

這篇文章在Dual CNN基礎上進行了系列完善,主要的貢獻點有:

  • 引入了人體姿態作為監督信息,並結合名詞描述特徵和視覺特徵獲得Pose attention相關的特徵圖,並可視化驗證其效果。
  • 對Visual CNN獲得的特徵應用hard attention機制。

1.網路結構

乍一看網路有些複雜,網路主要分為了3個部分,分別是Global Image-Text Matching,Uni-Local Image-Text Matching和Bi-Local Image-Text Matching。下面將具體介紹網路的各模塊。

2.特徵提取

視覺特徵

文中觀點認為,人體姿態點與人體的身體部分高度相關,獲取並利用行人的人體姿態點能監督跨模態的局部信息matching,網路中的Pose Estimator採用實時高精度的PAF演算法[3],並在AI challenge上重新訓練,最終對每個行人圖片獲得14個confidence maps。這14個confidence maps有2個用途,一是和原始行人3通道RGB圖片進行concat獲得一個17通道的maps,用於增強視覺信息的表達,然後再輸入到Visual CNN(VGG-16,ResNet-50等)中進行提取特徵;另外就是用於Bi-Local Matching支路來學習文本名詞短語和視覺區域的潛在的語義匹配。圖片樣本經過Visual CNN後輸出得到一個12x4x512維的特徵圖,然後對第一維的shape切成6份並對每份求均值得到一個6x4x512維的特徵圖,這就對應著原圖的6x4=24個local視覺特徵,每個local視覺特徵用一個512維的vector表示。對第二維進行均值池化可以獲得global的視覺特徵表達。

文本特徵

使用one-hot vector來表示每個單詞tj,再用一個Wt來把單詞嵌入到一個特徵空間並表示為xj。

然後使用一個bi-LSTM來學習整個text description所有單詞的特徵表達

最後把首尾兩個隱層空間表達來作為整個text description的特徵。

除此之外,作者還使用了NLTK工具包來把text description中的名詞短語noun phrases提取出來,並使用上述權重共享的Bi-LSTM來提取每個noun phrase的特徵。

3.網路細節

Global Image-Text Matching

經過上述方式分別提取出文本和global的視覺特徵後,再分別使用一個映射權重能讓二者映射到同一語義特徵空間。

然後簡單粗暴,直接對上述二者計算cosine similarity,使用Ranking Loss和ID Loss(就是Dual CNN的Instance Loss)進行約束並訓練。

Uni-Local Image-Text Matching

首先,與上述方式類似,對24個Local的視覺特徵也使用一個映射權重能讓local的視覺特徵和文本Text特徵映射到同一語義特徵空間。

然後就可以計算Local Image-Text之間的cosine similarity。

接著使用了一個hard attention的機制,對每個Local Image-Text的similarity計算一個權重q,並設置一個attention閾值r,把所有大於閾值r的Local similarity求和獲得Uni-Local Image-Text similarity。

Bi-Local Image-Text Matching

作者認為,一個noun phrase應該對應著圖片的某一部分,作者希望網路能夠學習到這二者的語義匹配以獲得更精準的image-text matching性能。考慮到人體關鍵點與人體部分息息相關,因此作者選用了人體關鍵點來監督noun phrase和image regions的matching。把前面Pose Estimator獲得的14個keyPoints分為了人體的6個部分:head, upper torso, arm, hand, leg, foot,顯然這6者互相之間keyPoints會存在重疊部分。然後把這6部分的confident maps分別使用一個包含4個卷積層和1個全連接層的Pose CNN映射為一個b維的vector。以頭部部分得到的向量p1舉例,計算一次p1和noun phrase的cosine similarity,然後根據類似softmax的公式獲取相應的attention weight,最終可以得到對應noun phrase經過pose attented的表達式為:

同理也可以獲得Image經過pose attented後的特徵表達,因此最終得到的Bi-Local Image-Text similarity的表達式為:

訓練GALM

可以看到,對於每個子網路,都使用了Ranking Loss+ID Loss的模式,這與前面的Dual CNN相類似。

因此Global分支的loss可以表示為下式,並且Uni-Local Image-Text Matching和Bi-Local Image-Text Matching分支均是同理,這裡省略。

除此之外,還在Bi-Local Image-Text Matching分支中增加了一個part loss來對6種pi進行分類,確保不同的p能關注到image和text的不同部分。

綜上所述,Total Loss就可以表示為:

4.實驗結果

CUHK-PEDES數據集上進行實驗,可見該網路不論骨架採用VGG-16還是ResNet-50,都達到了同水平的SOTA性能。

文中還對分別添加各子模塊網路的作用進行了Ablation Study。

對文中的visual hard attention的regions以及pose-guided attention的attention map進行了可視化,可見經過pose的監督能讓visual和noun prase分支都attend到更具可解釋性的human body part以及名詞上。

小結

本文通過梳理論文的方式為讀者逐篇講解了目前基於自然語言的跨模態行人re-id相關的SOTA方法,作為一個跨模態檢索中比較細粒度的子任務,除了最初提出的GNA-RNN使用CE Loss,後續的方法都用上了行人Re-Id常見的類似Triplet Loss的Ranking Loss,並且逐漸從全局模態信息對齊轉變成局部模態信息對齊,包括attention機制,利用人體姿態信息加強監督等等。如有錯漏或不足,希望讀者們多多指導。下一部分我們將繼續學習相關領域的SOTA方法,包括:

  • Identity-aware textual-visual matching with latent co-attention(ICCV 2017)
  • Improving Text-based Person Search by Spatial Matching and Adaptive Threshold(WACV 2018)
  • ref="arxiv.org/abs/1808.0157">Improving deep visual representation for person re-identification by global and local image-language association(ECCV 2018)
  • ......

目前正在進行的WIDER Face & Person Challenge 2019其中Track 4就是Person Search by Language,歡迎小夥伴繼續關注follow~

參考文獻

  • [1]簡書:Person Search with natural language
  • [2]知乎:用CNN分100,000類圖像
  • [3]Z. Cao, T. Simon, S. E. Wei, and Y. Sheikh. Realtime multi- person 2d pose estimation using part affinity fields. In IEEE Conference on Computer Vision and Pattern Recognition, 2017.
  • [4]知乎:以人為本的計算機視覺研究,WIDER Challenge 2019

推薦閱讀:

相关文章