日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

图像目标分割_6 Mask RCNN

發布時間:2024/7/5 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图像目标分割_6 Mask RCNN 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

6.6.0 背景

目標檢測和語義分割的效果在短時間內得到了很大的改善。在很大程度上,這些進步是由強大的基線系統驅動的,例如,分別用于目標檢測和語義分割的Fast/Faster R-CNN和全卷積網絡(FCN)框架。這些方法在概念上是直觀的,提供靈活性和魯棒性,以及快速的訓練和推理。論文作者在這項工作中的目標是為目標分割開發一個相對有力的框架。

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由兩個階段組成。

  • 稱為區域提議網絡(RPN)的第一階段提出候選目標邊界框。
  • 第二階段,本質上是Fast R-CNN,使用RoIPool從每個候選框中提取特征,并進行分類和邊界回歸。兩個階段使用的特征可以共享,以便更快的推理。

對于FasterR-CNN來說,對于每個目標對象,它有兩個輸出,一個是類標簽(classlabel),一個是邊界框的偏移值(bounding-box offset)

6.6.1.2 Mask R-CNN

Mask R-CNN采用相同的兩個階段,在Faster R-CNN網絡上的修改,具體包括:

1、采用ResNet-FPN的架構,并將ROI Pooling層替換成了ROIAlign

2、添加了并列的FCN層(Mask層)

  • 第一階段:只不過特征提取采用ResNet-FPN的架構,得到目標邊界框。(FPN實際上是一種通用架構,可以結合各種骨架網絡使用,比如VGG,ResNet等。Mask RCNN文章中使用了ResNNet-FPN網絡結構)
    • 多尺度檢測在目標檢測中變得越來越重要,對小目標的檢測尤其如此。
    • FasterRCNN的例子中對多級特征進行提取合并

  • 第二階段:通過一個RoIAlign除了預測類和預測框偏移,Mask R-CNN還為每個RoI輸出二進制掩碼。這與最近的其它系統相反,其分類取依賴于掩碼預測。

    • Mask R-CNN方法增加了第三個分支的輸出:進一步的是為每個RoI生成了一個目標掩碼(二元掩碼)。目標掩碼與已有的class和box輸出的不同在于它需要對目標的空間布局有一個更精細的提取。

    • 掩碼分支對于每個RoI的輸出維度假設即K個分辨率為m×m的二進制掩碼,每個類別一個,K表示類別數量。

6.6.1.3 RoIAlign

  • 回顧:Faster-rcnn中的ROIPool是一種針對每一個在特征圖中映射得到的Region of Interested的提取一個小尺度特征圖(比如說7x7)的標準操作,它用以解決將不同尺度的ROI提取成相同尺度的特征大小的問題。

但是由于我們要實現像素級的 mask 圖像, 所以如果仍然使用 Fast RCNN 中的 RoIPool 的話, 會出現一些誤差:因為特征圖上的 RoI 池化為固定大小 (比如 7×7) 的盒子 (bins) 時也可能存在取整操作。這些取整會使得 RoI 與提取的特征之間存在偏差, 這樣小的偏差對分類基本沒什么影像, 但是對像素級的分割必然會產生較大的負面影響。

  • 原圖800x800,經過VGG得到下采樣32倍之后的25x25的特征圖大小,RoI大小為665x665,所以轉換到特診途中為20x20(取整之后的),然后通過ROIPool的時候又要做7x7最大池化分成49塊,顯然,每個矩形塊區域的邊長為2.86,又含有小數,于是ROI Pooling 再次調整到2。
  • 經過兩次的調整得到候選區域已經出現了很大的誤差了。
    • 原因:為什么很大呢?
    • 注意到特征圖上的 1 個像素的誤差會引起原始圖像 16 個像素的誤差, 如果池化了五次則會導致 32 個像素的誤差
    • 該層特征圖上0.1個像素的偏差,縮放到原圖就是3.2個像素。那么0.8的偏差,在原圖上就是接近30個像素點的差別,影響還是很大的。

提出RoIAlign 的方法

主要包含三點:

  • 1、預選框的大小保持浮點數狀態不做取整
  • 2、RoI 分割為 7×7 的單元時每個單元的邊界不做取整
  • 3、使用雙線性內插法,在每個單元中采樣四個固定位置的值進行池化

