2016年9月9日 星期五

. 深度學習變革視覺實例搜索


按:本文作者鄧啓力,對岸中國哈爾濱工業大學深圳研究生院計算機系碩士研究生二年級,導師為「鵬城學者」徐勇教授。研究興趣為深度學習與電腦視覺。曾獲2015年首屆阿里巴巴大規模圖像搜索大賽二等獎,總排名第三名。


摘要
近些年,深度學習在各種電腦視覺任務上都取得了重大的突破,其中一個重要因素就是其強大的非線性表示能力,能夠理解圖像更深層次的資訊。本文對基於深度學習的視覺實例搜索方法,做了簡單的總結和概括,希望能給讀者們帶來啓發。

前言
給定一張包含某個物體的查詢圖片,視覺實例搜索的任務,就是從候選的圖片庫中,找到那些與查詢圖片包含相同物體的圖片。與一般的圖像搜索相比,實例搜索的搜索條件更為苛刻——是否包含相同的物體,如同一款衣服,同一輛車等等。

該問題具有非常廣泛的應用前景,如商品搜索,車輛搜索和基於圖像的地理位置辨識等。舉個例子,移動商品圖像搜索,就是通過分析利用手機相機拍攝的商品照片,從商品庫中找到相同或相似的商品。

然而在實際場景中,由於姿態,光照和背景等干擾因素,所以兩張包含相同物體的圖像,往往在外觀上差異很大。從這個角度來看,視覺實例搜索的本質問題,就是應該學習什麼樣的圖像特徵,從而使得包含相同物體的圖像,在特徵空間上是相似的。

近些年,深度學習在各種電腦視覺任務上,都取得了重大的突破,其中就包括視覺實例搜索任務。本文主要對基於深度學習的實例搜索算法(下面簡稱為「深度實例搜索算法」)進行剖析和總結,文章分為四個部分:第一部分總結了經典視覺實例搜索算法的一般流程;第二部分和第三部分,分別從兩個方面去介紹,近些年主要的深度實例搜索算法;端到端的特徵學習方法,和基於CNN特徵的特徵編碼方法;第四部分將通過總結在2015年首屆阿里巴巴大規模圖像大賽(Alibaba Large-scale Image Search Challenge, ALISC)中出現的相關方法,介紹一些實踐中,可以提高實例搜索性能的技巧和方法。

經典視覺實例搜索算法的一般流程
在深度學習流行之前,典型的實例搜索算法一般分為三個階段:首先在給定的圖像密集地提取局部不變特徵,然後將這些局部不變特徵進一步地編碼為一個緊湊的圖像表示,最後將查詢圖像與候選圖像庫中的圖像,進行相似度計算(基於第二步得到的圖像表示),找到那些屬於同一實例的圖片。
1.局部不變特徵。局部不變特徵的特點,就是提取圖像局部區域的細節資訊,不關心全局資訊,並對該局部區域內的光線變化、幾何變換具有一定的不變性。這對實例搜索非常有意義,因為目標物體可以伴隨著幾何變換出現圖像中的任何區域。在早期的工作中,很多實例搜索方法採用的是SIFT特徵。
2. 特徵編碼對局部特徵進一步地編碼有兩方面的意義:挖掘這些局部特徵之間的相關信息,增強可判別能力;單一緊湊的特徵向量更易於實現索引,提高搜索速度。目前常見的方法有VLAD(vector of locally aggregated descriptors),Fisher Vectors,triangular embedding等。在這裡,本文簡單地介紹下VLAD方法(在本文後面多次出現):a)VLAD方法首先利用k-means得到包含k個中心的碼本,然後每個局部特徵被指派給離它最近的中心點(我們將這一步稱為hard-assignment,之後會相關文章對此進行改進),最後將這些局部特徵與其指派的中心點之間的殘差累和作為最終的圖像表示。從上面可以看出,VLAD方法有無序的特性——不關心局部特徵的空間位置,因此可以進一步解耦全局空間資訊,對幾何變換具有很好的魯棒性。

