細粒度圖像識別文章 Picking Deep Filter Responses for Fine-grained Image Recognition 閱讀筆記

細粒度圖像識別文章 Picking Deep Filter Responses for Fine-grained Image Recognition 閱讀筆記


原文章: Picking Deep Filter Responses for Fine-grained Image Recognition(CVPR2016)

摘要: 細粒度圖像識別一直以來都是極具挑戰性的任務。大多數細粒度圖像識別算法都基於object和part級別的標註,來提高識別的準確率。文章提出了一種不需要任何object和part級別的標註的細粒度識別網絡,並在CUB-200-2011上進行識別驗證,並取得了很好的效果。

1 簡介

1.1 背景

  • 細粒度圖像識別指的是在一個大類中的數個子類進行識別(例如識別不同鳥類的種類),它介於basic-level分類(常規的圖像分類)和individual instances識別(人臉檢測)之間。一個普通人對於前者可以很好地識別,但後者往往需要大量的專業知識,才能從一些細微的地方進行區分,沒有接受過專業培訓的人是很難做到的。
  • 爲了實現細粒度圖像識別,大多數工作在訓練和測試時都需要object或者part級別的標註,這些標註等於是告訴了網絡需要從哪裏尋找識別的突破口。有一些工作在測試時不額外使用標註,但是在訓練階段還是需要大量的帶標註的圖像,並且在大尺度圖像識別時顯得很喫力。因此,現在人們開始探索完全不使用標註的識別網絡,但經常會面臨需要從頭開始訓練網絡、複雜度優化等問題。

1.2 文章貢獻

  • 作者做了兩大貢獻。第一個是提出了新穎的自動part detection方法,這個part檢測方法有兩點貢獻:
    • 第一,提出了新穎的檢測學習初始化方法。作者先用原始的selective search方法提取一些patch,將它們送入VGG-M網絡,查看conv4的輸出。結果發現有些通道(channle)對一些特定圖案相應,而有些響應十分混亂,對我們的任務沒有幫助(見Figure 1)。作者的初始化方式的關鍵點就在於精巧地選擇響應顯著且一致的deep filters。
      image.png-243.3kB
    • 第二,作者“learn a set of detectors via iteratively per-category positive sample mining and regularized part model retraining”(翻譯不來……)。作者從每個類別挖掘正樣本,並對每個正樣本引進正則項,以考慮正樣本的異同。學習之後的檢測器可以發現有區別的和一致的patch,這對基於part的識別有幫助。
  • 第二大貢獻,是採用了新的適用於細粒度圖像識別的特徵提取方法。傳統的特徵表達都使用CNN來實現,但CNN來提取不可避免地包含了大量背景信息,而且一些姿勢變化和部分重疊都會影響到檢測和識別。爲了解決這個問題,作者將deep filter響應視爲用於定位的描述符,將其通過Spatially Weighted Fisher Vector (SWFV-CNN)編碼。通過SWFV-CNN,對識別很重要的部分會被強調,這樣就可以實現讓網絡有條件地選擇那些需要的描述符。

1.3 框架預覽

  • 整個框架結構如下。該框架的實現總共分兩步:
    • 第一步是挑選出那些對特定圖像響應明顯且一致的deep filters,它們就作爲weak detectors了。經過weak detectors後可以得到很多patch,從中精巧地選擇語義上相似的正樣本並訓練discriminative detectors。選擇正樣本和訓練分類器是迭代交替地進行的,其中每步都使用交叉驗證以防止過擬合。訓練後的discriminative detectors可以用來發現一些有助於識別的部分。
    • 第二步是通過SWFV挑選出有用的CNN filters。其中使用到了一個叫part saliency map的東西,它表明了一個像素屬於前景部分的可能性有多大。
      image.png-310.5kB

2 相關工作

  • 該部分從Part Localization和Feature Representation兩個方面介紹過去的工作。有興趣的可以看原文,這裏不再贅述了。

3 學習Part Detectors

本章開始出現了大量新奇的方法,因此可能有較多不易理解的地方,博主也沒能做到完全理解。在此就將我所看懂的說一下,希望能夠對大家有幫助,如果看不懂,建議對着此博客看原文。
  • 本章介紹瞭如何訓練一個能夠自動發現object/part的discriminative detectors。作者的方法分爲三步走:初始化正樣本,正則化檢測器的訓練,和檢測器選擇。