2、做法

1、假定原圖中有一region proposal,還是大小為665x665,這樣,映射到特征圖中的大小:665/32=20.78,即20.78x20.78,此時,沒有像RoiPooling那樣就行取整操作,保留浮點數。

2、假定pooled_w=7,pooled_h=7,即pooling后固定成7x7大小的特征圖,所以,將在 feature map上映射的20.78x20.78的region proposal 劃分成49個同等大小的小區域,每個小區域的大小20.78/7=2.97,即2.97x2.97,得到下圖共49個這樣的大小的區域。

  • 步驟 1:假定采樣點數為4,即表示,對于每個2.97x2.97的小區域,平分四份,每一份取其中心點位置,而中心點位置的像素,采用雙線性插值法進行計算。一個2.97 x2.97的區域就會得到四個點的像素值。

  • 步驟2:取四個像素值中最大值作為這個小區域(即:2.97x2.97大小的區域)的像素值,如此類推,同樣是49個小區域得到49個像素值,組成7x7大小的feature map

6.6.1.3 對比兩種方式

  • 對于檢測圖片中大目標物體時(VOC2007),兩種方案的差別不大
  • 而如果是圖片中有較多小目標物體需要檢測(COCO2017),則優先選擇RoiAlign,更精準些。
    • RoIAlign起到了很大的作用:論文中可以將掩碼準確度提高0.1至0.5

6.6.1.4 主干架構(backbone architecture)的head結構(Mask預測部分)

論文中嘗試的網絡主干 (backbone) 結構有:

  • 1、ResNet-50-C4
  • 2、ResNet-101-C4
  • 3、ResNeXt-101
  • 4、ResNet-50-FPN
  • 5、ResNet-101-FPN

注: Faster RCNN 使用 ResNets 的原始實現中從第四階段的最后一次卷積之后提取特征, 我們稱之為 C4. FPN 是指 Feature Pyramid Network

用于分類回歸和分割的網絡頭部 (head) 結構(頭部結構):

  • 每個候選區域經過ROIAlign得到:分類和回歸部分保持 Faster RCNN 中的結構不變, ResNet-C4 主干結構中額外添加 ResNet 的第五階段
  • 每個候選區域經過ROIAlign得到:分割部分使用全卷積作為 mask 預測分支
    • 其實就是得到了圖片中某個物體的像素屬于哪個類別(0/1)

  • 上圖為兩個結構對應的mask部分設置
  • 數字表示分辨率或通道數,箭頭表示卷積、反卷積、全連接層. 所有的卷積都是 3×3 的
    • 1、輸出層的卷積除外 (是 1×1 的)
    • 2、反卷積是 2×2 的, 步長為 2, 使用 ReLU 激活
    • 3、左邊: 'res5' 表示 ResNet 的第五個階段, 右邊: '×4' 表示 4 個連續的卷積

6.6.1.4 訓練細節

1、多任務損失函數

Mask RCNN 仍然使用兩階段方法, 在第二階段添加了 mask 分支, 損失函數為:

注:分類損失Lcls和檢測框損失Lbox與中定義的相同。其中

  • mask的損失計算
    • 對于每個RoI,掩碼分支都有一個[m, m, K]維輸出,該輸出編碼K個分辨率為m×m的二進制掩碼,每個K類中的一個掩碼。KK大寫為總類別,kk小寫為其中一個類別
    • 對于每個RoI區域,找到對應分配的GT類別kk,Lmask定義的時候,只是定義了對應k這個地方的mask。

  • 假設最后得到的7x7的掩碼,那么每個像素的對應是假設80個類別中的一個進行損失計算,不是有80個預測結果。
    • 而是只有某個位置進行了sigmoid處理之后,得到的結果與GT的kk進行邏輯回歸損失計算。其他的地方不貢獻損失
  • 為什么不算所有的:
    • 因為是一個RoI區域對應一個類別,這個區域已經很小了,就只屬于這個類別即可。可以看做這些像素是一個整體類別