3. 相似度計算。一種直接的做法是根據距離函數計算特徵之間的距離,例如歐式距離,餘弦距離等。另一種是學習相應的距離函數,例如LMNN、ITML等度量學習方法。

總結:經典視覺實例搜索算法的性能,往往受限於hand-crafted特徵的表示能力。當深度學習應用在實例搜索任務時,主要就是從特徵表示入手,即如何提取更加具有判別性的圖像特徵

端到端的特徵學習方法
NetVLAD: CNN architecture for weakly supervised place recognition  (CVPR 2016)

這篇文章是來自於INRIA 的Relja Arandjelović等人的工作。該文章關注實例搜索的一個具體應用——位置辨識。在位置辨識問題中,給定一張查詢圖片,通過查詢一個大規模的位置標記數據集,然後使用那些相似的圖片的位置,去估計查詢圖片的位置。

作者首先使用Google Street View Time Machine,建立了大規模的位置標記數據集,隨後提出了一種卷積神經網路架構,NetVLAD——將VLAD方法嵌入到CNN網路中,並實現「end-to-end」的學習。該方法如下圖所示:


深度学习变革视觉实例搜索

原始的VLAD方法中的hard-assignment操作是不可微的(將每個局部特徵,指派給離它最近的中心點),因此不可以直接嵌入到CNN網路裡,並參與誤差反向傳播。

這篇文章的解決方法就是使用softmax函數,將此hard-assignment操作轉化為soft-assignment操作——使用1x1卷積和softmax函數,得到該局部特徵,屬於每個中心點的概率/權重,然後將其指派給具有最大的概率/權重的中心點。

因此NetVLAD包含了三個可以被學習參數,,其中是上面1x1卷積的參數,用於預測soft-assignment,表示為每個簇的中心點。並在上圖的VLAD core層中完成相應的累積殘差操作。


作者通過下圖給我們說明,NetVLAD相比於原始的VLAD的優勢:(更大的靈活性——學習更好的簇中心點)

深度学习变革视觉实例搜索

這篇文章的另一個改進工作就是Weakly supervised triplet ranking loss。

該方法為瞭解決訓練數據可能包含噪聲的問題,將triplet ranking loss中正負樣本,分別替換為潛在的正樣本集(至少包含一張正樣本,但不確定哪張)和明確的負樣本集。

並且在訓練時,約束查詢圖片和正樣本集中,最可能是正樣本的圖片之間的特徵距離比,查詢圖片與所有負樣本集內的圖片之間的特徵距離要小。

Deep Relative Distance Learning: Tell the Difference Between Similar Vehicles (CVPR 2016)


接下來的這篇文章關注的是車輛辨識/搜索問題,來自於北京大學Hongye Liu等人的工作。如下圖所示,這個問題同樣可以被看成實例搜索任務。

深度学习变革视觉实例搜索

和很多有監督的深度實例搜索方法一樣,這篇文章旨在將原始的圖片,映射到一個歐式特徵空間中,並使得在該空間裡,相同車輛的圖片更加聚集,而非同類的車輛圖片則更加遠離。


為了實現該效果,常用的方法是通過優化triplet ranking loss,去訓練CNN網路。但是,作者發現原始的triplet ranking loss存在一些問題,如下圖所示:

深度学习变革视觉实例搜索

對於同樣的樣本,左邊的三元組會被損失函數調整,而右邊的三元組則會被忽視。兩者之間的區別在於anchor的選擇不一樣,這導致了訓練時的不穩定。

為了克服該問題,作者用coupled clusters loss(CCL)去替代triplet ranking loss。該損失函數的特點,就是將三元組變成了一個正樣本集,和一個負樣本集,並使得正樣本內的樣本相互聚集,而負樣本集內的樣本與那些正樣本更加疏遠,從而避免了隨機選擇anchor樣本所帶來的負面影響。


該損失函數的具體效果如下圖所示:

深度学习变革视觉实例搜索

