感知算法论文(一)YOLACT: Real-time Instance Segmentation(2019)译文
文章目錄
- 摘要
- 1. 引言
- 2. 相關工作
- 3. YOLACT
- 3.1 模板的產生
- 3.2 Mask 系數
- 3.3 Mask集成
- 3.4 其他情況
- 4. 檢測器
- 5. 其他貢獻
- 6. 結果
- 6.1 實例分割結果
- 6.2 Mask質量
- 6.3 動態穩定性
- 6.4 實現細節
- 7. 結論
摘要
本文提出了一個簡單的全卷積網絡來實現實時的實例分割(From 加州大學戴維斯分校)
MS COCO數據集——mAP=29.8%,33fps,在單個Titan Xp上實驗,比目前任一方法都要快速,并且只使用了單個GPU。
為何獲得如此好的效果: 將實例分割任務分成了兩個并行的過程:
- 產生一系列模板mask
- 預測每個實例mask的系數
之后將模板mask和實例mask系數進行線性組合來獲得實例的mask,在此過程中,網絡學會了如何定位不同位置、顏色和語義實例的mask。
關鍵點:
-
該方法不依賴于repooling,并且可以產生高質量和高動態穩定性的masks。
-
本文盡管用全卷積網絡實現,但模板mask可以自己在具有平移變換情況下對實例進行定位
-
本文提出了一種Fast NMS,比標準NMS快12ms,且性能損失很小
1. 引言
目前在實例分割方面取得最好效果的入Mask R-CNN和FCIS,都是直接從目標檢測的方法,如Faster R-CNN或R-FCN等中衍生的。
但這些方法主要聚焦于網絡的精度而非速度,使得缺乏與實時目標檢測器(SSD或YOLO等)類似的實例分割方法。
本文的目標是跨越這個一直被忽略的實時實例分割的任務,建立一個快速的單級實例分割模型,類似于SSD和YOLO系列對彌補目標檢測無單級網絡所做的工作。
實現好的實例分割有一定的困難,且比目標檢測困難許多。單級的目標檢測器SSD和YOLO的出現使得目標檢測的時間相對于使用兩級檢測器(Faster R-CNN等)有了大幅度的下降,單級檢測器是通過去除第二級并在其他方面做了些彌補而獲得了高速檢測過程。
目前最好的兩級實例分割方法,在產生模板mask上非常依賴于特征定位準確與否,也就是在一些b-box區域要對特征進行“repooling”(RoI pooling/align),之后將新的定位特征送入mask預測器中,這個過程是內在有序的,故很難加速。
單級的方法將該過程變為如FCIS那樣并行的,但是這樣一來就需要在定位之后進行很多后處理,仍然和“實時”有一定的差距。
本文提出的YOLACT(You Only Look At CoefficienTs)能夠實時解決實例分割問題,放棄了定位的步驟。
YOLACT將實例分割分為兩個并行任務:
1)針對整幅圖像生成模板mask
2)對每個實例預測一系列的mask系數
之后,可以簡潔的從上述兩步中產生整幅圖像的實例分割:對每個實例,將模板mask和預測的相應系數進行線性組合,并與預測的b-box進行裁剪。
本文后續展示了通過以這種方式進行分割的過程,網絡學會了自己定位實例mask,在這種情況下,視覺上、空間上和語義上相似的實例將在模板中呈現不同。
由于模板mask的數量不依賴于類別數量,也就是類別可能比模板數量多,YOLACT學習到的是一種分布式的表示,其中每個實例都有多個模板原型組合分割,這些模板在不同類別之間共享。
該分布式表示導致模板域出現了一些情況:一些模板在空間上劃分開了圖像,一些定位實例,一些檢測實例的輪廓,一些編碼對位置敏感的方向圖譜,可能同時也會劃分圖像,如Fig.5。
Fig.5 :模板的效果,六種不同的模板對不同圖像特征的響應。
- 1,4,5可以檢測出來輪廓清晰的目標
- 2能檢測出左下方向的特征
- 3能夠區分前景和背景,并提供實例的輪廓
- 6能夠區分出來背景
本文方法的優勢:
1)快速:
因為這是一個并行過程,并且結構很簡潔。YOLACT僅僅給單級主干檢測器增加了少量的計算開銷,即使使用ResNet-101這樣的大型網絡,也可以達到30fps。
實時的定義是>30fps,在MS COCO數據集[26](Fig.1)上獲得了很好的效果。
另外,我們在速度和性能上進行了權衡,利用不同的主干框架,不同數量的模板和圖像分辨率。
2)高質量的mask:
因為這些mask使用整個圖像空間域,且圖像并未從repooling中造成質量損失(Fig.7)。
3)易于泛化:
生成模板mask和mask系數的理論可以用于目標任何的目標檢測器。
本文將實例分割分為兩個并行通道實現的方法形象的表示:
- 線性系數及其對應的檢測分支,可以看成被用來識別單個物體的類別
- 模板mask,可以看成被用來在空間中定位實例
這就可以近似看成人類視覺辨別物體“先定位再分割”的過程
2. 相關工作
實例分割:
Mask-RCNN是兩級實例分割的代表方法,第一級首先生成候選區域RoI,第二級對這些RoI進行分類和分割。
其之后的方法試圖提升準確性,如豐富FPN特征[27],或對mask的置信得分和定位準確度之間權衡。
這些兩級的方法需要對每個RoI特征進行re-pooling,并且在縮小圖像尺寸的情況下也難以達到實時的效果。
單級的實例分割方法產生了對位置敏感的mask,利用位置敏感的pooling來將這些mask組合成最終的mask,或者結合語言分割和方向預測logits[4]。
理論上,單級的方法比兩級的方法快,因為兩級的方法需要repooling或其他計算(如mask投票),這些就會限制速度,使得其難以接近實時的速度。
本文的方法將兩個步驟并行進行,更為簡潔并且可以在單個GPU上進行矩陣相乘,保證了速度。
實時實例分割:
盡管目前已經出現了實時目標檢測[28,32,33,34]方法和語義分割[2,29,31,10,45]方法,但是實時實例分割方法仍然很少。
直接基于形狀進行分割[19]的方法可以利用學習到的形狀進行實例分割,達到30fps的速度,但是準確率很差。
Box2Pix[40]方法基于非常簡潔的主干檢測器(GoogLeNet v1 [38] and SSD [28]),結合手工特征,在8類別的Cityscapes [5] 上獲取了10.9fps的速度,在8類別的KITTI [13]上獲得了35fps的速度,但是其文章中并沒有對語義豐富的包含80類的COCO數據集進行實驗,可想而知難以實現高效的分割。
Mask R-CNN實際上是目前在豐富數據集上最快的實例分割方法(550x550大小的圖像上,達到13.5fps,Table. 2c)
模板Mask:
計算機視覺中,學習模板已經應用的很廣泛了,傳統的方式包括texton[21]和視覺單詞[37],這些方法通過稀疏和位置先驗信息達到較好的效果[42,41,44],其他的方法是為目標檢測而設計的模板[1, 43, 36]。
這些方法利用模板來表示特征,我們利用模板來進行實例分割,是有些相關性的,且我們是學習模板來適應于每個圖像,而不是對整個數據集用共享的模板。
3. YOLACT
本文的目標是對目前已有的單級目標檢測網絡添加一個產生mask的分支,就像Mask R-CNN對Faster R-CNN所做的工作一樣,但是不包含定位步驟(如feature repooling)。
我們將復雜的實例分割過程拆分為兩個簡單的并行過程,獲得最終的mask。
-
第一個分支利用FCN來產生一系列與圖像大小一致的“prototype masks”,且不依賴于任一特定實例。
-
第二個分支是給目標檢測分支添加一個輸出,對每個anchor來預測“mask coefficients”,也就是對實例的表示編碼為prototype域的表達。
-
最后,對每個實例,使用NMS對所預測的mask進行處理。
原理:
本文用該方法來實現實例分割的首要原因是mask之間是空域相關的,也就是像素距離越近,越可能是一個實例的某一部分。
然而卷積層可以很好的從這些相關性中提取出特征,全連接層卻不能。這就出現了一個問題,因為單級目標檢測方法的fc層輸出對每個anchor的類別和框位置的預測,兩級方法(如Mask R-CNN)利用定位步驟(RoI Align)解決了這個問題,保持了特征的空域相關性也允許mask作為卷積層的輸出。但是這樣一來就需要一個很重要的分結構來等待第一級RPN輸出的候選區域,很大程度上加大了時間開銷。
本文將該問題分解為兩個并行步驟,使用了fc層,該層在產生語義向量上很有優勢,卷積層在產生空域相關mask上很有優勢,能夠產生“mask coefficients”。
因為模板mask和mask系數的計算是可以分別進行的,所以檢測器的主要計算就花費在兩者的組合上,但這可以用用單個矩陣相乘來實現。這樣一來,我們可以在特征域上保持空間相關性的同時保持單級網絡的快速性。
3.1 模板的產生
模板產生的分支(protonet)針對每幅圖像預測 kkk 個模板mask,本文用FCN的方式來實現protonet,FCN最后一層有 kkk 個channel,每個channel對應一個模板,且每個channel都被送入主要特征層(Fig.3)。
這樣的結構類似于一般的語義分割,不同的是我們提出這些模板沒有很大的損失,所有的監督都源于集成后的mask損失。
兩個重要的設計:
- 從更深的主要特征中產生更多的魯棒mask,來獲得protonet
- 更高分辨率的模板源于在小目標物體上更高質量的mask和在更好的性能
使用FPN是因為它最大的特征層是最深的層(P3,Fig.2),之后上采樣將其尺寸提升到輸入圖像大小的1/4,來提高對小目標物體的檢測性能。
protonet的輸出是無界的,這點很重要,因為這就允許網絡在模板上產生強大的激活輸出(如明顯的背景)。
選擇Relu函數來獲得更多可解釋的模板。
3.2 Mask 系數
典型的基于anchor的目標檢測器有兩個分支:
- 一個分支用來預測 ccc 個類別的置信分數
- 另一個分支用來預測b-box的4個坐標
mask 系數的預測:
給系統添加第三個分支來預測 kkk 個mask系數,每個系數對應于每個模板,所以我們預測 4+c+k4+c+k4+c+k 個數。
非線性化:
從最終的mask中去掉模板是很重要的,所以對 kkk 個mask系數都使用 tanhtanhtanh 來非線性處理,這樣比未進行非線性處理的輸出更穩定。
該設計在Fig.2 中有體現,如果不允許做差,那么兩個mask都是不可構造的。
3.3 Mask集成
為了產生實例的mask,將產生模板的分支和產生mask系數的分支使用線性組合的方法進行結合,并對組合結果使用Sigmoid非線性化來獲得最終的mask,該過程可以用單個矩陣相乘的方法來高效實現:
M=σ(PCT)M=\sigma(PC^T)M=σ(PCT)
- PPP——h×w×kh\times w\times kh×w×k 大小的模板mask
- CCC——n×kn\times kn×k 大小的mask系數,是經過了NMS和得分閾值處理后保留的 nnn 個實例的系數
損失函數:共三個損失
1)分類損失LclsL_{cls}Lcls?
2)邊界框回歸損失LboxL_{box}Lbox?
3)mask損失Lmask=BCE(M,Mgt)L_{mask}=BCE(M, M_{gt})Lmask?=BCE(M,Mgt?),MMM是預測的mask,MgtM_{gt}Mgt?是真實的mask,公式為兩者像素級二進制交叉熵。
Mask的裁剪:
為了在模板中保留小目標物體,我們將最終的mask根據預測的b-box進行裁剪,訓練過程中,我們使用真實的邊界框進行裁剪,并且將LmaskL_{mask}Lmask?除以真實的邊界框的面積。
3.4 其他情況
因為關于實例分割的普遍共識是因為FCN是平移不變的,所有需要在[22]中添加平移可變性。類似于FCIS[22]和Mask R-CNN[16]的方法嘗試著添加平移可變性,如利用方向性特征圖和對位置敏感的repooling,或者將mask分支送入第二級,就不用對實例進行定位了。
本文用于添加平移可變性的方法是對最終的mask利用預測的b-box進行裁剪,但是我們發現本文的方法在不對中等和大的目標進行裁剪的情況下仍然可以有效工作,所以這并非是裁剪所帶來的效果,YOLACT學習到了如何通過模板的不同激活情況來自己進行實例的定位。
Fig 5中image a 中紅色圖像的模板激活不可能是FCN沒有padding情況下的結果,因為卷積的輸出是一個單個的像素,如果整幅圖像都是相同的像素點組成,那么卷積層的輸出將都是相同的。另外,在目前的FCN網絡中,一致的邊緣填充使得網絡有能力判斷出某個像素距離圖像邊緣的距離。
理論上,可以實現這一點的一種方法是讓多個層依次將填充的0從邊緣像中心展開(如使用[1;0]這樣的卷積核)。這就意味著ResNet具有了內在平移可變性,本文的方法獲得了很好的特性,image b 和c就具有平移可變性。
許多模板都是對圖像中特定的“部分”有激活響應,也就是它們只激活某一部分,Fig 5中,模板1,4,5,6是這樣的例子。通過將這些部分激活的特征圖結合起來,網絡就具有識別同一語義類別的不同實例的能力(重疊的也可以),image d,綠色的傘可以通過模板4濾波結果減去模板5的濾波結果而獲得。
此外,作為學習目標,模板是可壓縮的,也就是說如果protonet將多種模板組合成了一個,那么mask系數分支就可以學習到哪些情況需要哪些功能。Fig 5中,模板2保留左下角方向的目標,但是在圖像中間的垂直條帶上對實例的觸發更強。模板4是一個分割模板,但是同樣對左下角方向的角點有很強的保留效果。模板5類似,不過是保留右邊的信息。
這些表明在實際中,即使使用32個模板,模型的性能也不會降低(Table 2b)。
4. 檢測器
對于檢測器,我們首先考慮速度和特征豐富度,因子預測這些模板和系數是一項艱難的任務,好的特征才能獲得好的結果。本文的檢測器在RetinaNet[25]的基礎上,更加注重速度。
YOLACT 檢測器:
本文使用RestNet-101[17]和FPN[24]作為默認特征主干網絡,圖像大小都為550×550550\times 550550×550。為了獲得對每幅圖像都相同的評估時間,我們不保留原始的縱橫比。
類似于RetinaNet,我們對FPN做如下修改,不產生 P2P_2P2?,并且從 P5P_5P5? 開始產生 P6P_6P6? 和 P7P_7P7? 作為連續的 3×33\times 33×3 步長的卷積層,并且在每個上面放置縱橫比為 [1,1/2,2] 的三個anchor。
P3P_3P3? 的 anchor 是面積為 24 pix的正方形,每個后面的層都是前面尺度的2倍,也就是 [24; 48; 96; 192; 384]。
因為預測輸出依賴于每個 PiP_iPi?,我們對這三個分支共享一個 3×33\times 33×3 的卷積核,之后每個分支獲得自己的卷積核。
與RetinaNet相比,本文的預測輸出設計更為簡潔和高效(Fig 4)
本文利用smooth-L1 損失來進行box的回歸訓練,并且利用與SSD相同的方法來編碼box回歸的坐標。
為了訓練分類,我們使用softmax 交叉熵損失,有 ccc 個正標簽和一個背景標簽,訓練樣本的 neg:pos=3:1neg:pos=3:1neg:pos=3:1
不同于RetinaNet,我們沒有使用焦點損失,因為在我們網絡中不可行。
本文利用上述設計方法搭建的網絡,在相同大小的輸入圖像的情況下,比SSD表現的更快更好。
5. 其他貢獻
本節討論一些其他改進,有些方法提升速度,對性能有些許的降低,有些方法提升性能,但對速度沒有損失。
Fast NMS:
對每個anchor生成了回歸b-box和分類置信度之后,我們會像多數目標檢測器一樣使用NMS來抑制重復的檢測。[33,34,28,35,16,25]中,都出現了連續使用NMS的過程。
對數據集中的每個類別 ccc ,根據置信分數來降序排列預測的box,移除那些IoU大于某個閾值但置信度較低的box。這樣的NMS最快只能達到5fps,和實時的30fps有著很大的差距
為了保持傳統NMS順序處理的本質,我們引入了Fast NMS,其中每個實例都可以在并行過程中確定是保留還是剔除。我們簡化了允許已經剔除的檢測其來抑制其他檢測器,這在傳統的NMS中是不可能的。這樣就允許我們在大多數GPU庫中使用標準矩陣操作實現快速的NMS。
Fast NMS的實現:
-
首先,對每個類別的前 nnn 個得分檢測器計算一個大小為 c×n×nc\times n \times nc×n×n 的 IoUIoUIoU 矩陣 XXX ,并且對每個類別的框進行降序排列。那么每個n×nn\times nn×n的矩陣都是對角陣(因為b-box_1對b-box_2的IoU與2對1的IoU是一樣的)
GPU上的批量排序是很容易得到的,計算IoU很容易向量化。
-
其次,通過檢查是否有任何得分較高的檢測與其IoU大于某個閾值 ttt ,從而找到要刪除的檢測框。故我們通過將 XXX 的下三角和對角區域設置為0,來實現:
Xkij=0    ?k,j,i≥jX_{kij}=0\,\,\,\, \forall k,j,i \ge jXkij?=0?k,j,i≥j -
上述可以在一個批量 上三角函數(triu) 中實現,之后保留列方向上的最大值,來計算每個檢測器的最大 IoUIoUIoU 矩陣 KKK 。
Kkj=maxi(Xkij)    ?k,jK_{kj}=max_i(X_{kij}) \,\,\,\,\forall k,jKkj?=maxi?(Xkij?)?k,j
- 最后,利用閾值 t(K<t)t(K<t)t(K<t) 來處理矩陣,對每個類別保留最優的檢測器。
由于約束的放寬,Fast NMS 會刪除更多的框,然而這和顯著提升速度相比,對性能的影響微不足道(Table 2a)。
Fast NMS 比傳統NMS在Cython上的實現快11.8ms,而mAP僅僅下降了0.1%,用Mask R-CNN做對比,Fast NMS快16.5ms,mAP降低了0.3%。
語義分割損失:
Fast NMS 在提升速度的情況下,有少許的性能損失,還有別的方法在提升性能的情況下,對速度沒有任何損失。
其中一種方法,在訓練中給模型添加額外的損失函數,但在測試中不添加,這樣在沒有速度損失的情況下有效的提升了特征的豐富性。
故我們在訓練過程中,給特征域增加了語義分割損失。因為我們從實例注釋中構造損失的真值,沒有直接的捕捉語義分割(也就是沒有強制要求每個像素都是一個標準類)。
為了在訓練中預測,我們簡單的將有 ccc 個輸出通道的 1×11\times 11×1 卷積層直接附加到主干網絡最大的特征圖(P3P_3P3?)上,因為,每個像素都可以分配多于1的類別,我們使用sigmoid和 ccc 個通道而不是softmax和 c+1c+1c+1 個通道,這樣定義損失函數的訓練方法將mAP提升了0.4%。
6. 結果
本文在 MS COCO 數據集上進行了實例分割任務,在 train2017上進行訓練,在val2017和test-dev上進行評估。
6.1 實例分割結果
首先,在 MS COCO 的test-dev數據集上對YOLACT和目前最好的方法進行了性能對比。
本文的關注點在于速度的提升,故我們和其他單模型的結果進行了對比,其中不包括測試時間。
本文的所有實驗都是在Titan Xp上進行的,故一些結果和原文中的結果可能略有不同。
YOLACT-550,是目前最快的網絡在COCO上實現實例分割速度的3.8倍
Fig 7中展示了,YOLACT-500和Mask R-CNN在IouO閾值為0.5的時候,AP之間的差距為9.5,當IoU閾值為0.75的時候,AP差距為6.6。
FCIS和MaskR-CNN之間的變化與其不同,該兩者的差距基本是穩定的,前者的AP為7.5,后者的AP為7.6。
Table 1 同樣也進行了實驗來驗證本文模型在不同大小輸入圖像情況下的性能。除過基本的 550×550550 \times 550550×550 大小模型,我們也訓練了 400×400400 \times 400400×400 和 700×700700\times 700700×700 的模型,相應地也調整了anchor的尺寸(sx=s550/550?xs_x=s_{550}/550\cdot xsx?=s550?/550?x)。
降低圖像大小會導致性能的大幅度下降,這說明越大的圖像進行實例分割的性能越好,但提升圖像尺寸帶來性能提升的同時會降低運行速度。
除了在基準主要網絡RestNet-101上實驗以外,我們同樣在RestNet-50和RestNet-53上進行了實驗來獲得更快的效果。
如果提升速度更好的話,那么我們建議使用RestNet-50或RestNet-53而不是減小圖像大小,因為這樣一來實現的性能比YOLACT-400上好很多,只是時間上略微慢一些而已。
6.2 Mask質量
我們產生的最終mask大小為 138×138138\times 138138×138 ,且由于直接從原始特征中直接產生mask(未進行repooling則可能產生位移),我們針對大目標的mask比Mask R-CNN [16] 和 FCIS [22] 的質量有顯著的優勢。
Fig 7 中,YOLACT 對胳膊的邊界產生了一個清楚的mask,Mask R-CNN [16] 和 FCIS [22] 的mask則帶有一些噪聲。
當IoU閾值為9.5的時候,本文的基準模型的AP達到了1.6,Mask R-CNN 達到了1.3,這意味著repooling會造成一定的mask 性能損失。
6.3 動態穩定性
本文的方法在動態視頻上的穩定性高于Mask R-CNN , Mask R-CNN在幀間過渡的時候有很多跳動,甚至在目標靜止的情況下也是一樣。
我們之所以認為我們的方法對動態視頻更穩定原因有兩個:
- 我們的mask性能更高,故幀間并沒有很大誤檢
- 我們的模型是單級的
- 多級模型更多的依賴于第一級產生的區域提議
- 本文的方法當模型在幀間預測多個不同的候選框時,protonet不響應,故我們的方法對動態視頻更穩定
6.4 實現細節
所有的模型訓練都使用ImageNet訓練的參數作為預定義參數,在單個GPU上訓練,批量大小為8。這個大小適合于批歸一化,所以我們保持預訓練批規范化固定不變,也沒有添加額外的bn層。
使用SGD方法進行800k次迭代,初始學習率設置為0.003,并且在迭代次數為280k, 600k, 700k, 和750k時,分別下降10%。
權重衰減率為0.0005,動量為0.9。
7. 結論
本文的網絡優勢:
快速,高質量的mask,優良的動態穩定性
本文網絡的劣勢:
性能略低于目前最好的實例分割方法,很多錯誤原因檢測錯誤,分類錯誤和邊界框的位移等
下面說明兩個由YOLACT的mask生成方法造成的典型錯誤:
1)定位誤差
當場景中一個點上出現多個目標時,網絡可能無法在自己的模板中定位到每個對象,此時將會輸出一些和前景mask相似的物體,而不是在這個集合中實例分割出一些目標。
Fig 6(第一行第一列)中的第一幅圖,藍色的卡車在紅色的飛機之下,就沒有得到正確的定位。
2)頻譜泄露
本文的網絡對預測的集成mask進行了裁剪,且并未對輸出的結果進行去噪。這樣一來,當b-box時準確的的時候,沒有什么影響,但是當b-box不準確的時候,噪聲將會被帶入實例mask,造成一些“泄露”。
當兩個目標離得很遠的時候也會發生“泄露”的情況,因為網絡學習到的是不需要定位離得很遠的目標,但是裁剪的過程會關系這點。
假如預測的b-box很大,那么該mask將包括那些離得很遠的mask,如Fig 6(第二行第四列)中發生的泄露是由于mask分支認為這三個滑雪的人離得足夠遠,并不用將他們劃分開來。
該問題可以通過mask error down-weighting機制得到緩解,如MS R-CNN[18]中那樣,其中顯示這些錯誤的mask可以被忽略,之后我們在解決這個問題。
總結
以上是生活随笔為你收集整理的感知算法论文(一)YOLACT: Real-time Instance Segmentation(2019)译文的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三亚凤凰机场出现滚滚浓烟?机场回应:暂无
- 下一篇: 瑞萨电子推出 Wi-Fi 6/6E 四频