3.1 Picking Filters:初始化正樣本

  • 假設將一組輸入圖片剪成一堆同尺寸的patch,如何在沒有標籤的情況下找出那些含有前景關鍵信息的patch?這種無監督聚類的任務,一般都是通過k-means或template matching實現,但它們難以返回很好的cluster,而且一個cluster裏面的patch也不一定在視覺上相似。
  • 爲了解決上面的問題,作者提出了一種挑選策略,它是基於CNN網絡中濾波器的響應來選擇那些一致和有區別的patch的。關鍵點在於CNN不同層對不同特定的圖案敏感:例如淺層的通常對邊緣連接、拐角等有相應,而深層則對一些特定圖案有響應,這些“特定圖案”很可能就包含鳥類嘴、軀幹、腳等信息。爲了尋找那些對關鍵信息有響應的濾波器,作者用以下方法進行挑選:
    • 首先,假設你的手頭上有數百、數千張鳥類圖像。對所有圖像都進行一遍selective search,生成很多region proposals。從中隨機選取1百萬張,每張圖都稱之爲patch。
    • 每個patch都縮放到107*107,送入網絡。由於網絡中有卷積、池化等操作,最後第四個卷積層的輸出大小隻有1*1(但還是有64個通道)。換句話說,每個patch生成了64個值。
    • 將這麼多圖像這麼多通道的值進行排序,然後選出前10k個最大的(響應最高的),然後再反過來看看這些值(或者說響應)對應的是哪個通道。
    • 算一算64個通道每個通道被前10k個響應“選中”了多少次,於是就有了Figure3的柱狀圖。從圖中可以看出,高頻響應的通道數很少很少,前5%的通道包含了90%的響應。作者將這些通道稱作distinctive filters,它們對一些特定圖案響應明顯。在文章中,作者選擇包含了90%的響應的通道作爲distinctive filters(也就是前5%的通道),然後對於每個distinctive filters,選擇前100個響應高的patch作爲初始正樣本。
      image.png-50kB
  • 現在回想一下上面的步驟,其實還是有一定道理的。想想看,在那麼多張patch裏面,前景(也就是鳥)的頭、眼睛、軀幹、腿等部分的圖案差不多都是一致的,而相比之下背景就比較混亂。需要注意的是,雖然含有前景的圖像比不含前景的圖像少,但是不含前景的圖像中圖案一致的部分太少了,而前景的圖案基本都一樣。在經過CNN輸出後,如果有的濾波器通道已經被訓練爲對鳥類局部區域敏感,那麼多patch跑一遍(這裏面有鳥類部分的比例相當大),肯定會有某些通道響應次數特別高,這些通道就是我們需要的distinctive filters。高響應次數的通道很少,也說明CNN對一個patch的響應本身就是很稀疏的,一個patch可能只有兩三個通道相應比較高。在反觀背景,由於不同圖片的背景都不大一樣,有的是樹上有的是天空,所以那些響應次數相對不高,且分佈均勻的,很可能都是對背景等雜物敏感的通道了。
  • 扯了這麼多,最後總結一下,這一步成功地找出了一批正樣本(即含有前景的patch),還順便爲你挑選好了一些濾波器中有用的通道,稱之爲distinctive filters。

3.2 正則化的檢測器訓練

  • 上一步得到的正樣本還不夠好,patch還是出現了很多無用的背景(見Figure4),爲了進一步提高檢測正樣本的質量,作者通過優化一個SVM分類器來學習對應的檢測器。由於負樣本的數量遠大於正樣本,因此採用standard hard negative mining方法,可以實現快速收斂。
    image.png-405.5kB
  • 作者用迭代的方式訓練SVM。在每輪迭代中,前10%的由上一輪檢測器生成的patch作爲正樣本(按照這個意思可能其他的都是負樣本了)。一直執行這個訓練可能會出現對初始樣本過擬合的問題。作者選擇的解決方案是將訓練集隨機分成兩組,一個作爲訓練集,一個作爲驗證集,並且在收斂時互相交換。
  • 除此之外,還有一個問題就是:分類效果最好的檢測器總是鎖定幾個容易檢測的子類,而不能從其他大多數子類中發現它們對應的正樣本。爲了解決這個問題,作者在每輪訓練中都使用正則化損失來挖掘每個目錄中的正樣本。具體的正則化過程就不詳述了(博主也沒看明白),總之正則化項突出了得分高的patch,而屏蔽得分低的patch。正則化項有兩個好處:其一是使檢測器發現更多不同的正樣本,其二是避免了在一個不可靠的正樣本上過擬合,轉而關注更可靠的正樣本(focusing on the more reliable positives)。該部分的完整算法見下圖:
    image.png-59.9kB

3.3 檢測器選擇

  • 3.2的算法會生成數十個檢測器(爲什麼是好幾個??!!),但不保證其中每個都能準確識別圖像。作者將帶標籤的訓練樣本分成訓練集和驗證集,“classification is performed based on the top scored region”。最後拋棄識別率低於40%的檢測器,留下來的只有幾個(<10)。

3.4 小結

  • 本章的內容實在太多了,其中提出的很多方法個人在之前從未見過,而且有很多細節也不太明白。先在此總結一下圖案檢測器的訓練全過程,理清一下思路:
    • 首先,找到CNN中哪些通道的濾波器對特定圖案響應明顯,這些被選中的濾波器稱作distinctive filters。再根據這些distinctive filters的響應大小選出響應最大的前100個patch作爲初始正樣本;
    • 接着,根據這些初始正樣本,結合SVM來訓練檢測器。其中正則化項和hard negative mining的使用增加了正樣本的多樣性和穩定性。最後,生成了數十個檢測器;
    • 用帶標籤的訓練樣本測試檢測器,篩選出前幾個識別準確率最高的檢測器。

4 Bag of Parts Image Representation

  • 得到上一章生成的檢測器後,我們就可以用這些檢測器從圖片中檢測到相應的部件。一種常用的部件表達方式是提取倒數第二個全連接層的特性,但此方法在細粒度識別中有兩個缺點:帶進了大量背景信息,以及可能會丟失關鍵細節。於是作者提出提出一個新方法,通過計算part saliency map以及用SWFV池化CNN特徵來找到關鍵的識別信息。

5 實驗

image.png-97kB
image.png-54.3kB

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章