標注圖像中的物體掩碼是一項非常耗時耗力的工作(人工標注一個物體平均需要20到30秒),但在眾多計算機視覺應用中(例如,自動駕駛、醫學影像),它又是不可或缺的。而現有的自動標注軟件,大多基于像素,因此不夠智能,特別是在顏色接近的相鄰物體上表現不好。有鑒于此,多倫多大學的研究人員Lluís Castrejón等提出了Polygon-RNN標注系統,獲CVPR 2017最佳論文提名。多倫多大學的研究人員David Acuna、Huan Ling、 Amlan Kar等又在CVPR 2018提交了PolygonRNN++,Polygon-RNN的改進版本,并于近日發布了PyTorch實現。
Polygon-RNN++架構
Polygon-RNN整體架構如下圖所示:
和之前的Polygon-RNN類似,Polygon-RNN++使用了CNN(卷積神經網絡)提取圖像特征,然后使用RNN(循環神經網絡)解碼多邊形頂點。為了提高RNN的預測效果,加入了注意力機制(attention),同時使用評估網絡(evaluator network)從RNN提議的候選多邊形中選出最佳。最后使用門控圖神經網絡(Gated Graph Neural Network,GGNN)上采樣,以提高輸出分辨率。
CNN部分,借鑒了ResNet-50的做法,減少步長(stride),引入空洞卷積(dilation),從而在不降低單個神經元感受野(receptive field)的前提下,放大輸入特征映射。此外還引入了跳躍連接(skip connection),以便同時捕捉邊角等低層細節和高層語義信息。剩下的配置都是比較常規的,包括3x3卷積核、組歸一化(batch normalization)、ReLU、最大池化(max-pooling)等。
藍色張量傳給GNN,橙色張量傳給RNN
RNN部分,使用了雙層ConvLTSM(3x3核,64/16通道,每時步應用組歸一化),以保留空間信息、降低參數數量。網絡的輸出為(D x D) + 1元素的獨熱編碼。前D x D維表示可能的頂點位置(論文的試驗中D = 28),而最后一個維度標志多邊形的終點。
為了提升RNN部分的表現,加入了注意力機制。具體來說,在時步t,計算加權特征映射:
上式中,x為跳躍特征張量,h為隱藏狀態張量,f1、f2使用一個全連接層將h1,t、h2,t映射至RDxDx128。fatt累加輸入之和,通過一個全連接層將其映射至DxD。?為哈達瑪積(Hadamard product)。直觀地說,注意力機制使用之前的RNN隱藏狀態控制圖像特征映射中的特定位置,使RNN在下一時步僅僅關注相關信息。
另外,第一個頂點需要特別處理。因為,給定多邊形之前的頂點和一個隱式的方向,下一個頂點的位置總是確定的,除了第一個頂點。因此,研究人員增加了一個包含兩個DxD維網絡層的分支,讓第一層預測邊,第二層預測頂點。測試時,第一個頂點取樣自該分支的最后一層。
第一個頂點的選擇很關鍵,特別是在有遮擋的情況下。傳統的集束搜索基于對數概率,因此不適用于Polygon-RNN++(在遮擋邊界上的點一般在預測時會有很高的對數概率,減少了它被集束搜索移除的機會)。因此,Polygon-RNN++使用了一個由兩個3x3卷積層加上一個全連接層組成的評估網絡:
該評估網絡是單獨訓練的,通過訓練最小化均方誤差:
上式中,p為網絡的預測IoU,mvs和m分別為預測掩碼、實際掩碼。
在測試時,基于評分前K的第一個頂點預測通過經典集束搜索(對數概率,束寬為B)生成多邊形。對應K個第一個頂點,共有K個多邊形,然后讓評估網絡從中選出最優多邊形。在論文的試驗中,K = 5. 之所以首先使用集束搜索,而不是完全使用評估網絡,是因為后者會導致推理時間過長。在B = K = 1的設定下,結合集束搜索和評估網絡的配置,可以達到295ms每物體的速度(Titan XP)。
與人交互時,人工糾正會傳回模型,讓模型重新預測多邊形的剩余頂點。
如前所述,RNN輸出的D x D維的多邊形,D取28. 之所以不取更大的D,是為了避免超出內存的限制。為了增加最終的輸出分辨率,Polygon-RNN++使用了門控圖神經網絡進行上采樣,將頂點視作圖的節點,并在相鄰節點中間增加節點。
GGNN定義了一個傳播模型,將RNN推廣至任意圖,可以在每個節點上生成輸出前有效地傳播信息。
上式中,V為圖的節點集,xv為節點v的初始狀態,hvt為節點v在時步t的隱藏狀態。矩陣A ∈ R|V|x2N|V|決定節點如何互相傳遞信息,其中N表示邊的類型數。在試驗中使用了256維GRU,傳播步數T = 5。
節點v的輸出定義為:
f1和f2為MLP(多層感知器),試驗中的大小分別為256 x 256、256 x 15 x 15.
如前所述,CNN部分112 x 112 x 256的特征映射(藍色張量)傳給GGNN。在圖中的每個節點v周圍(拉伸后),提取一個S x S塊,得到向量xv,提供給GGNN。在傳播過程之后,預測節點v的輸出,即D' x D'空間網格上的位置。該網格以原位置(vx, vy)為參照,因此該預測任務其實是一個相對放置問題,并且可以視作分類問題,并基于交叉熵損失訓練。訓練的標準答案(ground truth)為RNN部分的輸出,如果預測和標準答案中的節點的差異超過閾值(試驗中為3格),則視為錯誤。
在試驗中,研究人員令S = 1,D' = 112(研究人員發現更大的D'不能改善結果)。
基于強化學習訓練
Polygon-RNN基于交叉熵訓練。然而,基于交叉熵訓練有兩大局限:
MLE過度懲罰了模型。比如,預測的頂點雖然不是實際多邊形的頂點,但在實際多邊形的邊上。
優化的測度和最終評估測度(例如IoU)大不一樣。
另外,訓練過程中傳入下一時步的是實際多邊形而不是模型預測,這可能引入偏差,導致訓練和測試的不匹配。
為了緩解這些問題,Polygon-RNN++只在初始階段使用MLE訓練,之后通過強化學習訓練。因為使用強化學習,IoU不可微不再是問題了。
在強化學習的語境下,Polygon-RNN++的RNN解碼器可以視作序列決策智能體。CNN和RNN架構的參數θ定義了選擇下一個頂點vt的策略pθ。在序列結束后,我們得到獎勵r = IoU(mask(vs, m))。因此,最大化獎勵的損失函數為:
相應地,損失函數的梯度為:
實踐中常采用蒙特卡洛采樣計算期望梯度。但是這一方法方差很大,而且在未經恰當地基于情境歸一化的情況下非常不穩定。因此,Polygon-RNN++采用了自我批判(self-critical)方法,使用模型的測試階段推理獎勵作為基線:
另外,為了控制模型探索的隨機性,Polygon-RNN++還在策略softmax中引入了溫度參數τ。試驗中,τ = 0.6.
試驗結果
下圖展示了Polygon-RNN++在Cityscapes數據集上的結果。Cityscapes包含2975/500/1525張訓練/驗證/測試圖像,共計8個語義分類。
可以看到,在各個分類上,Polygon-RNN++都超越了其他模型,并且高于其中表現最好的模型差不多10%的IoU。事實上,在汽車(cars)分類上,Polygon-RNN++(79.08)戰勝了人類(78.60)。而消融測試的結果也令人滿意。
另外,Polygon-RNN++對噪聲的魯棒性良好:
Polygon-RNN++在跨領域的數據集上表現同樣出色,這說明Polygon-RNN++的概括性很好。
-
cnn
+關注
關注
3文章
354瀏覽量
22667 -
pytorch
+關注
關注
2文章
809瀏覽量
13798
原文標題:Polygon-RNN++圖像分割數據集自動標注
文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
蠕蟲病毒特征碼自動提取原理與設計
井壁圖像上平面地質特征的自動提取
基于隱馬爾科夫模型和卷積神經網絡的圖像標注方法

基于特征交換的卷積神經網絡圖像分類算法

評論