本文綜合介紹了基於深度卷積神經網絡的小樣本分割相關工作,並整理了方法分類、數據集、評測指標、實驗結果等內容。
深度卷積神經網絡在圖像分類、目標檢測、語義分割等許多視覺理解任務上都取得了重大突破。一個關鍵的原因是大規模數據集的可用性,比如 ImageNet,這些數據集支持對深度模型的培訓。然而,數據標記是昂貴的,特別是對於密集的預測任務,如語義分割和實例分割。此外,在對模型進行訓練之後,很難將模型應用於新類的預測。與機器學習算法不同的是,人類只看到幾個例子就能很容易地從圖像中分割出一個新概念。人類和機器學習算法之間的差距激發了對小樣本學習的研究,其目的是學習一個模型,可以很好地推廣到具有稀缺標記的訓練數據的新類別。小樣本分割的終極目的是利用支持集中的 K 個訓練圖像對來「學習」一個模型,使得該模型能對訓練圖像中出現的類別的新樣本實現分割。
元學習解決的是學習如何學習的問題。元學習的思想是學習「學習(訓練)」過程。主要有基於記憶 Memory 的方法、基於預測梯度的方法、利用 Attention 注意力機制的方法、借鑑 LSTM 的方法、面向 RL 的 Meta Learning 方法、利用 WaveNet 的方法、預測 Loss 的方法等等等。小樣本學習是元學習在監督學習領域的應用,Few-shot Learning模型大致可分為三類:Mode Based,Metric Based 和 Optimization Based。其中 Model Based 方法旨在通過模型結構的設計快速在少量樣本上更新參數,直接建立輸入 x 和預測值 P 的映射函數;Metric Based 方法通過度量 batch 集中的樣本和 support 集中樣本的距離,藉助最近鄰的思想完成分類。Optimization Based 方法認為普通的梯度下降方法難以在 few-shot 場景下擬合,因此通過調整優化方法來完成小樣本分類的任務。
語義分割就是按照「語義」給圖像上目標類別中的每一點打一個標籤,使得不同種類的東西在圖像上被區分開來。可以理解成像素級別的分類任務。輸入:(H*W*3)正常的圖片;輸出:(H*W*class)可以看為圖片上每個點的 one-hot 表示,每一個 channel 對應一個 class,對每一個 pixel 位置,都有 class 數目個 channel,每個 channel 的值對應那個像素屬於該 class 的預測概率。FCN 是語義分割的開山之作,主要特色有兩點:全連接層換成卷積層,不同尺度的信息融合 FCN-8S,16s,32s。U-net 用於解決小樣本的簡單問題分割,比如醫療影片的分割。它遵循的基本原理與 FCN 一樣:1. Encoder-Decoder 結構:前半部分為多層卷積池化,不斷擴大感受野,用於提取特徵。後半部分上採樣回復圖片尺寸。2. 更豐富的信息融合:如灰色剪頭,更多的前後層之間的信息融合。這裡是把前面層的輸出和後面層 concat (串聯)到一起,區別於 FCN 的逐元素加和。不同 Feature map 串聯到一起後,後面接卷積層,可以讓卷積核在 channel 上自己做出選擇。注意的是,在串聯之前,需要把前層的 feature map crop 到和後層一樣的大小。SegNet 和 U-net 在結構上其實大同小異,都是編碼-解碼結果。區別在於,SegNet 沒有直接融合不同尺度的層的信息,為了解決信息丟失的問題,SegNet 使用了帶有坐標(index)的池化。在 Max pooling 時,選擇最大像素的同時,記錄下該像素在 Feature map 的位置(左圖)。在反池化的時候,根據記錄的坐標,把最大值復原到原來對應的位置,其他的位置補零(右圖)。後面的卷積可以把 0 的元素給填上。這樣一來,就解決了由於多次池化造成的位置信息的丟失。Deeplab V1 不同於之前的思路,他的特色有兩點:1.由於 Pooling-Upsample 會丟失位置信息而且多層上下採樣開銷較大,把控制感受野大小的方法化成:帶孔卷積(Atrous conv)。2. 加入 CRF(條件隨機場),利用像素之間的關聯信息:相鄰的像素,或者顏色相近的像素有更大的可能屬於同一個 class。PSPnet:前面的不同 level 的信息融合都是融合淺層和後層的 Feature Map,因為後層的感受野大,語義特徵強,淺層的感受野小,局部特徵明顯且位置信息豐富。PSPnet 則使用了空間金字塔池化,得到一組感受野大小不同的 feature map,將這些感受野不同的 map concat 到一起,完成多層次的語義特徵融合。Deeplab V2 在 v1 的基礎上做出了改進,引入了 ASPP(Atrous Spatial Pyramid Pooling)的結構,如上圖所示。我們注意到,Deeplab v1使用帶孔卷積擴大感受野之後,沒有融合不同層之間的信息。ASPP 層就是為了融合不同級別的語義信息:選擇不同擴張率的帶孔卷積去處理 Feature Map,由於感受野不同,得到的信息的 Level 也就不同,ASPP 層把這些不同層級的 feature map concat 到一起,進行信息融合。Deeplab v3 在原有基礎上的改動是:1. 改進了 ASPP 模塊。2.引入 Resnet Block。3. 丟棄 CRF。新的 ASPP 模塊:1. 加入了 Batch Norm。2. 加入特徵的全局平均池化(在擴張率很大的情況下,有效權重會變小)。全局平均池化的加入是對全局特徵的強調、加強。在舊的 ASPP 模塊中:我們以為在擴張率足夠大的時候,感受野足夠大,所以獲得的特徵傾向於全局特徵。但實際上,擴張率過大的情況下,Atrous conv 出現了「權值退化」的問題,感受野過大,都已經擴展到了圖像外面,大多數的權重都和圖像外圍的 zero padding 進行了點乘,這樣並沒有獲取圖像中的信息。有效的權值個數很少,往往就是 1。於是我們加了全局平均池化,強行利用全局信息。Deeplab v3+可以看成是把 Deeplab v3 作為編碼器(上半部分)。後面再進行解碼,並且在解碼的過程中在此運用了不同層級特徵的融合。此外,在 encoder 部分加入了 Xception 的結構減少了參數量,提高運行速率。
motivition 就是學習一個 one-shot 的分割模型,首次提出雙分支的網絡用於 few-shot segmentation,條件分支用 VGG 提取特徵,生成權重(w,b),分割分支用 FCN-32s 結構對 query image 進行特徵提取,將其與條件分支所得參數進行點乘再通過 σ 函數得到分割結果。得到一個分割圖,上採樣到圖像大小,利用某個閾值產生分割的二值圖。輸出的時候,是為了參數量與分割分支的特徵圖的通道數相對應,採用 weight hashing 的策略,將輸出的 1000 維向量映射為 4097 維(w:4096, b:1),這種映射機制是建模成固定權重參數的全連接層來實現的。
文章的主要比較驚奇的一點是僅對原始圖像做一些稀疏的標註(目標位置上點幾個關鍵點,背景位置上點幾個關鍵點)就能夠實現對目標的像素級的分割。網絡結構和 BMVC 那篇 paper 設置類似,也是採用雙分支結構,將標註信息與原始圖像 concate 後輸入 conditioning branch 得到輸入圖像的 embedding。利用 segmentation branch 對 qurey image 進行特徵提取,並將結果與 conditioning branch 得到的 embedding 進行 concate,再進行像素級分割。
方法:在 task 流中,不斷地更新每個類別的原型。
網絡包含一個主幹網絡 Stem(代表的是 VGG-16 的前 3 個 Block)和兩個分支:Guidance Branch 和 Segmentation Branch,需要注意的是兩個分支共用了三個卷積塊 ,個人的理解是,如果兩個分支完全獨立,那麼 Guidance Branch 產生的指導就會一成不變;這就失去了意義,作者在論文最後的消融實驗中做了相關的分析與實驗;與 Segmentation Branch 產生交互後就可以在優化分割損失的同時對引導的特徵圖進行優化,使之匹配相應的真實 mask。網絡在訓練的時候加載了在 ILSVRC 數據集上預訓練的權重。
a. 提出使用 masked average pooling 來提取 support set 的中目標的表徵向量;b. 採用餘弦相似度來度量 query set 的表徵向量與 support set 的表徵向量之間距離,用於指導 query set 的分割;為什麼 masked average pooling 會有用?解釋如下:全卷積網絡(FCN)能夠保留輸入圖像的中每個像素相對位置;所以通過將二值 mask 與提取到的特徵圖相乘就可以完全保留目標的特徵信息,排除掉背景等無關類別的特徵。
利用了 prototypes 上的度量學習,無參數。提出 prototypes 對齊正則化,充分利用 support 的知識。
用同一個 backbone 來提取 support 和 query 的深度特徵,然後使用 masked average pooling 從 support 的特徵將不同的前景物體和背景嵌入不同的 prototypes 中,每個 prototype 表示對應的類別,這樣 query 圖像的每個的像素通過參考離它的嵌入表達最近的特定類的 prototype 來標記,得到 query 的預測 mask 後。訓練的時候,得到mask後,再將剛才提取的 query feature 和 mask 作為新的「support set」,將之前的 support set 作為新的「query set」,再用「support set」對「query set」做一波預測,然後再算一個 lossprototype 緊湊且魯棒的對每個語義類別進行表達;mask 標記那塊就是無參度量學習,通過和嵌入空間的逐像素匹配來執行分割
執行一個 prototype 對齊正則化,用 query 和他的 mask 建立新的 support,然後用這個來預測原始的 support set 的分割,實驗證明能鼓勵 query 的 prototype 對齊他們的 support 的 prototype,只有訓練的時候這麼做(反向再推一次,看看是否真的相似)
開發了一種新穎的雙分支密集比較模塊,該模塊有效地利用來自CNN的多級特徵表示來進行密集的特徵比較。提出迭代優化模塊,以迭代方式改進預測結果。迭代細化的能力可以推廣到具有少量鏡頭學習的看不見的類,以生成細粒度圖。採用注意機制有效地融合來自 k-shot 設置中的多個支持示例的信息,其優於單次結果的不可學習的融合方法。證明給定的支持集具有弱注釋,即邊界框,我們的模型仍然可以獲得與昂貴的像素級注釋支持集的結果相當的性能,這進一步減少了新類別對於少數鏡頭分割的標記工作量。
數據集介紹
評測指標介紹
IoU 就是每一個類別的交集與並集之比,而 mIoU 則是所有類別的平均 IoU。
結果陳列