最後這篇文章針對車輛問題的特殊性,並結合上面所設計的coupled clusters loss,設計了一種混合的網路架構,並構建了相關的車輛數據庫去提供所需的訓練樣本。

DeepFashion: Powering Robust Clothes Recognition and Retrieval with Rich Annotations (CVPR 2016)

最後的這篇文章同樣是發表在CVPR 2016上,介紹了衣服辨識和搜索,同樣是與實例搜索相關的任務,來自於香港中文大學Ziwei Liu等人的工作。


首先,本篇文章介紹了一個名為DeepFashion的衣服數據庫。該數據庫包含超過800K張的衣服圖片,50個細粒度類別和1000個屬性,並還額外提供衣服的關鍵點,和跨姿態/跨領域的衣服對關係(cross-pose/cross-domain pair correspondences),一些具體例子如下圖所示:

深度学习变革视觉实例搜索

然後為了說明該數據庫的效果,作者提出了一種新穎的深度學習網路,FashionNet——通過聯合預測衣服的關鍵點和屬性,學習得到更具區分性的特徵。該網路的總體框架如下所示:

深度学习变革视觉实例搜索

FashionNet的前向計算過程總共分為三個階段:第一個階段,將一張衣服圖片輸入到網路中的藍色分支,去預測衣服的關鍵點是否可見和位置。

第二個階段,根據在上一步預測的關鍵點位置,關鍵點池化層(landmark pooling layer)得到衣服的局部特徵。

第三個階段,將「fc6 global」層的全局特徵和「fc6 local」的局部特徵拼接在一起組成「fc7_fusion」,作為最終的圖像特徵。

FashionNet引入了四種損失函數,並採用一種迭代訓練的方式去優化。這些損失分別為:回歸損失對應於關鍵點定位,softmax損失對應於關鍵點是否可見和衣服類別,交叉熵損失函數對應屬性預測,和三元組損失函數對應於衣服之間的相似度學習。

作者分別從衣服分類,屬性預測和衣服搜索這三個方面,將FashionNet與其他方法相比較,都取得了明顯更好的效果。

總結:當有足夠多的有標注數據時,深度學習可以同時學習圖像特徵和度量函數。其背後的思想,就是根據給定的度量函數,學習特徵使得特徵在該度量空間下,具有最好的判別性。

因此端到端的特徵學習方法的主要研究方向,就是如何構建更好的特徵表示形式和損失函數形式。

基於CNN特徵的特徵編碼方法
本文在上面部分介紹的深度實例搜索算法,主要關注數據驅動的端到端特徵學習方法,及相對應的圖像搜索數據集。

接下來,本文關注於另一個問題:當沒有這些相關的搜索數據集時,如何提取有效的圖像特徵。為了克服領域數據的不足,一種可行的策略就是在CNN預訓練模型(訓練在其他任務數據集上的CNN模型,比如ImageNet圖像分類數據集)的基礎上,提取其中某一層的特徵圖譜(feature map),對其進行編碼得到適用於實例搜索任務的圖像特徵。

本部分將根據近些年相關的論文,介紹一些主要的方法(特別的,本部分中所有的CNN模型都是基於ImageNet分類數據集的預訓練模型)。

Multi-Scale Orderless Pooling of Deep Convolutional Activation Features (ECCV 2014)

這篇文章發表在ECCV 2014上,是來自於北卡羅來納大學教堂山分校Yunchao Gong和伊利諾伊大學香檳分校Liwei Wang等人的工作。 由於全局的CNN特徵缺少幾何不變性,限制了對可變場景的分類和匹配。

作者將該問題歸因於全局的CNN特徵,包含了太多的空間訊息,因此提出了multi-scale orderless pooling (MOP-CNN)——將CNN特徵與無序的VLAD編碼方法相結合。


MOP-CNN的主要步驟為,首先將CNN網路看作為「局部特徵」提取器,然後在多個尺度上提取圖像的「局部特徵」,並採用VLAD將這些每個尺度的「局部特徵」,編碼為該尺度上的圖像特徵,最後將所有尺度的圖像特徵連接在一起構成最終的圖像特徵。提取特徵的框架如下所示:

