Keras框架:實例分割Mask R-CNN算法實現及實現

實例分割

實例分割(instance segmentation)的難點在于:
需要同時檢測出目標的位置并且對目標進行分割,所以這就需要融合目標檢測(框出目標的位置)以及語義分割(對像素進行分類,分割出目 標)方法。

實例分割–Mask R-CNN

Mask R-CNN可算作是Faster R-CNN的升級版。
Faster R-CNN廣泛用于對象檢測。對于給定圖像,它會給圖中每個對象加上類別標簽與邊界框坐標。 Mask R-CNN框架是以Faster R-CNN為基礎而架構的。因此,針對給定圖像, Mask R-CNN不僅會 給每個對象添加類標簽與邊界框坐標,還會返回其對象掩膜。
在這里插入圖片描述

Mask R-CNN的抽象架構:

在這里插入圖片描述
Mask R-CNN在進行目標檢測的同時進行實例分割,取得了出色的效果
在這里插入圖片描述

Faster R-CNN與 Mask R-CNN

Mask-RCNN 大體框架還是 Faster-RCNN 的框架,可以說在基礎特征網絡之后又加入了全連接的分割 子網,由原來的兩個任務(分類+回歸)變為了三個任務(分類+回歸+分割)。Mask R-CNN 是一個 兩階段的框架,第一個階段掃描圖像并生成提議(proposals,即有可能包含一個目標的區域),第二 階段分類提議并生成邊界框和掩碼。
在這里插入圖片描述
與Faster RCNN的區別:
1)使用ResNet網絡
2)將 Roi Pooling 層替換成了 RoiAlign;
3)添加并列的 Mask 層;
4)引入FPN

Mask R-CNN流程

在這里插入圖片描述
Mask R-CNN 流程:

  1. 輸入一幅你想處理的圖片,然后進行對應的預處理操作,獲得預處理后的圖片;
  2. 將其輸入到一個預訓練好的神經網絡中(ResNet等)獲得對應的feature map;
  3. 對這個feature map中的每一點設定預定個的ROI,從而獲得多個候選ROI;
  4. 將這些候選的ROI送入RPN網絡進行二值分類(positive或negative)和BB回歸,過濾掉一部分候 選的ROI(截止到目前,Mask和Faster完全相同);
  5. 對這些剩下的ROI進行ROIAlign操作(ROIAlign為Mask R-CNN創新點1,比ROIPooling有長足進 步);
  6. 最后,對這些ROI進行分類(N類別分類)、BB回歸和MASK生成(在每一個ROI里面進行FCN操作) (引入FCN生成Mask是創新點2,使得此網絡可以進行分割型任務)。

? backbone:Mask-RCNN使用 Resnet101作為主干特征提取網絡, 對應著圖像中的CNN部分。(當然 也可以使用別的CNN網絡)
? 在進行特征提取后,利用長寬壓縮了 兩次、三次、四次、五次的特征層來 進行特征金字塔結構的構造。
在這里插入圖片描述

Mask R-CNN:Resnet101

1.Resnet 中 Conv Block和Identity Block的結構:
其中Conv Block輸入和輸出的維度是不一樣的,所以不能連續串聯,它的作用是改變網絡的維度; Identity Block輸入維度和輸出維度相同,可以串聯,用于加深網絡
在這里插入圖片描述

特征金字塔-Feature Pyramid Networks(FPN)

? 目標檢測任務和語義分割任務里面常常需要檢測小目標。但是當小目標比較小時,可能在原 圖里面只有幾十個像素點。
? 對于深度卷積網絡,從一個特征層卷積到另一個特征層,無論步長是1還是2還是更多,卷積 核都要遍布整個圖片進行卷積,大的目標所占的像素點比小目標多,所以大的目標被經過卷 積核的次數遠比小的目標多,所以在下一個特征層里,會更多的反應大目標的特點。
? 特別是在步長大于等于2的情況下,大目標的特點更容易得到保留,小目標的特征點容易被跳 過。
? 因此,經過很多層的卷積之后,小目標的特點會越來越少。
在這里插入圖片描述
特征圖(feature map)用藍色輪廓表示, 較粗的輪廓表示語義上更強的特征圖。
a. 使用圖像金字塔構建特征金字塔。 特征是根據每個不同大小比例的圖 像獨立計算的,每計算一次特征都 需要resize一下圖片大小,耗時, 速度很慢。
b. 檢測系統都在采用的為了更快地檢 測而使用的單尺度特征檢測。
c. 由卷積計算的金字塔特征層次來進 行目標位置預測,但底層feature map特征表達能力不足。
d. 特征金字塔網絡(FPN)和b,c一樣快, 但更準確。

