單目標(biāo)跟蹤方法-SiamMask
? ?作者:? 晟? 沚?? ? ? ? ??
早期的跟蹤算法都是坐標(biāo)軸對(duì)齊的的矩形框。但隨著跟蹤精度的不斷提升,數(shù)據(jù)集的難度在不斷提升,在VOT2015時(shí)即提出使用旋轉(zhuǎn)矩形框來(lái)作為標(biāo)記。在VOT2016的時(shí)候提出自動(dòng)的通過(guò)mask來(lái)生成旋轉(zhuǎn)框的方法。更為本質(zhì)的,我們會(huì)發(fā)現(xiàn),這個(gè)旋轉(zhuǎn)的矩形框?qū)嶋H上就是mask的一種近似。我們所要預(yù)測(cè)的實(shí)際上就是目標(biāo)物體的mask。利用mask才能得到精度本身的上界。
設(shè)計(jì)理念
本文初始化簡(jiǎn)化為視頻跟蹤的box輸入即可,同時(shí)得到box和mask兩個(gè)輸出。
主體網(wǎng)絡(luò)思想和Siam系列較為類似,首先,通過(guò)初始幀框定需要跟蹤的物體圖像(記作template),用作后續(xù)幀(記作search,即搜索區(qū)域)的檢索依據(jù);
其次,將template和search同時(shí)輸入Siameses Net,輸出兩個(gè)feature map,大小兩個(gè)feature map做互相關(guān)(cross-correlated),得到RoW的feature map;
接著,從上面輸出的feature map再輸入一個(gè)簡(jiǎn)單的兩層(1,1)卷積核的網(wǎng)絡(luò)得到Two-branch或者Three-branch輸出,各個(gè)branch主要是輸出的通道數(shù)不一樣,進(jìn)而影響到任務(wù)的不一樣。
最后,mask可以有兩種方法生成,一個(gè)是base path生成方式,另一個(gè)是通過(guò)refine path生成。
網(wǎng)絡(luò)結(jié)構(gòu)
先講一下Siamese網(wǎng)絡(luò)
主要是計(jì)算兩個(gè)輸入的相似度,。左右兩個(gè)神經(jīng)網(wǎng)絡(luò)分別將輸入轉(zhuǎn)換成一個(gè)"向量",在新的空間中,通過(guò)判斷cosine距離就能得到相似度。
?
1. Mask分支(類別無(wú)關(guān)的半監(jiān)督分割)
????在siamese網(wǎng)絡(luò)架構(gòu)中額外增加一個(gè)Mask分支即可,但是相較于預(yù)測(cè)score和box,mask的預(yù)測(cè)會(huì)更為困難。我們這里使用的表述方法,是利用一個(gè)vector來(lái)編碼一個(gè)RoW的mask,其實(shí)是在channel上面對(duì)patch的mask進(jìn)行編碼,使用一個(gè)logistic二分類監(jiān)督。這使得每個(gè)prediction位置具有非常高的輸出維度(63*63), 我們通過(guò)depthwise的卷積后級(jí)聯(lián)1x1卷積來(lái)升維來(lái)實(shí)現(xiàn)高效運(yùn)行。這樣即構(gòu)成了我們的主要模型框架。
2. SiamMask還應(yīng)用了DepthwiseCross-correlation的方式,解決SiamRPN非對(duì)稱的問(wèn)題,并使用ResNet-50作為網(wǎng)絡(luò)主體加深網(wǎng)絡(luò)深度,以獲得更多層次的特征。

