論文閱讀|YOLACT: Real-time Instance Segmentation


概要

達到實時的實例分割模型:29.8mAP,33fps,單GPU。將實例分割分為兩個子任務:(1)生成一組針對全圖的原型mask(2)預測每一個實例的mask系數,然后線性組合原型和mask系數。不依賴於repooling,能得到高質量的mask,而且很快。

1573912419223

結構方法

整體結構不是特別復雜,backbone采用的是retinanet。backbone之后是兩個並行分支:一個是protonet,另一個是prediction head。然后將兩個分支的結果線性組合起來得到mask。

1573912507446

backbone采用ResNet-101-FPN,其中FPN的結構變為和retina相同,從P3到P7,相應的anchor的大小為[24, 48, 96, 192, 384]

首先是protonet,將backbone中的P3層特征抽取出來經過3個\(3\times3\)卷積,然后再upsampling + \(3\times3\)卷積變為原圖的四分之一大小,最后\(1\times1\)卷積降低通道數至k,k對應着prototypes的個數。這個prototypes實際上就是一些單通道的特征圖,只不過經過訓練后這些特征圖能對於目標產生不同的激活,每個prototype負責不同部位的激活,那么組合起來就能夠得到整個目標的激活。另外k也是可以變化的,不過實驗表明不同的k對於結果影響不大。

1573913212904

然后是mask系數。典型的基於anchor的目標檢測器有兩個輸出:分類數和邊框回歸量。這里又加了一個輸出mask系數。也就是對於每一個邊框輸出c個分數,4個回歸量,k個mask系數。mask系數一一對應着上面的prototypes。因為可能要減去背景,所以mask系數需要有負數,采用tanh非線性函數。

prediction head如下所示,和retina不同三個輸出僅共享一個\(3\times3\)卷積,然后各自經過\(3\times3\)的卷積。其中a是P3中的anchor數

1573914461748

最后,線性組合mask系數和prototypes,公式如:

1573961103642

其中\(P\)\(h\times w \times k\)的prototype mask的矩陣,是用邊框裁剪出來的,而不是原圖大小,\(C\)\(n\times k\)的mask系數矩陣,\(n\)為NMS后的邊框個數,\(\sigma\)是sigmoid函數。就是相當於給prototypes分別給了一個權重,然后線性組合在一起。

3個損失函數:\(L_{cls}, L_{box}, L_{mask}\)\(L_{mask} = BCE(M, M_{gt})\),這里的\(M\)是邊框大小的最終的mask,然后在計算\(L_{mask}\)時還除以了ground truth邊框的面積,也就是縮小了\(L_{mask}\)。論文中說是為了保護小目標,我理解的是對於小物體面積小,mask損失就大,對於大目標面積大,mask損失小,因此對於小目標預測不准確的懲罰更大一些,網絡也就更重視小目標。當然在預測的時候,用預測邊框進行裁剪。

1573963246779

另外作者解釋了為什么YOLACT能夠根據prototypes中不同的激活來定位目標,作者認為在ResNet中有着平移變化的屬性,而YOLACT正好利用了這種屬性。我們常說的神經網絡具有平移不變性指的是卷積+池化所具有的的,而且我認為這種平移不變性也只是一定限度的。生成prototypes所用的P3層特征也只經過一次\(3\times 3\)的最大池化,所以可以說ResNet具有平移變化屬性,也就是對位置敏感,因而能夠得到在不同位置的激活。

Fast NMS比傳統的NMS要更快,但會損失一些性能。傳統NMS會去除與最高分框重疊高於一定閾值的框,而Fast NMS卻允許那些已經確定要被去除的框來抑制分數更低的框。具體過程如下:假設有c類,n個預測框,首先按分數對框排序,然后計算彼此之間的IoU值,得到一個\(c\times n \times n\)的IoU矩陣X,因為每個框都可以進行c個類別的回歸修正,可得到\(c\times n\)個框,再求兩兩框之間的IoU就得到矩陣。之后將矩陣下三角置零只用上三角,在列方向上去尋找最大值:

1573992490402

,對於每一類k,尋找每一列k中IoU的最大值,記為\(K_{ij}\)。對於\(K\)\(K_{ij} < t\)表明第\(j\)框與前面所以的框重疊沒有超過閾值,是要保留下來的框,\(K_{ij} > t\)表明第\(j\)框與前面的某一個框的重疊超過閾值,因此對應的\(j\)框是要去掉的框。

Fast NMS為什么會快呢?傳統的NMS一類一類的去遍歷,在每一類的框中先排序,然后遍歷每一個框去除那些與當前框重疊高於閾值的框,可以看出這幾個過程都是順序的進行的。論文中說Fast NMS的排序在GPU上進行batch 排序,感覺就並行的進行多個類別的排序吧,然后計算IoU矩陣也可以向量化的去計算。最后是在IoU矩陣列方向上求最大值得到的還是矩陣,與閾值比較就能確定要保留和去除的框。也就是說Fast NMS將這整個過程用矩陣或者向量並行化了,而不是順序的去計算。

論文中提到Fast NMS會比傳統NMS多去除一些框,為什么?假設在計算時\(j =2\)的框是要被去除掉的,但計算\(j=3\)時與它重疊最高的框是\(j =2\),若是傳統NMS則只會去除\(j=2\),不會去除\(j=3\),因為計算\(j = 3\)\(j=2\)的框已經去除掉了不作比較,因此\(j=3\)框保留下來。而Fast NMS因為是並行計算所以也會同時去除\(j= 2, j=3\)的框。如果這種情況多一些,多去除一些框也就說的通了。

實驗結果

1573995782367

YOLACT快是挺快,但AP就不行了。不過在閾值為0.95時的表現還是挺好的,超過了Mask R-CNN,上圖中的可視化結果表現出的mask質量確實YOLACT好一些。

1573995950973

1573996203344


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM