0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是Mask R-CNN?Mask R-CNN的工作原理

zhKF_jqr_AI ? 來源:未知 ? 作者:李倩 ? 2018-07-20 08:53 ? 次閱讀

編者按:發(fā)展至今,計算機視覺已經(jīng)產(chǎn)生了不少令人驚嘆的應(yīng)用,但一提到它,人們首先想到的總是人臉檢測、物品識別……除去已經(jīng)發(fā)展得很成熟的人臉識別技術(shù),我們難道只能用檢測室內(nèi)物品來練習(xí)技巧嗎?作為一個極具工程價值的領(lǐng)域,也許大家應(yīng)當擴張技術(shù)應(yīng)用的廣度,把它和現(xiàn)實場景結(jié)合起來,真正做一些更接地氣的嘗試。

本文旨在構(gòu)建一個自定義Mask R-CNN模型,它可以檢測汽車車身的損壞區(qū)域(如下圖所示)。這背后的應(yīng)用理念是,購買二手車時,消費者首先會關(guān)注車身刮擦情況,有了這個模型,他們足不出戶就能大致了解車子情況,避免被坑。而對于日常生活中的小事故,如果用戶只需上傳圖片就能完成車輛破損鑒定,保險公司的索賠效率也會大幅提高。

什么是Mask R-CNN?

Mask R-CNN是一個實例分割模型,它能確定圖片中各個目標的位置和類別,給出像素級預(yù)測。所謂“實例分割”,指的是對場景內(nèi)的每種興趣對象進行分割,無論它們是否屬于同一類別——比如模型可以從街景視頻中識別車輛、人員等單個目標。下圖是在COCO數(shù)據(jù)集上訓(xùn)練好的Mask R-CNN,如圖所示,大到每一輛車,小到單根香蕉,它都能用窗口標出目標物品在畫面中的像素位置。

不同于Faster R-CNN這樣的經(jīng)典對象檢測模型,Mask R-CNN的一個特點是可以給窗口內(nèi)表示對象輪廓的像素著色??赡苡腥藭X得這是個雞肋功能,但它對自動駕駛汽車和機器人控制意義非凡:

著色可以幫助汽車明確道路上各目標的具體像素位置,從而避免發(fā)生碰撞;

如果機器人想抓取某個目標物品,它就需要知道位置信息(如亞馬遜無人機)。

如果只是單純想在COCO上訓(xùn)練Mask R-CNN模型,最簡單的方法是調(diào)用Tensorflow Object Detection API,具體內(nèi)容Github都有,此處不再詳談。

Mask R-CNN的工作原理

在構(gòu)建Mask R-CNN模型之前,我們首先來了解一下它的工作機制。

事實上,Mask R-CNN是Faster R-CNN和FCN的結(jié)合,前者負責(zé)物體檢測(分類標簽+窗口),后者負責(zé)確定目標輪廓。如下圖所示:

它的概念很簡單:對于每個目標對象,F(xiàn)aster R-CNN都有兩個輸出,一是分類標簽,二是候選窗口;為了分割目標像素,我們可以在前兩個輸出的基礎(chǔ)上增加第三個輸出——指示對象在窗口中像素位置的二進制掩模(mask)。和前兩個輸出不同,這個新輸出需要提取更精細的空間布局,為此,Mask R-CNN在Faster-RCNN上添加一個分支網(wǎng)絡(luò):Fully Convolution Networ(FCN)。

FCN是一種流行的語義分割算法,所謂語義分割,就是機器自動從圖像中分割出對象區(qū)域,并識別其中的內(nèi)容。該模型首先通過卷積和最大池化層把輸入圖像壓縮到原始大小的1/32,然后在這個細粒度級別進行分類預(yù)測。最后,它再用上采樣和deconvolution層把圖還原成原始大小。

因此簡而言之,我們可以說Mask R-CNN結(jié)合了兩個網(wǎng)絡(luò)——把Faster R-CNN和FCN納入同一巨型架構(gòu)。模型的損失函數(shù)計算的是分類、生成窗口、生成掩模的總損失。

此外,Mask R-CNN還做了一些基礎(chǔ)改進,使其比FCN更精確,具體可以閱讀論文。