深度学习变革视觉实例搜索

作者分別在分類和實例搜索兩個任務上進行測試,如下圖所示,證明MOP-CNN相比於一般的CNN全局特徵,有更好的分類和搜索效果。

深度学习变革视觉实例搜索

Exploiting Local Features from Deep Networks for Image Retrieval (CVPR 2015 workshop)

這篇文章發表在CVPR 2015 workshop上,是來自於馬里蘭大學帕克學院Joe Yue-Hei Ng等人的工作。近期的很多研究工作表明,相比於全相連層的輸出,卷積層的特徵圖譜(feature map)更適用於實例搜索。


本篇文章介紹了,如何將卷積層的特徵圖譜轉化為「局部特徵」,並使用VLAD將其編碼為圖像特徵。另外,作者還進行了一系列的相關試驗,去觀察不同卷積層的特徵圖譜,對實例搜索準確率的影響。

深度学习变革视觉实例搜索
Aggregating Deep Convolutional Features for Image Retrieval(ICCV 2015)

接下來這篇文章發表在ICCV 2015上,是來自於莫斯科物理與技術學院Artem Babenko和斯科爾科沃科技學院Victor Lempitsky的工作。從上面兩篇文章可以看出,很多深度實例搜索方法都採用了無序的編碼方法。


但包括VLAD,Fisher Vector在內的這些編碼方法的計算量,通常比較大。為了克服該問題,這篇文章設計了一種更加簡單,並且更加有效的編碼方法——Sum pooing。Sum pooling的具體定義如下所示:


深度学习变革视觉实例搜索

其中就是在卷積層在空間位置上的局部特徵(這裡提取局部特徵的方法,與上篇文章一致)。在使用sum pooling後,對全局特徵進一步地執行PCA和L2歸一化得到最終的特徵。

作者分別與Fisher Vector,Triangulation embedding和max pooling這些方法進行比較,論證了sum pooling方法不僅計算簡單,並且效果更好。

Where to Focus: Query Adaptive Matching for Instance Retrieval Using Convolutional Feature Maps (arXiv 1606.6811)

最後這篇文章目前發在arXiv上,是來自於澳大利亞昆士蘭大學Jiewei Cao等人的工作。

正如本文在開頭部分所提到的,雜亂的背景對實例搜索影響非常大。為了克服該問題,這篇文章在上篇文章所提出的sum-pooling方法的基礎上,提出了一種被稱為query adaptive matching (QAM)的方法去計算圖像之間的相似度。

該方法的核心在於對圖像的多個區域執行池化操作,並創建多份特徵去表達圖像。然後在匹配時,查詢圖像將分別與這些區域的特徵比較,並將最佳匹配分數作為兩張圖像之間相似度。那麼接下的問題是如何去構建這些區域。


作者首先提出了兩種方法——Feature Map Pooling和Overlapped Spatial Pyramid Pooling (OSPP),去得到圖像的base region。然後通過對這些base region不斷地合併,以找到最好的相似度評分為目標,構建出目標區域。其中最吸引人的地方在於,作者將整個合併的過程,轉化為了對一個優化問題的求解。下圖顯示了QAM方法的部分結果及對應圖像的特徵映射。

深度学习变革视觉实例搜索

總結:在某些實例搜索任務中,由於缺少足夠的訓練樣本,所以不能直接 「端到端」的去學習圖像特徵。

這時候,如何將現成的CNN特徵編碼,為適合實例搜索的圖像表示,就成為該領域的一個熱門研究方向。

2015年首屆阿里巴巴大規模圖像搜索大賽總結
在介紹完近些年一些主要的深度實例搜索方法後,在接下來的部分,本文將通過總結在阿里巴巴大規模圖像搜索大賽中,出現的相關方法,來介紹一些實踐中可以提高視覺實例搜索性能的技巧和方法。