FPN的提出是為了實現更好的feature maps融合,一般的網絡都是直接使用最后一層的feature maps,雖然最后一層的 feature maps 語義強,但是位置和分辨率都比較低,容易 檢測不到比較小的物體。FPN的功能就是融合了底層到高層 的feature maps ,從而充分的利用了提取到的各個階段的 特征(ResNet中的C2-C5)。
在這里插入圖片描述
2. 特征金字塔FPN的構建
? 特征金字塔FPN的構建是為了實現特征多 尺度的融合,在Mask R-CNN當中,我們取出在主干特征提取網絡中長寬壓縮了兩次 C2、三次C3、四次C4、五次C5的結果來進 行特征金字塔結構的構造。
? P2-P5是將來用于預測物體的bbox,box- regression,mask的。
? P2-P6是用于訓練RPN的,即P6只用于RPN 網絡中。
在這里插入圖片描述

Mask R-CNN:Roi-Align

3.Roi-Align
Mask-RCNN中提出了一個新的思想就是RoIAlign,其實RoIAlign就是在RoI pooling上稍微改動過 來的,但是為什么在模型中不繼續使用RoI pooling呢?
在這里插入圖片描述
在RoI pooling中出現了兩次的取整,雖然在feature maps上取整看起來只是小數級別的數,但是當 把feature map還原到原圖上時就會出現很大的偏差,比如第一次的取整是舍去了0.78(665/32=20.78),還原到原圖時是20*32=640,第一次取整就存在了25個像素點的偏差,在第二 次的取整后的偏差更加的大。對于分類和物體檢測來說可能這不是一個很大的誤差,但是對于實例分割而言,這是一個非常大的偏差,因為mask出現沒對齊的話在視覺上是很明顯的。而RoIAlign 的提出就是為了解決這個不對齊問題。
在這里插入圖片描述
RoIAlign的思想其實很簡單,就是取消了取整的這種粗暴做法,而是通過雙線性插值來得到固定四 個點坐標的像素值,從而使得不連續的操作變得連續起來,返回到原圖的時候誤差也就更加的小。 它充分的利用了原圖中虛擬點(比如20.56這個浮點數。像素位置都是整數值,沒有浮點值)四周 的四個真實存在的像素值來共同決定目標圖中的一個像素值,即可以將20.56這個虛擬的位置點對 應的像素值估計出來。
在這里插入圖片描述
? 藍色的虛線框表示卷積后獲得的feature map,黑色實線框表示ROI feature。
? 最后需要輸出的大小是2x2,那么我們就利用雙線性插值來估計這些藍點(虛擬坐標點,又稱雙線 性插值的網格點)處所對應的像素值,最后得到相應的輸出。
? 然后在每一個橘紅色的區域里面進行max pooling或者average pooling操作,獲得最終2x2的輸出結果。我們的整個過程中沒有用到量化操作,沒有引入誤差,即原圖中的像素和feature map中的 像素是完全對齊的,沒有偏差,這不僅會提高檢測的精度,同時也會有利于實例分割。

Mask R-CNN:分割掩膜

4. 分割掩膜
基于交并比值獲得感興趣區域(ROI)后,給已有框架加上一個掩膜分支,每個囊括特定對象的區域都會被賦予一個掩膜。每個區域都會被賦予一個m×n掩膜,并按比例放大以便推斷。
在這里插入圖片描述
mask語義分割信息的獲取
在之前的步驟中,我們獲得了預測框,我們把這個預測框作為mask模型的區域截取部分,利用這個預測框對mask模型中用到的公用特征層進行截取。
截取后,利用mask模型再對像素點進行分類,獲得語義分割結果。
mask分支采用FCN對每個RoI產生一個Kmm的輸出,即K個分辨率為mm的二值的掩膜,K為分類物體的種類數目。
K
mm二值mask結構解釋:最終的FCN輸出一個K層的mask,每一層為一類。用0.5作為閾值進行二值化,產生背景和前景的分割Mask。
在這里插入圖片描述
對于預測的二值掩膜輸出,我們對每個像素點應用sigmoid函數(或softmax等),整體損失定義為平均二值交叉損失熵。引入預測K個輸出的機制,允許每個類都生成獨立的掩膜,避免類間競爭。這樣做解耦了掩膜和種類預測。
在這里插入圖片描述
Mask R-CNN的損失函數為:
在這里插入圖片描述
Lmask 使得網絡能夠輸出每一類的 mask,且不會有不同類別 mask 間的競爭:
? 分類網絡分支預測 object 類別標簽,以選擇輸出 mask。對每一個ROI,如果檢測得到的ROI屬于哪 一個分類,就只使用哪一個分支的交叉熵誤差作為誤差值進行計算。
? 舉例說明:分類有3類(貓,狗,人),檢測得到當前ROI屬于“人”這一類,那么所使用的Lmask為 “人”這一分支的mask,即每個class類別對應一個mask可以有效避免類間競爭(其他class不貢獻Loss)
? 對每一個像素應用sigmoid,然后取RoI上所有像素的交叉熵的平均值作為Lmask。
**最后網絡輸出為14
14或者28*28大小的mask,如何與原圖目標對應?**
需要一個后處理,將模型預測的mask通過resize得到與proposal中目標相同大小的mask。
在這里插入圖片描述