構(gòu)建用于檢測汽車漆面情況的Mask R-CNN模型

GitHub:github.com/matterport/Mask_RCNN

這是一個在Python 3、Keras和TensorFlow上實現(xiàn)Mask R-CNN的現(xiàn)成資源。雖然最近TensorFlow目標檢測庫也更新了和Mask R-CNN相關(guān)的資源,但如果想一帆風(fēng)順地搭建模型,我們還是推薦這個,用TensorFlow太容易出bug了。

當然,這不是不鼓勵大家去勇敢試錯,畢竟熟悉了這些錯誤,我們才能更好地理解整個過程。但這個實現(xiàn)絕對值得收藏。

收集數(shù)據(jù)

考慮到本文只是演示,這里我們只Google了66張受損車輛圖像(50張訓(xùn)練集,16張驗證集)。如果想做個大點的數(shù)據(jù)集,建議把搜索關(guān)鍵詞設(shè)為“damaged car painting”,用中文容易出現(xiàn)一大堆補漆廣告,搜車禍則是大量引擎蓋變形圖。下面是一些圖像樣本

注釋數(shù)據(jù)

為了構(gòu)建Mask R-CNN模型,首先我們要對圖像進行注釋,標出其中的損壞區(qū)域。我們使用的注釋工具是VGG Image Annotator?—?v 1.0.6,它有一個在線版本。除了常規(guī)圖形,它也允許我們繪制多邊形蒙版:

注釋完后,記得把它們下載下來,保存為.json格式。這里是注釋好的66幅圖。

訓(xùn)練模型

完成上述步驟,現(xiàn)在我們就可以訓(xùn)練模型了。首先,把GitHub里的東西復(fù)制下來,然后加載我們的圖像和注釋。

classCustomDataset(utils.Dataset):

def load_custom(self, dataset_dir, subset):

"""Load a subset of the Balloon dataset.

dataset_dir: Root directory of the dataset.

subset: Subset to load: train or val

"""

# 添加類別標簽,我們只有一個

self.add_class("damage", 1, "damage")

# 訓(xùn)練集和驗證集

assert subset in ["train", "val"]

dataset_dir = os.path.join(dataset_dir, subset)

# 我們主要關(guān)心每個區(qū)域的x和y坐標

annotations1 = json.load(open(os.path.join(dataset_dir, "via_region_data.json")))

annotations = list(annotations1.values()) # don't need the dict keys

# 即使沒有任何注釋工具也會把圖像保存在JSON中

# 跳過未注釋圖像。

annotations = [a for a in annotations if a['regions']]

# 添加圖像

for a in annotations:

# 獲取構(gòu)成每個對象實例輪廓多邊形點的x,y坐標

# 它們在shape_attributes里((參見上面的json格式))

polygons = [r['shape_attributes'] for r in a['regions'].values()]

# 輸入圖像大小后,load_mask()才能把多邊形轉(zhuǎn)成蒙版

image_path = os.path.join(dataset_dir, a['filename'])

image = skimage.io.imread(image_path)

height, width = image.shape[:2]

self.add_image(

"damage", ## 如果只有一類,只需在此處添加名稱即可

image_id=a['filename'], # use file name as a unique image id

path=image_path,

width=width, height=height,

polygons=polygons)

整段代碼在這里。我們復(fù)制了資源里的balloon.py文件,并對它做了修改。需要注意的是,這些代碼只適合包含一個類的問題。

此外,你也可以用這個筆記本內(nèi)容可視化給定圖像上的蒙版。

如果要訓(xùn)練,運行以下代碼:

## 如果用的是在COCO上預(yù)訓(xùn)練的模型

python3 custom.py train --dataset=/path/to/datasetfolder --weights=coco

## 如果是繼續(xù)訓(xùn)練您之前訓(xùn)練過的模型

python3 custom.py train --dataset=/path/to/datasetfolder --weights=last

注:用一個GPU訓(xùn)練10個epoch需要20-30分鐘。

驗證模型

至于模型的權(quán)重和偏差是不是正確的,大家可以參考這個筆記本