阿里巴巴大規模圖像搜索大賽,由阿里的圖像搜索組所主辦,要求參賽隊伍從海量的圖片庫中,找出那些與查詢圖片包含相同物體的圖片。這次比賽提供了以下兩類數據用於訓練:約200W張圖片的訓練集(類別級標籤及相對應的屬性),1417張驗證查詢圖片及相對應的搜索結果(總共約10W張)。

在測試時,給定3567張查詢圖片,參賽隊伍需從約300W張圖片的評測集中(無標籤),搜索出那些符合要求的圖片,評價指標為基於top 20的mAP ( mean  Average  Precision)。

首先簡單介紹我們的方法——Multi-level Image Representation for Instance Retrieval,該方法取得了這次比賽的第三名。很多方法都是用最後一個卷積層或全連接層的特徵進行檢索,而由於高層的特徵已經損失了很多細節訊息(對於更深的網路,損失更嚴重),所以實例搜索時不是很精準,如下圖所示,即整體輪廓相似,但細節則差距很大。
深度学习变革视觉实例搜索
為了克服該問題,我們將CNN網路中不同層的特徵圖譜(feature map)進行融合,這不僅利用了高層特徵的語義信息,還考慮了低層特徵的細節紋理資訊,使得實例搜索更精準。如下圖所示,我們的實驗主要基於GoogLeNet-22網路,對於最後的8層特徵圖(從Inception 3b到Inception 5b),首先使用最大池化對這些不同尺度的特徵圖分別進行子採樣(轉換為相同尺寸的特徵圖),並使用的卷積對這些採樣結果進一步地處理。


然後對這些特徵圖做線性加權(由的卷積完成),最後在此基礎上,使用sum pooling得到最終的圖像特徵。在訓練時,我們根據所提供的訓練數據,通過優化基於餘弦距離的triplet ranking loss來端到端學習這些特徵。因此在測試時,可以直接使用特徵之間的餘弦距離來衡量圖像的相似度。

深度学习变革视觉实例搜索

另外,借鑒於訓練SVM分類器時使用了難分樣本挖掘的思想,我們的方法首先在前向計算時,計算當前訓練批次中所有潛在三元組的損失(從當前訓練批次中選取兩張相同類別的圖片和一張不同類別的圖片構成潛在三元組),然後找到那些「困難」的三元組(更大的損失),最後在反向計算時,使用這些「困難」的三元組進行誤差傳播,從而取得更好的訓練效果。

接下來簡單總結其他隊伍的相關方法。在端到端的特徵學習方法中,除了triplet ranking loss,contrastive loss(對應於Siamese network)也是常見的損失函數。除此之外,還有一些方法值得我們關注,可以顯著地提高搜索性能:

(一)  同款圖挖掘
在有監督的機器學習方法中,更多的數據可能就意味著更高的準確率。因此來自於中科院計算所的團隊提出,先根據ImageNet預訓練模型的特徵,在類別級訓練集上聚類,然後通過閥值,挖掘出更多地同款圖,最後用這些同款圖去訓練CNN網絡,學習圖像特徵。該方法實現簡單,並且可以顯著地提高搜索的性能。

(二)  目標檢測
在實例檢索中,複雜的背景噪聲直接影響了最終的搜索性能。因此很多隊伍首先嘗試使用目標檢測(比如faster-rcnn)定位感興趣的區域,然後在進一步地學習特徵,比較相似度。另外,當沒有bounding box訓練數據時,弱監督的目標定位也是一種有效的方法。

(三) 一階池化特徵和二階池化特徵融合
二階池化方法通過捕捉圖像二階統計變量,如協方差等,往往可以取得更好的搜索準確率。來自大連理工的李培華教授所帶領的團隊在CNN網絡的基礎上,將一階池化特徵和二階池化特徵融合,取得非常出色的成績。

(四) 聯合特徵學習和屬性預測
該方法和本文在第三部分所提到的DeepFashion類似,同時學習特徵和預測圖片的屬性(多任務訓練),從而得到更具區分性的特徵。

                                                                                                                                                                                                                             

沒有留言:

張貼留言