這與FCN方法是不同,FCN是對每個像素進行多類別softmax分類,然后計算交叉熵損失,這種做法是會造成類間競爭的,而每個類別使用sigmoid輸出并計算二值損失,可以避免類間競爭。實驗表明,通過這種方法,可以較好地提升性能。

2、訓練

  • 1、正負樣本:ground truth box 的 IoU 重合度超過 0.5 的 RoI 視為正例, 否則為反例.
    • Mask 損失只定義在正例上. Mask 分支每個 RoI 可以預測 K (總類別數) 個 masks, 但我們只使用第 k 個, 這里的 k 是分類分支預測出的類別
  • 2、圖像 resize 到短邊為 800 像素.
  • 3、每個 mini-batch 每個 GPU 使用兩張圖, 每張圖有 N 個采樣的 RoIs, 正負樣本數比例為 1:3
    • C4 主干的 N=64, FPN 主干的 N=512.
  • 4、參數:在 8 塊 GPU 上訓練 160k 步, 在第 120k 步的時候學習率從 0.02 下降到 0.002. 使用 0.0001 的權重衰減和 0.9 的動量.
  • 5、RPN 的 anchor 使用了 5 種尺寸和 3 種比例, 與 FPN 中一致。一共15中類別的先驗框

3、運行效果:

模型可以在GPU上以200毫秒每幀的速度運行,使用一臺有8個GPU的機器,在COCO上訓練需要一到兩天的時間。

4、測試階段

  • 1、C4 的 proposals 的數量為 300, FPN 為 1000.
  • 2、在所有的 proposals 上都進行 Bbox 回歸, 最后應用 NMS
  • 3、Mask 分支使用得分最高的 100 個檢測框
    • m×m 的浮點數的 mask 輸出 resize 到 RoI 的大小, 然后應用 0.5 的閾值進行二值化。

6.6.4 效果

6.6.4.1 目標分割

Mask R-CNN超越了COCO實例分割任務上所有先前最先進的單一模型結果,其中包括COCO 2016挑戰優勝者。作為副產品,我們的方法也優于COCO對象檢測任務。

實例分割:MaskRCNN每個物體對象對應到一個類別,還有得到位置。所以能區分圖片中同類別物體但是位置不一樣

與以往實例分割算法比較

將Mask R-CNN與其它最先進的目標分割方法進行比較,如下表(表1)所示:(COCO test-dev上的目標分割掩碼AP。?MNC和FCIS分別是COCO 2015和2016分割挑戰的獲勝者。Mask R-CNN優于更復雜的,包含多尺度訓練和測試、水平翻轉測試的FCIS+++,和OHEM。所有條目都是單模型的結果。)

對比:

FCIS+++對比 Mask R-CNN(ResNet-101-FPN)。 FCIS在重疊對象上有問題,Mask R-CNN沒問題。

6.6.4.2 消融實驗

  • 1、結構上:表a顯示了具有各種使用不同下層網絡的Mask R-CNN。受益于更深層次的網絡(50對比101)和高級設計,包括FPN和ResNeXt。我們注意到并不是所有的框架都會從更深層次的或高級的網絡中自動獲益

  • 2、獨立與非獨立掩碼:Mask R-CNN解耦了掩碼和類預測:由于現有的檢測框分支預測類標簽,所以我們為每個類生成一個掩碼,而不會在類之間產生競爭(通過像素級Sigmoid和二值化損失)。在表b中,這些方法將掩碼和類預測的任務結合,導致了掩碼AP(5.5個點)的嚴重損失。

  • 3、RoIAlign:表c顯示了對提出的RoIAlign層的評估。對于這個實驗,使用的下層網絡為ResNet-50-C4,其步進為16。RoIAlign相對RoIPool將AP提高了約3個點,在高IoU(AP75)結果中增益更多

  • 采用雙線性采樣的ROIAlign與提出的RoIWarp進行比較,RoIWarp仍然四舍五入了RoI,與輸入失去了對齊。從表c可以看出,RoIWarp與RoIPool效果差不多,比RoIAlign差得多。這突出表明正確的對齊是關鍵。

  • 4、掩碼分支:

    分割是一個像素到像素的任務,我們使用FCN來利用掩碼的空間布局。在表e中,我們使用ResNet-50-FPN下層網絡來比較多層感知機(MLP)和FCN。使用FCN可以提供超過MLP 2.1個點的AP增益。為了與與MLP進行公平的比較,FCN的上層網絡的卷積層沒有被預訓練。