Mask R-CNN—總結

主要改進點:

  1. 基礎網絡的增強,ResNeXt-101+FPN的組合可以說是現在特征學習的王牌了;
  2. 分割 loss 的改進, 二值交叉熵會使得每一類的 mask 不相互競爭,而不是和其他類別的 mask 比較 ;
  3. ROIAlign解決不對齊的問題,就是對 feature map 的插值。直接的ROIPooling的那種量化操作會使得 得到的mask與實際物體位置有一個微小偏移,是工程上更好的實現方式。

Mask R-CNN:COCO數據集

MS COCO的全稱是Microsoft Common Objects in Context,起源于微軟于2014年出資標注的 Microsoft COCO數據集,與ImageNet競賽一樣,被視為是計算機視覺領域最受關注和最權威的 比賽之一。
COCO數據集是一個大型的、豐富的物體檢測,分割和字幕數據集。這個數據集以scene understanding為目標,主要從復雜的日常場景中截取圖像中的目標,通過精確的segmentation 進行位置的標定。
包括:

  1. 對象分割;
  2. 在上下文中可識別;
  3. 超像素分割;
  4. 330K圖像(> 200K標記);
  5. 150萬個對象實例;
  6. 80個對象類別;
  7. 91個類別;
  8. 每張圖片5個字幕;
  9. 有關鍵點的250,000人;

代碼實現

在資源中

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/389450.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/389450.shtml
英文地址,請注明出處:http://en.pswp.cn/news/389450.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

機器學習 缺陷檢測_球檢測-體育中的機器學習。

機器學習 缺陷檢測🚩 目標 (🚩Objective) We want to evaluate the quickest way to detect the ball in a sport event in order to develop an Sports AI without spending a million dollars on tech or developers. Quickly we find out that detec…

莫煩Pytorch神經網絡第二章代碼修改

import torch import numpy as np""" Numpy Torch對比課程 """ # #tensor與numpy格式數據相互轉換 # np_data np.arange(6).reshape((2,3)) # print(np_data) # # torch_data torch.from_numpy(np_data) # print(\n,torch_data) # # tensor2ar…

自定義字符類

當 VC不使用MFC,無法使用屬于MFC的CString,為此自定義一個,先暫時使用,后續完善。 頭文件: #pragma once#define MAX_LOADSTRING 100 // 最大字符數class CString {public:char *c_str, cSAr[MAX_LOADSTRING];WCHAR *w…

使用python和javascript進行數據可視化

Any data science or data analytics project can be generally described with the following steps:通常可以通過以下步驟來描述任何數據科學或數據分析項目: Acquiring a business understanding & defining the goal of a project 獲得業務理解并定義項目目…

Android 事件處理

事件就是用戶對圖形的操作,在android手機和平板電腦上,主要包含物理按鍵事件和觸摸屏事件兩類。物理按鍵事件包含:按下、抬起、長按等;觸摸屏事件主要包含按下、抬起、滾動、雙擊等。 在View中提供了onTouchEvent()方法&#xff0…

莫煩Pytorch神經網絡第三章代碼修改

