核心思想
本文是對基於度量學習的小樣本學習算法進行改進。常見的度量學習算法通常利用一個嵌入式網絡對圖像進行特徵提取,然後利用一個線性分類器進行分類。在訓練過程中得到的線性分類器權重可以看作對應每個類別的權值(class weights),在測試時,就比較查詢圖像對應的特徵值與每個類別權值之間的相似性,並以此進行分類預測。二維圖像經過特徵提取後得到的特徵信息是高維的張量,因此通常需要壓縮維度,以便於計算相似性。常見的壓縮維度的方式有兩種:壓平(Flattening)或者池化(Pooling).
圖a所示的就是壓平操作,就是將原本爲維的張量,拉伸爲維的張量,其中。這一方法具有較高的區分能力,但是不具備空間不變性。圖b所示的是池化操作,利用全局平均池化將每個通道的特徵圖都壓縮爲一個值,得到一個長度爲的特徵向量。這一方式能夠顯著降低維度,並且具有空間不變性,但區分能力較差。本文提出一種稱之爲稠密分類(Dense classificatio)的方法,對於提取到的特徵圖不進行維度壓縮,而是對空間中的每一點對應的特徵向量進行分類預測。具體而言,假設特徵提取網絡最後一層輸出了維度爲的張量,那可以將其拆分成個長度爲的特徵向量,然後分別計算類別權重與之間的距離,對每個空間上的點都進行類別預測,如下圖所示。
在元測試階段,對於新類別的樣本,通常是對已訓練好的特徵提取網絡進行微調訓練,以滿足新類別樣本特徵表達的需要。在低層級的網絡中特徵信息的通用性較強,對於不同類別的樣本都能提取到有用的信息,而隨着網絡的加深,在高層級的網絡中,特徵信息就具備較強的區分度,而不具備通用性了。因此本文提出一種稱爲“神經移植”(Neural Implants)的方法,針對高層級的特徵提取網絡進行改進,改進的結構如下圖所示
如圖所示,低層級的特徵提取網絡保持不變,在高層級的卷積層上增加一個新的分支,與原有的卷積層構成一個平行的結構。凍結原本高層級網絡的權重,使其不再更新,以保留對於原有類別的特徵提取能力,然後對於新類別的樣本,其特徵信息會分別經過兩個分支網絡,並且將原本高層級網絡提取的特徵圖,與新添加的網絡提取的特徵圖級聯起來,作爲新添加網絡分支下一層的輸入。最後得到新類別樣本對應的特徵信息。這一方法既消除了使用深層網絡出現過擬合的問題,又提高了特徵提取網絡對於新類別樣本的表徵能力。
實現過程
網絡結構
嵌入式特徵提取網絡採用ResNet-12
損失函數
如上文所述,計算損失要對空間中的每個點分別計算再求和,如下式
其中
表示scaled cosine similarity,計算過程如下
其中,,表示Frobenius內積,表示放縮係數。
訓練策略
在元測試過程中,每次只選擇一個樣本作爲查詢樣本,其餘樣本都作爲支持集,類似《Few-Shot Learning with Localization in Realistic Settings》提出的留一交叉驗證法
創新點
- 提出了稠密分類的方法,對空間中的每個點都進行分類預測,並計算損失,提高了分類的細粒度
- 提出了神經移植的方法,保留已訓練好的網絡參數,增加新的網絡分支用於處理新的類別樣本
算法評價
作者針對原有的小樣本學習算法提出兩點改進:稠密分類與神經移植。首先要說明的是,這兩點改進都是針對元測試階段,也就是網絡已經在一個數據集上訓練好了,目前要針對新的類別,且每個類別僅包含少量樣本的情況進行微調訓練。稠密分類的思想與DN4算法中提到的局部描述子的概念非常相似,都是通過增加分類的細粒度,不在圖片級別上進行類別預測,而在像素(或超像素)級別上進行類別預測,如果細粒度進一步提高到對原圖中每個像素進行類別預測,那麼就成爲語義分割任務了。而神經移植的思想有點類似於遷移學習的一些方法,只不過是在保留原有網絡的基礎上,對網絡結構進行了“拓寬”,但是新增加網絡分支的參數初始化怎麼處理呢?如果是從隨機狀態開始訓練,少量的數據集是否足夠呢?
如果大家對於深度學習與計算機視覺領域感興趣,希望獲得更多的知識分享與最新的論文解讀,歡迎關注我的個人公衆號“深視”。