論文巧妙地基於one-stage目標檢測算法提出實時實例分割算法YOLACT,整體的架構設計十分輕量,在速度和效果上面達到很好的trade-off。
來源:【曉飛的算法工程筆記】 公眾號
論文: YOLACT: Real-time Instance Segmentation
Introduction
目前的實例分割方法雖然效果都有很大的提升,但是均缺乏實時性,為此論文的提出了首個實時($>30fps$)實例分割算法YOLACT,論文的主要貢獻如下:
- 基於one-stage目標檢測算法,提出實時實例分割算法YOLACT,整體的架構設計十分輕量,在速度和效果上面達到很好的trade-off。
- 提出加速版NMS算法Fast NMS,有12ms加速
YOLACT
YOLACT的主要想法是直接在one-stage目標檢測算法中加入Mask分支,而不添加任何的RoI池化的操作,將實例分割分成兩個並行的分支:
- 使用FCN來生成分辨率較大的原型mask,原型mask不針對任何的實例。
- 目標檢測分支添加額外的head來預測mask因子向量,用於對原型mask進行特定實例的加權編碼。
這樣做的原理在於,mask在空間上是連續的,卷積能很好地保持這種特性,因此原型mask通過全卷積生成的,而全連接層雖然不能保持空間連貫性,但能很好地預測語義向量,於是用來生成instance-wise的mask因子向量,結合兩者進行預測,既能保持空間連貫性,也能加入語義信息並保持one-stage的快速性。最后取目標檢測分支經過NMS后的實例,逐個將原型mask和mask因子向量相乘,再將相乘后的結果合並輸出
Prototype Generation
原型mask分支預測$k$個mask,protonet按如圖3的FCN形式實現,最后的卷積輸出channel為$k$,protonet接在主干網絡上。整體的實現與大多數的語義分割模型類似,區別在於主干網絡使用了FPN來增加網絡的深度,並且保持較大的分辨率($P_3$, 原圖1/4大小)來提高小物體的識別。另外,論文發現不限制protonet的輸出是很重要的,能夠讓網絡對十分確定的原型給予壓倒性的響應(比如背景),可以選擇對輸出的原型mask進行ReLU激活或不接激活,論文最終選擇了ReLU激活。
Mask Coefficients
在經典的anchor-based目標檢測算法中,檢測head一般有兩個分支,分別預測類別和bbox偏移。在此基礎上添加第三個用於mask因子預測的分支,每個實例預測$k$個mask因子。
為了更好地控制和豐富原型mask的融合,對mask因子進行tanh激活,使得值更穩定且有正負,效果如圖2的分支。
Mask Assembly
將原型mask和mask因子進行線性組合,然后對組合結果進行sigmoid激活輸出最終的mask。$P$為$h\times w\times k$的原型mask,$C$為$n\times k$的原型因子,$n$為檢測分支NMS和分數過濾后留下的實例數。
-
Losses
訓練的損失函數包含3種:分類損失$L_{cls}$、box回歸損失$L_{box}$以及mask損失$L_{mask}$,權重分別為1、1.5和6.125,分類損失和回歸損失的計算與SSD一樣,mask損失使用pixel-wise的二元交叉熵計算$L_{mask}=BCE(M, M_{gt})$
-
Cropping Masks
在推理階段,使用預測的bbox在最終的mask截取出實例,再使用閾值(人工設置0.5)來過濾成二值的mask。在訓練的時候,則使用GT來截取實例計算mask損失,$L_{mask}$會除以截取的實例大小,這樣有助於保留原型中的小目標。
Emergent Behavior
一般而言,FCN做分割都需要添加一些額外的trick來增加平移可變性,比如position-sensitive特征圖,雖然YOLACT唯一增加平移可變形的措施是對最終的mask進行截取輸出,但是論文發現對於中大物體不截取輸出的效果也不錯,這代表YOLACT的原型mask學到了對不同的實例進行不同的響應,如圖5所示,適當地對原型mask進行組合就能得出實例。需要注意的是全紅的輸入圖片,其原型mask特征是各不一樣的,這是由於每次卷積都會padding,使得邊界存在可區分性,所以主干網絡本身就存在一定的平移可變形。
Backbone Detector
原型mask和mask因子的預測都需要豐富的特征,為了權衡速度和特征豐富性,主干網絡采用類似與RetinaNet的結構,加入FPN,去掉$P_2$加入$P_6$和$P_7$,在多層中進行head預測,並用$P_3$特征進行原型mask預測。
YOLACT head使用$P_2 \sim P_7$的特征,anchor的大小分別對應$[24, 48, 96, 192, 384]$,每個head共享一個$3\times 3$卷積,然后再分別通過獨立的$3\times 3$卷積進行預測,比RetinaNet更輕量,如圖4。使用smooth-$L1$訓練bbox預測,使用帶背景類的softmax交叉熵訓練分類預測,OHEM正負比例為$1:3$。
Other Improvements
Fast NMS
正常的NMS會串行地按類別將bbox逐個校驗,這種效率對於5fps的算法是足夠快的,但對於30fps的算法將是很大的瓶頸。為此,論文提出Fast NMS來加速。
首先根據類別分數對各檢測結果進行排序,然后計算各自的IoU對,得到$c\times n\times n$的IoU矩陣$X$,$c$為類別數,$n$為bbox數量。假設與bbox的IoU高於閾值$t$的其它bbox的分數高於當前框,則去掉該bbox,計算邏輯如下:
- 將矩陣$X$的下三角和對角線置為0,$X_{kij}=0, \forall k, j, i \ge j$
- 取每列的最大值,計算如公式2,得到最大IoU值矩陣$K$
- $K<t$的檢測結果即為每個類別保留的結果。
通過實驗,FastNMS大約能比原生的NMS快約11.8ms,mAP下降0.1
Semantic Segmentation Loss
為了提升准確率而不影響推理的速度,在訓練階段加入語義分割分支並計算語義分割損失輔助訓練。在$P_3$輸出上接一個c維的$1\times 1$卷積,由於一個像素可能屬於多個類別,使用sigmoid激活輸出而不是softmax激活,損失的權重為1,大約能提升0.4mAP。
Results
Mask Results
Mask Quality
Ablations
CONCLUSION
論文巧妙地基於one-stage目標檢測算法提出實時實例分割算法YOLACT,整體的架構設計十分輕量,在速度和效果上面達到很好的trade-off。
寫作不易,未經允許不得轉載~
更多內容請關注 微信公眾號【曉飛的算法工程筆記】