论文阅读(4)--Part-Stacked CNN for Fine-Grained Visual Categorization
這篇文章是來自悉尼科技大學Shaoli Huang等人的工作,與前兩篇文章的出發點類似,本篇文章也是在Parts上尋找Fine-Grained的線索,但與前兩篇文章相比,在框架中人工的參與更少。同其它Fine-Grained分類任務相似,這篇文章也采用兩步走,即object parts localization (where pathway)和classification (what pathway),值得一提的是在part定位過程中,利用了FCN(Fully Convolutional Network)。
論文提出的新方法是既可以得到不錯的分類準確率,也能提供一個可以解釋得了的模型,并且效率也更加高,非常適用于實際應用中。
下面是方法提出的網絡結構的示意圖:
接下來會介紹該方法的實現細節。
Part-Stacked CNN
論文將提出的新的CNN結構命名為Part-Stacked CNN,這個網絡結構分為兩個子網絡,分別是定位網絡(Localization Network)和分類網絡(Classification Network)。采用的是Caffe框架和經典的AlexNet網絡結構作為整個網絡的基本結構。
作者提出與基于部件的R-CNN相比,一個最大不同點是,從定位網絡到分類網絡的一個信息轉換運算,也就是使用定位網絡中得到的部件位置進行分類的操作,是直接在數據的前向傳播過程中直接使用在第五個卷積層輸出的特征圖上(A unique design in our architecture is that the message transferring operation from the localization network to the classification network, i.e. using detected part locations to perform part-based classification, is conducted directly on the conv5 output feature maps within the process of data forwarding.)。
1. Localization Network
定位網絡的整體結構如下圖所示:
定位網絡主要目的是檢測到物體部件的位置,論文是使用了最簡單的部件標注–每個部件中心位置標注的二維關鍵點。這里假設M表示數據集中物體部件標簽的數量。然后采用全卷積網絡(fully convolutional network,FCN)來生成密集的特征圖輸出。這里使用FCN的理由給出了三點:
1)FCN得到的特征圖輸出可以直接作為部件定位的結果用于分類網絡;
2)FCN可以同時獲取多個物件部件的結果;
3)FCN在學習和預測階段都非常高效。
1.1 Learning階段
由上圖可以知道,定位網絡最終的輸出是一個帶有M個位置點的h×w的特征圖。定位網絡的前5層跟經典的AlexNet網絡結構一樣,然后在第五個卷積層后面加一個卷積核大小是1×1,輸出是512的第六個卷積層 conv6,接著就是卷積核大小一樣,輸出是 M+1的 conv7來實現分類,這里M+1是加上背景。
這里一個實際問題是需要決定FCN的輸入圖片尺寸以及網絡的深度。一般來說,越深的層可以生成更好的定位結果,但是它們的感受野(receptive fields)大小也要大過前面的網絡層,比如,CaffeNet(也就是指AlexNet)中,conv5 的感受野是 163×163,而輸入圖片的尺寸是227×227,這個感受野的尺寸會太大不能模型化一個物體的部件。因此,論文提出了一個簡單的方法——上采樣輸入圖片,這樣后面深層的感受野是固定尺寸的,那么相對于變大的輸入圖片就變得沒有那么大了。
因此,定位網絡的輸入圖片是一個使用bounding-box裁剪的,將尺寸調整成454×454大小的彩色圖片。
1.2 Inference 階段
學習階段通過FCN得到的是輸出結果是M+1個尺寸為27×27的特定部位的熱度圖( (M +1) part-specific heat maps in the
size of 27 × 27),接著,會對這個輸出結果使用一個高斯核進行高斯濾波來去噪,最后得到最終的輸出結果是帶有M個位置點的h×w的特征圖。
在這個階段,會設定一個閾值,用來判斷一張圖片中是否含有某個部件,這里使用FCN層的conv7 的softmax函數輸出結果與高斯核的計算結果來與設定的閾值進行判斷,如果低于閾值,則認為這張圖片是缺乏這個部件。
2. Classification network
分類網絡使用兩個輸入流結構的方法,分別是Part Stream和Object Stream,然后再使用一個包含三個全連接層的子網絡作為一個物體分類器。
2.1 Part Stream
Part Stream如作者所說,是其提出的網絡PS-CNN結構的核心。在之前的如R-CNN論文中是訓練一組部件CNNs,每個CNN專門訓練一個部件,這個方法對于擁有多個部件的數據庫來說就會需要耗費很多時間和非常大的內存使用量。
因此,論文采用兩個策略來提高效率:
1)模型參數的共享。也就是對于前面5個卷積層的參數在所有物體部件中是共享的,這可以減少參數從而降低過擬合的風險;
2)計算量共享策略。這個目的是在卷積層階段的所有部件的特征提取過程只需要進行一次。
在特征提取完畢后,每個部件都會分別通過一個part crop layer進行裁剪從而得到一個合適尺寸大小的feature map進入后面的三個全連接層,這里是因為其輸入是一個454 × 454尺寸大小,而在Object Stream中輸入圖片只是227 × 227,所以需要調整尺寸大小。
這里的part crop layer的裁剪是提取每個檢測到的部件位置的領域,論文中是提取一個6×6大小的領域,從原來大小為27×27的conv5 的特征圖中提取。
2.2 Object Stream
這一步主要是利用已有的bounding-box的標簽來提取物體級別的語義信息,使用的也是經典的AlexNet,然后使用pool 5層的輸出–6×6大小的特征圖。
2.3 Dimension reduction and fully connected layers.
完成上述兩個輸入流的網絡,后面接著一個3個全連接層的深度神經網絡(DNN),這里作為第一個全連接層的fc6就相當于一個部件連接層,因為其輸入都是來自Part Stream和Object Stream的輸出結果,但是這里所需要的內存會比原本的AlexNet網絡中的fc6要多出M+1倍。
為了降低內存的使用,這里在Part Stream增加一個卷積核大小為1×1的卷積層 conv5_1,將原本輸出是256降到32個,但是這里沒有使用標準的PCA方法,因為效果會很差,作者是訓練一個輔助的CNN來初始化這個增加的卷積層的權值。
小結
論文最后是通過4個指標來判斷其方法的性能的,分別是定位準確率、分類準確率、效率以及模型的可解釋性。通過實驗結果可以看到,Part_Stacked CNN方法的性能是要優于當前大部分的方法,而且滿足了實時性,非常適合實際的應用。
最近看的3篇論文,包括這篇論文在內,關注的重點都是Part,也就是部件或者說部位,并且都是希望盡可能減少人工的參與,利用實驗用的數據庫已有的部件標注甚至不需要標注,只需要類標簽,方法都是主要分為兩步,定位或者檢測網絡,以及分類網絡,同時還將這兩個網絡都整合成在一起,可以同時訓練,而不是分別單獨訓練幾個子網絡,最后聯合特征,使用SVM來進行分類,而且三個方法的性能都比當前絕大數方法要有所提高。
這說明他們的思路也是正確的,自動檢測和定位部件,然后用到分類中,所有部件的訓練都整合在一個大網絡中,這樣分類誤差可以在反向傳播中傳回給所有部件,并讓它們同時更新權值。
看起來,目前在精確分類方面,利用部位是一個趨勢,并且很多工作的結果也表明這個思路是正確的,的確可以取得不錯的性能,同時,也應該向無監督學習靠近,即盡可能自動檢測部件,而不需要過多的部件標注。不過,現在這方面的工作也挺多了,要想到一個更好的突破點,的確挺難啊,還是要多看幾篇論文,看看能否得到更多的想法吧。
總結
以上是生活随笔為你收集整理的论文阅读(4)--Part-Stacked CNN for Fine-Grained Visual Categorization的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: unity text不能刷新_Unity
- 下一篇: 这35个Java代码优化细节,你用了吗?