图像目标分割_6 Mask RCNN
6.6.0 背景
目標檢測和語義分割的效果在短時間內(nèi)得到了很大的改善。在很大程度上,這些進步是由強大的基線系統(tǒng)驅(qū)動的,例如,分別用于目標檢測和語義分割的Fast/Faster R-CNN和全卷積網(wǎng)絡(FCN)框架。這些方法在概念上是直觀的,提供靈活性和魯棒性,以及快速的訓練和推理。論文作者在這項工作中的目標是為目標分割開發(fā)一個相對有力的框架。
Mask RCNN主要解決的是實例分割,語義分割 (semantic segmentation)?指的是把一張圖像的每一個像素進行分類, 比如把圖像中所有的人分為一類. 而實例分割 (instance segmentation)?是指按照對象 (object) 進行分類, 那么不同的人就要分為不同的類別.
- deeplab:語義分割
- maskrcnn:實例分割
Mask R-CNN的輸出見下圖:
運行視頻檢測和分割的效果
YOLOv2 vs YOLOv3 vs Mask RCNN vs Deeplab Xception:YOLOv2 vs YOLOv3 vs Mask RCNN vs Deeplab Xception_嗶哩嗶哩_bilibili
6.6.1 Mask RCNN介紹
Mask R-CNN是何凱明的力作,將Object Detection與Semantic Segmentation合在了一起做。Mask R-CNN是一個很多state-of-the-art算法的合成體,并非常巧妙的設計了這些模塊的合成接口。
6.6.1.1 回顧
Faster R-CNN:我們首先簡要回顧一下Faster R-CNN檢測器。Faster R-CNN由兩個階段組成。
- 稱為區(qū)域提議網(wǎng)絡(RPN)的第一階段提出候選目標邊界框。
- 第二階段,本質(zhì)上是Fast R-CNN,使用RoIPool從每個候選框中提取特征,并進行分類和邊界回歸。兩個階段使用的特征可以共享,以便更快的推理。
對于FasterR-CNN來說,對于每個目標對象,它有兩個輸出,一個是類標簽(classlabel),一個是邊界框的偏移值(bounding-box offset)
6.6.1.2 Mask R-CNN
Mask R-CNN采用相同的兩個階段,在Faster R-CNN網(wǎng)絡上的修改,具體包括:
1、采用ResNet-FPN的架構(gòu),并將ROI Pooling層替換成了ROIAlign
2、添加了并列的FCN層(Mask層)
- 第一階段:只不過特征提取采用ResNet-FPN的架構(gòu),得到目標邊界框。(FPN實際上是一種通用架構(gòu),可以結(jié)合各種骨架網(wǎng)絡使用,比如VGG,ResNet等。Mask RCNN文章中使用了ResNNet-FPN網(wǎng)絡結(jié)構(gòu))
- 多尺度檢測在目標檢測中變得越來越重要,對小目標的檢測尤其如此。
- FasterRCNN的例子中對多級特征進行提取合并
-
第二階段:通過一個RoIAlign除了預測類和預測框偏移,Mask R-CNN還為每個RoI輸出二進制掩碼。這與最近的其它系統(tǒng)相反,其分類取依賴于掩碼預測。
-
Mask R-CNN方法增加了第三個分支的輸出:進一步的是為每個RoI生成了一個目標掩碼(二元掩碼)。目標掩碼與已有的class和box輸出的不同在于它需要對目標的空間布局有一個更精細的提取。
-
掩碼分支對于每個RoI的輸出維度假設即K個分辨率為m×m的二進制掩碼,每個類別一個,K表示類別數(shù)量。
-
6.6.1.3 RoIAlign
- 回顧:Faster-rcnn中的ROIPool是一種針對每一個在特征圖中映射得到的Region of Interested的提取一個小尺度特征圖(比如說7x7)的標準操作,它用以解決將不同尺度的ROI提取成相同尺度的特征大小的問題。
但是由于我們要實現(xiàn)像素級的 mask 圖像, 所以如果仍然使用 Fast RCNN 中的 RoIPool 的話, 會出現(xiàn)一些誤差:因為特征圖上的 RoI 池化為固定大小 (比如 7×7) 的盒子 (bins) 時也可能存在取整操作。這些取整會使得 RoI 與提取的特征之間存在偏差, 這樣小的偏差對分類基本沒什么影像, 但是對像素級的分割必然會產(chǎn)生較大的負面影響。
- 原圖800x800,經(jīng)過VGG得到下采樣32倍之后的25x25的特征圖大小,RoI大小為665x665,所以轉(zhuǎn)換到特診途中為20x20(取整之后的),然后通過ROIPool的時候又要做7x7最大池化分成49塊,顯然,每個矩形塊區(qū)域的邊長為2.86,又含有小數(shù),于是ROI Pooling 再次調(diào)整到2。
- 經(jīng)過兩次的調(diào)整得到候選區(qū)域已經(jīng)出現(xiàn)了很大的誤差了。
- 原因:為什么很大呢?
- 注意到特征圖上的 1 個像素的誤差會引起原始圖像 16 個像素的誤差, 如果池化了五次則會導致 32 個像素的誤差
- 該層特征圖上0.1個像素的偏差,縮放到原圖就是3.2個像素。那么0.8的偏差,在原圖上就是接近30個像素點的差別,影響還是很大的。
提出RoIAlign 的方法
主要包含三點:
- 1、預選框的大小保持浮點數(shù)狀態(tài)不做取整
- 2、RoI 分割為 7×7 的單元時每個單元的邊界不做取整
- 3、使用雙線性內(nèi)插法,在每個單元中采樣四個固定位置的值進行池化
2、做法
1、假定原圖中有一region proposal,還是大小為665x665,這樣,映射到特征圖中的大小:665/32=20.78,即20.78x20.78,此時,沒有像RoiPooling那樣就行取整操作,保留浮點數(shù)。
2、假定pooled_w=7,pooled_h=7,即pooling后固定成7x7大小的特征圖,所以,將在 feature map上映射的20.78x20.78的region proposal 劃分成49個同等大小的小區(qū)域,每個小區(qū)域的大小20.78/7=2.97,即2.97x2.97,得到下圖共49個這樣的大小的區(qū)域。
-
步驟 1:假定采樣點數(shù)為4,即表示,對于每個2.97x2.97的小區(qū)域,平分四份,每一份取其中心點位置,而中心點位置的像素,采用雙線性插值法進行計算。一個2.97 x2.97的區(qū)域就會得到四個點的像素值。
-
步驟2:取四個像素值中最大值作為這個小區(qū)域(即:2.97x2.97大小的區(qū)域)的像素值,如此類推,同樣是49個小區(qū)域得到49個像素值,組成7x7大小的feature map
6.6.1.3 對比兩種方式
- 對于檢測圖片中大目標物體時(VOC2007),兩種方案的差別不大
- 而如果是圖片中有較多小目標物體需要檢測(COCO2017),則優(yōu)先選擇RoiAlign,更精準些。
- RoIAlign起到了很大的作用:論文中可以將掩碼準確度提高0.1至0.5
6.6.1.4 主干架構(gòu)(backbone architecture)的head結(jié)構(gòu)(Mask預測部分)
論文中嘗試的網(wǎng)絡主干 (backbone) 結(jié)構(gòu)有:
- 1、ResNet-50-C4
- 2、ResNet-101-C4
- 3、ResNeXt-101
- 4、ResNet-50-FPN
- 5、ResNet-101-FPN
注: Faster RCNN 使用 ResNets 的原始實現(xiàn)中從第四階段的最后一次卷積之后提取特征, 我們稱之為 C4. FPN 是指 Feature Pyramid Network
用于分類回歸和分割的網(wǎng)絡頭部 (head) 結(jié)構(gòu)(頭部結(jié)構(gòu)):
- 每個候選區(qū)域經(jīng)過ROIAlign得到:分類和回歸部分保持 Faster RCNN 中的結(jié)構(gòu)不變, ResNet-C4 主干結(jié)構(gòu)中額外添加 ResNet 的第五階段
- 每個候選區(qū)域經(jīng)過ROIAlign得到:分割部分使用全卷積作為 mask 預測分支
- 其實就是得到了圖片中某個物體的像素屬于哪個類別(0/1)
- 上圖為兩個結(jié)構(gòu)對應的mask部分設置
- 數(shù)字表示分辨率或通道數(shù),箭頭表示卷積、反卷積、全連接層. 所有的卷積都是 3×3 的
- 1、輸出層的卷積除外 (是 1×1 的)
- 2、反卷積是 2×2 的, 步長為 2, 使用 ReLU 激活
- 3、左邊: 'res5' 表示 ResNet 的第五個階段, 右邊: '×4' 表示 4 個連續(xù)的卷積
6.6.1.4 訓練細節(jié)
1、多任務損失函數(shù)
Mask RCNN 仍然使用兩階段方法, 在第二階段添加了 mask 分支, 損失函數(shù)為:
注:分類損失Lcls和檢測框損失Lbox與中定義的相同。其中
- mask的損失計算
- 對于每個RoI,掩碼分支都有一個[m, m, K]維輸出,該輸出編碼K個分辨率為m×m的二進制掩碼,每個K類中的一個掩碼。KK大寫為總類別,kk小寫為其中一個類別
- 對于每個RoI區(qū)域,找到對應分配的GT類別kk,Lmask定義的時候,只是定義了對應k這個地方的mask。
- 假設最后得到的7x7的掩碼,那么每個像素的對應是假設80個類別中的一個進行損失計算,不是有80個預測結(jié)果。
- 而是只有某個位置進行了sigmoid處理之后,得到的結(jié)果與GT的kk進行邏輯回歸損失計算。其他的地方不貢獻損失
- 為什么不算所有的:
- 因為是一個RoI區(qū)域?qū)粋€類別,這個區(qū)域已經(jīng)很小了,就只屬于這個類別即可。可以看做這些像素是一個整體類別
這與FCN方法是不同,FCN是對每個像素進行多類別softmax分類,然后計算交叉熵損失,這種做法是會造成類間競爭的,而每個類別使用sigmoid輸出并計算二值損失,可以避免類間競爭。實驗表明,通過這種方法,可以較好地提升性能。
2、訓練
- 1、正負樣本:ground truth box 的 IoU 重合度超過 0.5 的 RoI 視為正例, 否則為反例.
- Mask 損失只定義在正例上. Mask 分支每個 RoI 可以預測 K (總類別數(shù)) 個 masks, 但我們只使用第 k 個, 這里的 k 是分類分支預測出的類別
- 2、圖像 resize 到短邊為 800 像素.
- 3、每個 mini-batch 每個 GPU 使用兩張圖, 每張圖有 N 個采樣的 RoIs, 正負樣本數(shù)比例為 1:3
- C4 主干的 N=64, FPN 主干的 N=512.
- 4、參數(shù):在 8 塊 GPU 上訓練 160k 步, 在第 120k 步的時候?qū)W習率從 0.02 下降到 0.002. 使用 0.0001 的權(quán)重衰減和 0.9 的動量.
- 5、RPN 的 anchor 使用了 5 種尺寸和 3 種比例, 與 FPN 中一致。一共15中類別的先驗框
3、運行效果:
模型可以在GPU上以200毫秒每幀的速度運行,使用一臺有8個GPU的機器,在COCO上訓練需要一到兩天的時間。
4、測試階段
- 1、C4 的 proposals 的數(shù)量為 300, FPN 為 1000.
- 2、在所有的 proposals 上都進行 Bbox 回歸, 最后應用 NMS
- 3、Mask 分支使用得分最高的 100 個檢測框
- m×m 的浮點數(shù)的 mask 輸出 resize 到 RoI 的大小, 然后應用 0.5 的閾值進行二值化。
6.6.4 效果
6.6.4.1 目標分割
Mask R-CNN超越了COCO實例分割任務上所有先前最先進的單一模型結(jié)果,其中包括COCO 2016挑戰(zhàn)優(yōu)勝者。作為副產(chǎn)品,我們的方法也優(yōu)于COCO對象檢測任務。
實例分割:MaskRCNN每個物體對象對應到一個類別,還有得到位置。所以能區(qū)分圖片中同類別物體但是位置不一樣
與以往實例分割算法比較
將Mask R-CNN與其它最先進的目標分割方法進行比較,如下表(表1)所示:(COCO test-dev上的目標分割掩碼AP。?MNC和FCIS分別是COCO 2015和2016分割挑戰(zhàn)的獲勝者。Mask R-CNN優(yōu)于更復雜的,包含多尺度訓練和測試、水平翻轉(zhuǎn)測試的FCIS+++,和OHEM。所有條目都是單模型的結(jié)果。)
對比:
FCIS+++對比 Mask R-CNN(ResNet-101-FPN)。 FCIS在重疊對象上有問題,Mask R-CNN沒問題。
6.6.4.2 消融實驗
-
1、結(jié)構(gòu)上:表a顯示了具有各種使用不同下層網(wǎng)絡的Mask R-CNN。受益于更深層次的網(wǎng)絡(50對比101)和高級設計,包括FPN和ResNeXt。我們注意到并不是所有的框架都會從更深層次的或高級的網(wǎng)絡中自動獲益
-
2、獨立與非獨立掩碼:Mask R-CNN解耦了掩碼和類預測:由于現(xiàn)有的檢測框分支預測類標簽,所以我們?yōu)槊總€類生成一個掩碼,而不會在類之間產(chǎn)生競爭(通過像素級Sigmoid和二值化損失)。在表b中,這些方法將掩碼和類預測的任務結(jié)合,導致了掩碼AP(5.5個點)的嚴重損失。
-
3、RoIAlign:表c顯示了對提出的RoIAlign層的評估。對于這個實驗,使用的下層網(wǎng)絡為ResNet-50-C4,其步進為16。RoIAlign相對RoIPool將AP提高了約3個點,在高IoU(AP75)結(jié)果中增益更多。
-
采用雙線性采樣的ROIAlign與提出的RoIWarp進行比較,RoIWarp仍然四舍五入了RoI,與輸入失去了對齊。從表c可以看出,RoIWarp與RoIPool效果差不多,比RoIAlign差得多。這突出表明正確的對齊是關(guān)鍵。
-
4、掩碼分支:
分割是一個像素到像素的任務,我們使用FCN來利用掩碼的空間布局。在表e中,我們使用ResNet-50-FPN下層網(wǎng)絡來比較多層感知機(MLP)和FCN。使用FCN可以提供超過MLP 2.1個點的AP增益。為了與與MLP進行公平的比較,FCN的上層網(wǎng)絡的卷積層沒有被預訓練。
6.6.4.3 目標檢測結(jié)果
在COCO數(shù)據(jù)集上將Mask R-CNN與其它最先進的目標檢測方法進行比較,如下表所示:(目標檢測結(jié)果(目標邊界框AP),單模型,在test-dev上與其它最先進的技術(shù)對比。使用ResNet-101-FPN的Mask R-CNN優(yōu)于所有先前最先進的模型的基本變體(實驗中忽略了掩碼輸出)。Mask R-CNN超過12的增益來自使用RoIAlign(+1.1 APbb),多任務訓練(+0.9 APbb)和ResNeXt-101(+1.6 APbb)。)
為了作進一步的比較,論文作者訓練了一個沒有掩碼分支版本的Mask R-CNN,見表3中的“Faster R-CNN,RoIAlign”。由于RoIAlign,該模型的性能優(yōu)于中提出的模型。但是比Mask R-CNN低0.9個點的AP。這個差距這是由于Mask R-CNN的多任務訓練產(chǎn)生的。
6.6.4.4 Cityscapes上的實驗
Cityscapes數(shù)據(jù)集的目標分割結(jié)果。該數(shù)據(jù)集具有精細標注的2975個訓練圖像,500個驗證圖像和1525個測試圖像。它還有20k粗糙的訓練圖像,無精細標注,Cityscapes數(shù)據(jù)集的主要挑戰(zhàn)是訓練數(shù)據(jù)較少,特別是對于卡車,公共汽車和火車的類別,每個類別的訓練樣本大約有200-500個。所有圖像的分辨率為2048 x 1024像素。目標分割任務涉及8個對象類別,其訓練集中的總共目標數(shù)為:
| 17.9k | 1.8k | 26.9k | 0.5k | 0.4k | 0.2k | 0.7k | 3.7k |
該任務的目標分割性能由和COCO一樣的AP(在IoU閾值上平均)來測量,也包括AP50(即,IoU為0.5的掩碼AP)。
實現(xiàn):
- 1、Mask R-CNN模型使用的下層網(wǎng)絡是ResNet-FPN-50,也測試了對應的101層的網(wǎng)絡,不過由于數(shù)據(jù)集比較小,性能相似。
- 2、將圖像在[800,1024]像素范圍內(nèi)隨機縮放(較短邊)進行訓練,從而減少過擬合。測試時則統(tǒng)一縮放到1024像素。
- 3、使用的批量大小為每個GPU 1個圖像(實際上8個GPU上有8個),學習率為0.01,迭代次數(shù)為24k,在迭代次數(shù)達到18k時,學習率減少到0.001
結(jié)果:我們在測試集和驗證集上,將我們的結(jié)果與其它主流方法進行了比較,使用預先訓練好的COCO Mask R-CNN模型(騎手類別被隨機初始化)。如下表(表7)所示:
- 1、對于人和小汽車類別,Cityscapes數(shù)據(jù)集包含了大量的類內(nèi)重疊目標(每個圖像平均6人和9輛小汽車)。類內(nèi)重疊是目標分割的核心難點。論文的方法在這兩個類別相對前最佳結(jié)果有大幅度改善(人相對提升了約85%,從16.5提高到30.5,小汽車相對提升了約30%,從35.7提高到46.9)。
- 2、使用COCO預訓練的Mask R-CNN模型在測試集上達到了32.0 AP,比不預訓練的模型提高了6個點。這表明足夠的訓練數(shù)據(jù)的重要性。
- 3、觀察到測試集和訓練集AP之間的偏差,偏差主要是由卡車,公共汽車和火車類別造成的,其中只使用精細標注訓練數(shù)據(jù)的模型,在驗證集和測試集上的AP分別為28.8/22.8,53.5/32.2和33.0/18.6。這表明這些訓練數(shù)據(jù)很少的類別存在domain shift。 COCO預訓練有助于改善這些類別上的結(jié)果,然而,domain shift依然存在,在驗證集和測試集上的AP分別為38.0/30.1,57.5/40.9和41.2/30.9。
Cityscapes的結(jié)果示例如下圖:
6.6.4.5 Mask R-CNN人體姿態(tài)估計(了解)
通過COCO關(guān)鍵點數(shù)據(jù)集上的人體姿態(tài)估計任務來展示論文框架的通用性。通過將每個關(guān)鍵點視為one-hot二進制掩碼,只需要很少的修改,Mask R-CNN可以應用于人體關(guān)鍵點檢測。不需要額外的技巧,Mask R-CNN超過了COCO 2016人體關(guān)鍵點檢測比賽的冠軍,同時運行速度可達5 FPS。因此,Mask R-CNN可以被更廣泛地看作是用于目標級識別的靈活框架,并且可以容易地擴展到更復雜的任務。
總結(jié)
以上是生活随笔為你收集整理的图像目标分割_6 Mask RCNN的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dhs手术是什么意思_#下颌角手术# #
- 下一篇: tensorflow训练神经网络时los