3. 生成mask:
1)?????直接預(yù)測(cè)的Mask分支的精度并不太高。
得到一根柱子(RoW),維度是(1,1,63*63);
?將這根RoW resize為(63, 63)的矩陣,同時(shí)對(duì)這個(gè)矩陣做sigmoid,講清楚點(diǎn)就是63*63個(gè)二值classifier,用于判斷這個(gè)矩陣的某一個(gè)值是否屬于mask;mask矩陣,矩陣是經(jīng)過(guò)sigmoid后的0-1的值,然后我們將這個(gè)mask 映射回原圖。映射方式叫做仿射變換,實(shí)現(xiàn)的話關(guān)注下cv2.warpAffine函數(shù);
通過(guò)預(yù)設(shè)的一個(gè)分割閾值,論文用0.5,但是代碼用的0.35,去過(guò)濾5-3得到的sigmoid后的以及仿射變換后的mask,這樣就得到需要的目標(biāo)分割
2)???? Refine Module用來(lái)提升分割的精度,refine module采用top-down的結(jié)構(gòu),通過(guò)級(jí)聯(lián)Refine的形式逐級(jí)將低語(yǔ)義信息高分辨率的feature map和上采樣后的mask進(jìn)行融合,最終得到同時(shí)擁有高語(yǔ)義信息和高分辨率的mask。
和256的RoW有關(guān),只保留三分支中的score分支,將所有anchor的score做一系列操作,如乘上size 懲罰項(xiàng)(size_penalty),加上全圖位置得分,從高到小的排列,選擇最大值。
根據(jù)最大值的index,通過(guò)np.unravel_index轉(zhuǎn)換得到feature map上的坐標(biāo),即可在(17,17, 256)feature map中得到一根RoW,傳入refine path;傳入refine path的是(1,1,256),即size為(1,1),channel為256的feature map
第一步就是要做deconv(反卷積),得到(15,15, 32)的feature map
和search經(jīng)過(guò)res50保存下來(lái)的featuremap們進(jìn)行相加耦合,template的feature map們需要經(jīng)過(guò)兩層模型的降維達(dá)到和RoW經(jīng)過(guò)refine path的相同channel數(shù)和size,就可以相加
(127, 127, 4)的模型在經(jīng)過(guò)一個(gè)(3, 3,4,1)卷積層得到(127,127,1)的mask
對(duì)于輸出mask轉(zhuǎn)換為box,有多重選擇,我們使用了較為容易生成的最小外包矩形(MBR)
訓(xùn)練過(guò)程
1. ?網(wǎng)絡(luò)結(jié)構(gòu):Resnet-50,直到第4stage,正常模型會(huì)得到一個(gè)channel為1024的featuremap,但本網(wǎng)絡(luò)得到的channel是256的feature map,原因是還進(jìn)行了一層的下采樣。
2. ?使用了空洞卷積(dilated convolution),以增加感受野,增加感受野可以更好的得到目標(biāo)mask。
3.??采用了ImageNet-1k的預(yù)訓(xùn)練模型,使用SGD優(yōu)化器,前5個(gè)epoch做了warm up( 學(xué)習(xí)率10^-3?),接著在15個(gè)epoch內(nèi)逐漸降到?10^-4
4. ??數(shù)據(jù)集不止采用了youtube-VOS(像素級(jí)),還有COCO以及ImageNet-VID。
離線訓(xùn)練
需要像素級(jí)別的標(biāo)注來(lái)計(jì)算分割loss
訓(xùn)練圖片和mask圖片都是物體或mask 的size小于(127,127),物體和mask各自居于圖片中心,且訓(xùn)練圖片和mask圖片size都為511的大小。注:511不關(guān)鍵,選其他值也一樣,關(guān)鍵是要能夠方便crop出訓(xùn)練圖片和訓(xùn)練mask label。
預(yù)測(cè)過(guò)程
1. 梳理下推理流程:圖片被resize到(256,256,3)的大小-->輸入模型-->2-branch輸出還是3-branch輸出-->各自去生成mask。
2. 2-branch的時(shí)候,我們會(huì)選擇最大的score分的那根RoW,這個(gè)時(shí)候要注意,一共有兩根RoW,一個(gè)是前面層的(1,1,256),一個(gè)是(1,1,63*63),如果要經(jīng)過(guò)refine生成mask,選前面那個(gè)Row(1,1,256),如果想base生成,則選擇后面那個(gè)RoW。同理3-branch亦然,只不過(guò)score變成了cls分類最高值among all anchors。
3. 推理階段,會(huì)根據(jù)上一幀的bbox位置來(lái)確定當(dāng)前幀的search 區(qū)域,如果是3-branch,直接采用置信度最高的bbox,如果是2-branch,則需要用mask的RectBoundingBox獲取。
?
生成template
template不是簡(jiǎn)單的框定ROI然后resize為(127,127,3)。他需要將框定的框做一個(gè)大約2倍放大(假設(shè)框定框的寬高分別為w、h,則需要放大到的size計(jì)算公式為:
?

然后我們需要以物體為中心, sz 為寬高,截取一個(gè)正方體的物體出來(lái),然后再resize為(127,127,3),這樣得到template, 從下面圖可以看出來(lái),有些時(shí)候框不一定都在圖里面,所以框到圖外的部分要做padding,padding值為圖片各自通道的均值(shape為(1,3))。

生成search
這里需要注意的一點(diǎn)是search同樣不是直接把原圖resize到(255,255,3)丟進(jìn)模型里,他依靠template的物體在原圖的位置,以物體為中心,約4倍物體size為寬高,進(jìn)行截取,截取方式同template,只是需要把截取范圍擴(kuò)大1倍,同樣圖外的部分要做padding,padding值為圖片各通道均值,resize為(255,255,3)就可以丟進(jìn)模型啦。
ok,template和search在推理階段的生成就講完啦,我們稍微梳理下:search的截取范圍約是template的2倍,template的截取范圍又約是框定框的2倍。
之所以這么做的原因是很多時(shí)候幀與幀之間間隔時(shí)間比較短,理論上應(yīng)該在上一幀的附近,這個(gè)時(shí)候我們也可以回想到我們物體訓(xùn)練的時(shí)候,search和template的選擇也是盡可能在一定時(shí)域范圍內(nèi)去選取的。然后template的截取是物體實(shí)際大小的2倍,小七初步推測(cè)是為了盡可能完善框定框外的圖片區(qū)域一起放進(jìn)template去search做搜索。
性能
視頻跟蹤領(lǐng)域(VOT),VOT2016和VOT2018數(shù)據(jù)集上的性能,本文的方法已經(jīng)到達(dá)到SOTA的結(jié)果,同時(shí)保持了55fps的超實(shí)時(shí)的性能表現(xiàn)。
?
視頻目標(biāo)分割領(lǐng)域(VOS),本文取得了當(dāng)前最快的速度。在DAVIS2017和Youtube-VOS上,本文和最近發(fā)表的較為快速的算法對(duì)比, 本文的算法可以取得可比較的分割精度,同時(shí)速度快了近一個(gè)數(shù)量級(jí)。對(duì)比經(jīng)典的OSVOS,本文的算法快了近三個(gè)數(shù)量級(jí),使得視頻目標(biāo)分割可以得到實(shí)際使用。

end
機(jī)器學(xué)習(xí)算法工程師
? ? ? ? ? ? ? ? ? ? ? ? ? ? 一個(gè)用心的公眾號(hào)
? ? ? ? ??
進(jìn)群,學(xué)習(xí),得幫助
你的關(guān)注,我們的熱度,
我們一定給你學(xué)習(xí)最大的幫助
