當前位置:
首頁 > 最新 > Kaggle地標圖片檢索挑戰賽冠軍方案講解

Kaggle地標圖片檢索挑戰賽冠軍方案講解

來源:Kaggle

編譯:Bing

四個月前,谷歌在Kaggle發布了一項地標檢索挑戰賽,在這場比賽中,參賽者會得到一些圖像,他們需要在所有圖像數據集中找到含有給定圖像中地標的圖片。

圖像檢索是計算機視覺領域的基礎問題,對於包含地標的圖像更是非常重要,因為這是用戶拍攝的熱門對象。本次挑戰賽的數據集是世界最大的圖像檢索數據集,其中有超過一百萬張圖像,覆蓋了全球1.5萬個不同景點

同時,這項挑戰賽也是CVPR 2018的地標辨認研討會的一部分。下面就是本次競賽排名第一的解決方案,參賽隊伍是由anokas帶領的團隊,論智對其進行了編譯。

解決方案包括兩個主要元素:

首先,創建一個高性能的全局描述符(global descriptor),它可以將資料庫中的圖像用奇異向量表示;

然後,創建一個高效的框架,能將這些向量和最可能的圖片聯繫起來,最後提交到積分榜上。

下面是總體框架的流程圖,其中每一步應用後都有對應的LB分數。

註:下文中所有分數都以百分數表示,即62.5%=0.625

方案詳細講解

全局描述符(Global Descriptors)

我們的方案中最主要的部分就是幾個全局描述符,這些向量描述了圖片的全部內容。我們從兩個預訓練的CNN模型開始(ResNet和ResNeXt),並用四種目前最先進的集結方法(aggregation methods)生成全局描述符。下面是四種集結方法各自的細節以及它們「原始」的表現性能(也就是沒有進行檢索詞擴展和資料庫擴展):

基於區域熵的多層抽象池化(REMAP)[42.8% mAP]:我們之前設計的一個全局描述符聚合了不同CNN層的深度特徵,之後經過訓練可以表示多個水平的可視化抽象對象。我們將在之後的CVPR研討會上進一步展示REMAP的細節架構。

最大卷積激活值(MAC)[32.9% mAP]:MAC描述符將每個CNN的最後一層卷積過濾的最大局部回應進行編碼。在它的架構中,ResNeXt的最後一個卷積層後面有一個最大池化層、L2-正則化層和PCA+白化層。

卷積的池化和(SPoC)[31.7% mAP]:在SPoC這一過程中,ResNeXt的最後一個卷積層後接池化和層、L2-正則化層和PCA+白化層。

卷積的區域最大激活值(RMAC)[34.7% mAP]:在RMAC中,ResNeXt最後的卷積特徵是在多個規模重疊區域中進行的最大池化。這些區域同樣是基於有L2-正則化層和PCA+白化層的描述符。最後把所有描述符匯總到一個單一的描述符中。

基礎的CNN網路(ResNet和ResNeXt)是在ImageNet上進行的訓練,之後再一個地標數據集的子集中進行調整。該子集來自Babenko等人的研究成果,其中包括大約12萬張圖片和650個著名景點。

這一數據集中的圖像最初是在圖片搜索引擎中用文字搜到的,沒有經過檢驗,所以其中可能含有很多不相關的圖片,這需要我們過濾掉。刪除圖片的過程是半自動的,利用帶有密集SIFT特徵的Hessian-affine檢測器以及RVD-W描述符進行聚合。處理完圖像後,還剩下25000張左右的圖片,都屬於一種地標,我們想用它對模型進行調整。

我們沒有用其他類似競賽中的數據集作為訓練數據,因為我們想看看在新的數據集下,我們的方案生成的效果如何。

合併描述符

通過用上述方法訓練的六個全局描述符合併,就得到了最終的全局描述符(括弧中的是LB分數):

ResNeXt+REMAP(42.8%)

ResNeXt+RMAC(34.7%)

ResNeXt+MAC(32.9%)

ResNeXt+SPoC(31.7%)

ResNet+REMAP(35.8%)

ResNet+MAC(30.4%)