6.6.4.3 目標檢測結果

在COCO數據集上將Mask R-CNN與其它最先進的目標檢測方法進行比較,如下表所示:(目標檢測結果(目標邊界框AP),單模型,在test-dev上與其它最先進的技術對比。使用ResNet-101-FPN的Mask R-CNN優于所有先前最先進的模型的基本變體(實驗中忽略了掩碼輸出)。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,該模型的性能優于中提出的模型。但是比Mask R-CNN低0.9個點的AP。這個差距這是由于Mask R-CNN的多任務訓練產生的。

6.6.4.4 Cityscapes上的實驗

Cityscapes數據集的目標分割結果。該數據集具有精細標注的2975個訓練圖像,500個驗證圖像和1525個測試圖像。它還有20k粗糙的訓練圖像,無精細標注,Cityscapes數據集的主要挑戰是訓練數據較少,特別是對于卡車,公共汽車和火車的類別,每個類別的訓練樣本大約有200-500個。所有圖像的分辨率為2048 x 1024像素。目標分割任務涉及8個對象類別,其訓練集中的總共目標數為

人騎手小汽車卡車公交車火車摩托車自行車
17.9k1.8k26.9k0.5k0.4k0.2k0.7k3.7k

該任務的目標分割性能由和COCO一樣的AP(在IoU閾值上平均)來測量,也包括AP50(即,IoU為0.5的掩碼AP)。

實現:

  • 1、Mask R-CNN模型使用的下層網絡是ResNet-FPN-50,也測試了對應的101層的網絡,不過由于數據集比較小,性能相似。
  • 2、將圖像在[800,1024]像素范圍內隨機縮放(較短邊)進行訓練,從而減少過擬合。測試時則統一縮放到1024像素。
  • 3、使用的批量大小為每個GPU 1個圖像(實際上8個GPU上有8個),學習率為0.01,迭代次數為24k,在迭代次數達到18k時,學習率減少到0.001

結果:我們在測試集和驗證集上,將我們的結果與其它主流方法進行了比較,使用預先訓練好的COCO Mask R-CNN模型(騎手類別被隨機初始化)。如下表(表7)所示:

  • 1、對于人和小汽車類別,Cityscapes數據集包含了大量的類內重疊目標(每個圖像平均6人和9輛小汽車)。類內重疊是目標分割的核心難點。論文的方法在這兩個類別相對前最佳結果有大幅度改善(人相對提升了約85%,從16.5提高到30.5,小汽車相對提升了約30%,從35.7提高到46.9)
  • 2、使用COCO預訓練的Mask R-CNN模型在測試集上達到了32.0 AP,比不預訓練的模型提高了6個點。這表明足夠的訓練數據的重要性。
  • 3、觀察到測試集和訓練集AP之間的偏差,偏差主要是由卡車,公共汽車和火車類別造成的,其中只使用精細標注訓練數據的模型,在驗證集和測試集上的AP分別為28.8/22.8,53.5/32.2和33.0/18.6。這表明這些訓練數據很少的類別存在domain shift。 COCO預訓練有助于改善這些類別上的結果,然而,domain shift依然存在,在驗證集和測試集上的AP分別為38.0/30.1,57.5/40.9和41.2/30.9。

Cityscapes的結果示例如下圖:

6.6.4.5 Mask R-CNN人體姿態估計(了解)

通過COCO關鍵點數據集上的人體姿態估計任務來展示論文框架的通用性。通過將每個關鍵點視為one-hot二進制掩碼,只需要很少的修改,Mask R-CNN可以應用于人體關鍵點檢測。不需要額外的技巧,Mask R-CNN超過了COCO 2016人體關鍵點檢測比賽的冠軍,同時運行速度可達5 FPS。因此,Mask R-CNN可以被更廣泛地看作是用于目標級識別的靈活框架,并且可以容易地擴展到更復雜的任務。

總結

以上是生活随笔為你收集整理的图像目标分割_6 Mask RCNN的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。