。里面列出了許多設(shè)置,可以作為輔助檢查工具。

實驗結(jié)果

如圖所示,模型準確標出了漆面損壞位置。當然,這并不是全部,我們在這個示例里只用了66幅圖,劃痕也比較明顯,所以這個模型的應(yīng)用性非常有限。如果數(shù)據(jù)集夠大,我們完全可以期待一個能檢測微小傷痕的模型,當消費者在家里觀察汽車3D圖時,系統(tǒng)能自動標出一些不顯眼的痕跡,避免乘興而去,敗興而歸。

除了檢測車輛劃痕,你認為Mask R-CNN模型還有什么潛在應(yīng)用呢?

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 機器人
    +關(guān)注

    關(guān)注

    210

    文章

    27989

    瀏覽量

    205540
  • 數(shù)據(jù)集
    +關(guān)注

    關(guān)注

    4

    文章

    1197

    瀏覽量

    24590

原文標題:CV擁抱二手車:構(gòu)建用于檢測汽車漆面破損的R-CNN模型(Python)

文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    手把手教你使用LabVIEW實現(xiàn)Mask R-CNN圖像實例分割(含源碼)

    使用LabVIEW實現(xiàn)Mask R-CNN圖像實例分割
    的頭像 發(fā)表于 03-21 13:39 ?2118次閱讀
    手把手教你使用LabVIEW實現(xiàn)<b class='flag-5'>Mask</b> <b class='flag-5'>R-CNN</b>圖像實例分割(含源碼)

    介紹目標檢測工具Faster R-CNN,包括它的構(gòu)造及實現(xiàn)原理

    在本篇文章中,公司的研究人員介紹了他們在研究過程中所使用的先進目標檢測工具Faster R-CNN,包括它的構(gòu)造及實現(xiàn)原理。
    的頭像 發(fā)表于 01-27 11:49 ?1.8w次閱讀
    介紹目標檢測工具Faster <b class='flag-5'>R-CNN</b>,包括它的構(gòu)造及實現(xiàn)原理

    Mask R-CNN:自動從視頻中制作目標物體的GIF動圖

    用深度學(xué)習(xí)模型——Mask R-CNN,自動從視頻中制作目標物體的GIF動圖。
    的頭像 發(fā)表于 02-03 14:19 ?1.1w次閱讀

    分享下Kaiming大神在CVPR‘18 又有了什么新成果?

    在具體實現(xiàn)過程中,基于Mask R-CNN提出了一種新穎的遷移學(xué)習(xí)方法。Mask R-CNN可以將實例分割問題分解為邊框目標檢測和掩膜預(yù)測兩個子任務(wù)。在訓(xùn)練中分類信息會被編碼到邊框頭單
    的頭像 發(fā)表于 06-20 16:45 ?4788次閱讀
    分享下Kaiming大神在CVPR‘18 又有了什么新成果?

    引入Mask R-CNN思想通過語義分割進行任意形狀文本檢測與識別

    網(wǎng)絡(luò)架構(gòu)由四部分組成,骨干網(wǎng)feature pyramid network (FPN) ,文本候選區(qū)域生成網(wǎng)絡(luò)region proposal network (RPN) ,文本包圍盒回歸網(wǎng)絡(luò)Fast R-CNN ,文本實例分割與字符分割網(wǎng)絡(luò)mask branch。
    的頭像 發(fā)表于 08-07 14:24 ?1.4w次閱讀

    手把手教你操作Faster R-CNNMask R-CNN

    Mask R-CNN是承繼于Faster R-CNN,Mask R-CNN只是在Faster R-CNN
    的頭像 發(fā)表于 04-04 16:32 ?1.3w次閱讀

    一種新的帶有不確定性的邊界框回歸損失,可用于學(xué)習(xí)更準確的目標定位

    目標檢測是一種多任務(wù)學(xué)習(xí)問題,包含目標定位和目標分類。當前最佳的目標檢測器(比如 Faster RCNN、Cascade R-CNNMask R-CNN)都依靠邊界框回歸來定位目標。
    的頭像 發(fā)表于 04-23 16:38 ?6378次閱讀
    一種新的帶有不確定性的邊界框回歸損失,可用于學(xué)習(xí)更準確的目標定位

    基于MASK模型的視頻問答機制設(shè)計方案

    視頻問答是深度學(xué)習(xí)領(lǐng)域的研究熱點之一,廣泛應(yīng)用于安防和廣告等系統(tǒng)中。在注意力機制框架下,建立先驗MASK注意力機制模型,使用 Faster R-CNN模型提取視頻關(guān)鍵幀以及視頻中的對象標簽,將其
    發(fā)表于 03-11 11:43 ?2次下載
    基于<b class='flag-5'>MASK</b>模型的視頻問答機制設(shè)計方案

    基于改進Faster R-CNN的目標檢測方法

    為提高小尺度行人檢測的準確性,提出一種基于改進 Faster r-CNN的目標檢測方法。通過引入基于雙線性插值的對齊池化層,避免感興趣區(qū)域池化過程中兩次量化操作導(dǎo)致的位置偏差,同時設(shè)計基于級聯(lián)的多層
    發(fā)表于 03-23 14:52 ?3次下載
    基于改進Faster <b class='flag-5'>R-CNN</b>的目標檢測方法

    一種基于Mask R-CNN的人臉檢測及分割方法

    針對現(xiàn)有主流的人臉檢測算法不具備像素級分割,從而存在人臉特征具有噪聲及檢測精度不理想的問題提出了一種基于 Mask r-CNN的人臉檢測及分割方法。通過 Res Net-l01結(jié)合RPN網(wǎng)絡(luò)生成候選
    發(fā)表于 04-01 10:42 ?5次下載
    一種基于<b class='flag-5'>Mask</b> <b class='flag-5'>R-CNN</b>的人臉檢測及分割方法

    基于Mask R-CNN的遙感圖像處理技術(shù)綜述

    較為密集,且容易與港口混合。當前對艦船檢測的輸岀結(jié)果主要是檢測框,缺少對艦船掩碼的輸岀,使得無法全面分析岀模型存在的不足;冋時,由于遙感圖像中的艦船??棵芗?,容易產(chǎn)生漏檢問題。為解決上述問題,利用 Mask r-cnn對艦
    發(fā)表于 05-08 16:39 ?3次下載

    用于實例分割的Mask R-CNN框架

    我們的方法稱為 Mask R-CNN,擴展了 Faster RCNN ,方法是在每個感興趣區(qū)域 (RoI) 上添加一個用于預(yù)測分割掩碼的分支,與用于分類和邊界框回歸的現(xiàn)有分支并行(圖 1)。掩碼分支
    的頭像 發(fā)表于 04-13 10:40 ?2540次閱讀

    3D視覺技術(shù)內(nèi)容理解領(lǐng)域的研究進展

    Mesh R-CNN 是一種新型的當前最優(yōu)方法,可基于大量 2D 現(xiàn)實世界圖像預(yù)測出最準確的 3D 形狀。該方法利用目標實例分割任務(wù)的通用 Mask R-CNN 框架,能夠檢測出復(fù)雜的對象,如椅子腿或者重疊的家具。
    的頭像 發(fā)表于 04-27 14:34 ?1391次閱讀

    PyTorch教程14.8之基于區(qū)域的CNN(R-CNN)

    電子發(fā)燒友網(wǎng)站提供《PyTorch教程14.8之基于區(qū)域的CNN(R-CNN).pdf》資料免費下載
    發(fā)表于 06-05 11:09 ?0次下載
    PyTorch教程14.8之基于區(qū)域的<b class='flag-5'>CNN</b>(<b class='flag-5'>R-CNN</b>)

    PyTorch教程-14.8?;趨^(qū)域的 CNN (R-CNN)

    14.8?;趨^(qū)域的 CNN (R-CNN)? Colab [火炬]在 Colab 中打開筆記本 Colab [mxnet] Open the notebook in Colab
    的頭像 發(fā)表于 06-05 15:44 ?584次閱讀
    PyTorch教程-14.8?;趨^(qū)域的 <b class='flag-5'>CNN</b> (<b class='flag-5'>R-CNN</b>)