3.1Regression回歸 import torch import torch.nn.functional as F from torch.autograd import Variable import matplotlib.pyplot as plt""" 創建數據 """x torch.unsqueeze(torch.linspace(-1,1,100),dim1) y x.pow(2) 0.2*torch.rand(x…

為什么餅圖有問題

介紹 (Introduction) It seems as if people are split on pie charts: either you passionately hate them, or you are indifferent. In this article, I am going to explain why pie charts are problematic and, if you fall into the latter category, what you can do w…

New Distinct Substrings(后綴數組)

New Distinct Substrings&#xff08;后綴數組&#xff09; 給定一個字符串&#xff0c;求不相同的子串的個數。\(n<50005\)。 顯然&#xff0c;任何一個子串一定是后綴上的前綴。先&#xff08;按套路&#xff09;把后綴排好序&#xff0c;對于當前的后綴\(S_i\)&#xff0…

Android dependency 'com.android.support:support-v4' has different version for the compile (26.1.0...

在項目中加入react-native-camera的時候 出現的錯誤. 解決方案: 修改 implementation project(:react-native-camera)為 implementation (project(:react-native-camera)) {exclude group: "com.android.support"}查看原文 Could not find play-services-basement.aa…

先知模型 facebook_使用Facebook先知進行犯罪率預測

先知模型 facebookTime series prediction is one of the must-know techniques for any data scientist. Questions like predicting the weather, product sales, customer visit in the shopping center, or amount of inventory to maintain, etc - all about time series …

莫煩Pytorch神經網絡第四章代碼修改

4.1CNN卷積神經網絡 import torch import torch.nn as nn from torch.autograd import Variable import torch.utils.data as Data import torchvision import matplotlib.pyplot as pltEPOCH 1 BATCH_SIZE 50 LR 0.001 DOWNLOAD_MNIST False #如果數據集已經下載到…

github gists 101使代碼共享漂亮

If you’ve been going through Medium, looking at technical articles, you’ve undoubtedly seen little windows that look like the below:如果您一直在閱讀Medium&#xff0c;并查看技術文章&#xff0c;那么您無疑會看到類似于以下內容的小窗口&#xff1a; def hello_…

loj #6278. 數列分塊入門 2

題目 題解 區間修改&#xff0c;詢問區間小于c的個數。分塊排序&#xff0c;用vector。至于那個塊的大小&#xff0c;好像要用到均值不等式 我不太會。。。就開始一個個試&#xff0c;發現sizsqrt(n)/4時最快&#xff01;&#xff01;&#xff01;明天去學一下算分塊復雜度的方…

基于Netty的百萬級推送服務設計要點

1. 背景1.1. 話題來源最近很多從事移動互聯網和物聯網開發的同學給我發郵件或者微博私信我&#xff0c;咨詢推送服務相關的問題。問題五花八門&#xff0c;在幫助大家答疑解惑的過程中&#xff0c;我也對問題進行了總結&#xff0c;大概可以歸納為如下幾類&#xff1a;1&#x…

莫煩Pytorch神經網絡第五章代碼修改

5.1動態Dynamic import torch from torch import nn import numpy as np import matplotlib.pyplot as plt# torch.manual_seed(1) # reproducible# Hyper Parameters INPUT_SIZE 1 # rnn input size / image width LR 0.02 # learning rateclass…

鮮為人知的6個黑科技網站_6種鮮為人知的熊貓繪圖工具

鮮為人知的6個黑科技網站Pandas is the go-to Python library for data analysis and manipulation. It provides numerous functions and methods that expedice the data analysis process.Pandas是用于數據分析和處理的Python庫。 它提供了加速數據分析過程的眾多功能和方法…

VRRP網關冗余

實驗要求?1、R1創建環回口&#xff0c;模擬外網?2、R2&#xff0c;R3使用VRRP技術?3、路由器之間使用EIGRP路由協議? 實驗拓撲? 實驗配置??R1(config)#interface loopback 0R1(config-if)#ip address 1.1.1.1 255.255.255.0R1(config-if)#int e0/0R1(config-if)#ip addr…

網頁JS獲取當前地理位置(省市區)

網頁JS獲取當前地理位置&#xff08;省市區&#xff09; 一、總結 一句話總結&#xff1a;ip查詢接口 二、網頁JS獲取當前地理位置&#xff08;省市區&#xff09; 眼看2014又要過去了&#xff0c;翻翻今年的文章好像沒有寫幾篇&#xff0c;忙真的或許已經不能成為借口了&#…

大熊貓卸妝后_您不應錯過的6大熊貓行動

大熊貓卸妝后數據科學 (Data Science) Pandas is used mainly for reading, cleaning, and extracting insights from data. We will see an advanced use of Pandas which are very important to a Data Scientist. These operations are used to analyze data and manipulate…

數據eda_關于分類和有序數據的EDA

數據eda數據科學和機器學習統計 (STATISTICS FOR DATA SCIENCE AND MACHINE LEARNING) Categorical variables are the ones where the possible values are provided as a set of options, it can be pre-defined or open. An example can be the gender of a person. In the …