接著我們將每個描述符縮放到固定的L2 norm上,為每個描述符分配權重,按以下方式連接描述符:

權重的選擇是點對點的,以反映每種方法相應的性能。之後,我們用PCA將描述符的維度降到4K,同時應用白化,讓所有維度的方差相同。雖然PCA和白化只能改善一小部分,但是它將查詢擴展的結果提升了幾個百分點。

最近鄰搜索

創建好描述符後,每張圖片都由一個4096維的描述符表示。接下來,我們用複雜的k-最近鄰搜索找到每張圖前2500個近鄰和L2距離。這一階段提交每張圖片的前100個最近鄰得到了47.2%的分數。

這一步驟使用優化過的NumPy代碼實現,用了2小時對每個1.2M的圖片找出了前2500個最近鄰。

資料庫增強

接下來要做的是資料庫增強(DBA),即把資料庫中每張圖片的描述符換成它本身和前10個最近鄰的加權結合。目的就是利用它們近鄰的特徵提高圖像表示的質量。更準確的是,我們進行描述符的加權求和,其中權重按以下代碼計算:

有趣的是,在其他數據集上我們發現只要用大於兩個近鄰進行增強就會讓分數下降,但10個近鄰對數據集增強和圖片是最好的。

需要注意的是,DBA是整個過程中添加的最後一步,雖然它能讓分數得到大幅提升,但是將它和查詢擴展結合起來時,提升只有1%—2%。我們認為這是由於資料庫擴展與查詢擴展方法的第一步很相似。

查詢擴展

查詢擴展是圖像檢索問題中的基礎技術,通常對模型的性能有很大提升。它工作的原理是:如果A與B匹配,B與C匹配,那麼A與C匹配。我們可以在下面的實例中看到這種原理的優勢,圖中三個區域相互重疊:

在這一案例中,查詢擴張系統可以將A和C聯繫起來,判斷它們屬於同一場景,即使它們全局描述符可能不相符。這在一些光線不同或視角不同的圖像中也很有用。

在這次比賽中,我們設計了一種新的、快速的技術用於查詢擴展,它可以通過遞歸運行捕捉圖像之間的長距離連接。這種特點非常適合這一問題,因為含有某個地標的圖像有很多,只有一張圖像才能成為查詢結果,其他的只能歸為top 100的結果中。

第一次迭代後,查詢擴展提升了約11%,進行了30分鐘的遞歸運行後,提升了14%,加入數據增強後這一結果有所下降。

簡化模型

在產品級機器學習環境中,由於收益遞減原則,幾乎不會使用大規模的多模型集成。通常使用較小的子集就能達到理想性能。我們想得到原來方案的簡化版本,只需要不到12個小時,僅僅用ResNeXt-REMAP和查詢擴展就能得到56%—57%的分數。

不足之處

局部描述符:這可能是我們在比賽中最意想不到的事。我們試了好幾種基於多種局部描述符的方法,包括使用和不使用幾何驗證的方法,例如用它對我們的結果重新排名,或者用它從上到下瀏覽幾千個全局近鄰,找找有沒有遺漏掉的局部匹配。不知道其他隊伍使用局部描述符的情況如何,也許是基於CNN的全局描述符太好用了以至於局部的時代終結了?

處理旋轉圖像:在數據集中我們發現很多圖片都是旋轉的。我們用好幾種方法處理這個問題,例如在k-最近鄰方法中比較旋轉和不旋轉的描述符,並為每組圖像進行最近匹配。但是分數依然沒有變化。有可能是因為這個數據集有太多干擾項了,誤報率太高,即使真正匹配對整體分數的影響也不大。

集成:我們試了好幾種方法將不同模型和方法的結果結合起來,例如排序平均和交錯預測等,然而成效不大。似乎早期將模型結合比結束時結合要好一些。

原文地址:www.kaggle.com/c/landmark-retrieval-challenge/discussion/57855


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 論智 的精彩文章:

從示例中理解SVM演算法
Fran?ois Chollet:對於AI,我們究竟該擔憂什麼?

TAG:論智 |