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