Mask R-CNN用於目標檢測和分割代碼實現
Mask R-CNN for object detection and instance segmentation on Keras and TensorFlow
代碼鏈接:https://github.com/matterport/Mask_RCNN
這是基於Python 3,Keras和TensorFlow 的Mask R-CNN的實現。該模型為圖像中對象的每個實例生成邊界框和分割masks。基於功能金字塔網絡Feature Pyramid Network(FPN)和ResNet101主干網。
該存儲庫包括:
- 基於FPN和ResNet101構建的Mask R-CNN的源代碼。
- MS COCO的訓練代碼
- MS COCO的預訓練權重
- Jupyter說明文件電腦可在每個步驟可視化檢測管線
- 用於多GPU訓練的Parallel Model類
- 評估MS COCO指標(AP)
- 自主數據集訓練示例
該代碼已記錄並設計為易於擴展。如果在研究中使用,請考慮引用該存儲庫(下面的bibtex)。如果從事3D視覺工作,可能會發現最近發布的Matterport3D數據集也很有用。該數據集是由客戶捕獲的3D重構空間創建的,這些客戶同意將其公開提供給學術用途。可以在此處看到更多示例。
開始啟動
- demo.ipynb是最簡單的啟動方法。顯示了一個示例,該示例使用在MS COCO上進行預訓練的模型來分割自己的圖像中的對象。包括在任意圖像上運行對象檢測和實例分割的代碼。
- train_shapes.ipynb顯示了如何在自己的數據集上訓練Mask R-CNN。本說明文件介紹了玩具數據集(形狀),以演示對新數據集的訓練。
- (model.py,utils.py,config.py):這些文件包含主要Mask RCNN實現。
- inspect_data.ipynb。該說明文件可視化了准備訓練數據的不同預處理步驟。
- inspect_model.ipynb本說明文件深入介紹了檢測和分割對象所執行的步驟。提供了管道中每個步驟的可視化。
- inspect_weights.ipynb 此說明文件檢查經過訓練的模型的權重,並查找異常和奇數模式。
逐步檢測
為了幫助調試和理解模型,共有3個說明文件(inspect_data.ipynb,inspect_model.ipynb, inspect_weights.ipynb)提供了很多可視化效果,並允許逐步運行模型以檢查每個點的輸出。這里有一些例子:
1.錨點排序和過濾
可視化第一階段區域提議網絡的每個步驟,並顯示正錨和負錨以及錨框的細化。
2.邊界框優化
這是最終檢測框(虛線)的示例,在第二階段對其進行了改進(實線)。
3.遮罩生成
生成的masks示例。然后將縮放並放置在正確位置的圖像上。
4,分層激活
通常,檢查不同層的激活以查找故障跡象(全零或隨機噪聲)通常很有用。
5.重量直方圖
另一個有用的調試工具是檢查重量直方圖。這些都包含在inspect_weights.ipynb說明文件中。
6.登錄到TensorBoard
TensorBoard是另一個出色的調試和可視化工具。該模型配置為記錄損失並在每個時期結束時節省權重。
7.將不同的部分組合成最終結果
MS COCO訓練
正在為MS COCO提供預訓練的權重,以使其易於啟動。可以將這些權重用作在網絡上訓練自己的變體的起點。訓練和評估代碼在中samples/coco/coco.py。可以在Jupyter說明文件中導入此模塊(有關示例,請參閱提供的說明文件),也可以直接從命令行運行,如下所示:
# Train a new model starting from pre-trained COCO weights
python3 samples/coco/coco.py train --dataset=/path/to/coco/ --model=coco
# Train a new model starting from ImageNet weights
python3 samples/coco/coco.py train --dataset=/path/to/coco/ --model=imagenet
# Continue training a model that you had trained earlier
python3 samples/coco/coco.py train --dataset=/path/to/coco/ --model=/path/to/weights.h5
# Continue training the last model you trained. This will find
# the last trained weights in the model directory.
python3 samples/coco/coco.py train --dataset=/path/to/coco/ --model=last
還可以使用以下命令運行COCO評估代碼:
# Run COCO evaluation on the last trained model
python3 samples/coco/coco.py evaluate --dataset=/path/to/coco/ --model=last
訓練時間表,學習率和其參數應在中設置samples/coco/coco.py。
訓練自己的數據集
首先閱讀有關氣球顏色飛濺示例的博客文章。涵蓋了從注釋圖像到訓練再到在示例應用程序中使用結果的過程。
總之,要在自己的數據集上訓練模型,需要擴展兩個類:
Config 此類包含默認配置。對其進行子類化,然后修改需要更改的屬性。
Dataset 此類提供了使用任何數據集的一致方式。允許使用新的數據集進行訓練,而無需更改模型的代碼。還支持同時加載多個數據集,如果要檢測的對象在一個數據集中並非全部可用,這將很有用。
見例子samples/shapes/train_shapes.ipynb,samples/coco/coco.py,samples/balloon/balloon.py,和samples/nucleus/nucleus.py。
與官方文件的差異
此實現大部分遵循Mask RCNN論文,但是在少數情況下,偏向於代碼簡單和通用化。這些是知道的一些差異。如果遇到其差異,請告訴。
- 圖像調整大小:為了支持每批訓練多幅圖像,將所有圖像調整為相同大小。例如,在MS COCO上為1024x1024px。保留寬高比,因此,如果圖像不是正方形,則將其填充為零。在本文中,進行了調整大小,以使最小的一面為800像素,最大的一面為1000像素。
- 邊界框:某些數據集提供邊界框,而某些數據集僅提供masks。為了支持對多個數據集的訓練,選擇忽略數據集隨附的邊界框,而是動態生成。選擇封裝masks所有像素的最小框作為邊界框。這簡化了實現,並且還使圖像增強很容易應用,否則圖像增強將很難應用於邊界框,例如圖像旋轉。
為了驗證這種方法,將計算出的邊界框與COCO數據集提供的邊界框進行了比較。發現〜2%的邊界框相差1px或更多,〜0.05%的邊界相差5px或更多,只有0.01%的相差10px或更多。
- 學習率:本文使用的學習率是0.02,但發現該值太高,通常會導致權重爆炸,尤其是在使用小批量時。這可能與Caffe和TensorFlow計算梯度之間的差異(批次與GPU之間的總和與均值)之間的差異有關。或者,也許官方模型使用漸變修剪來避免此問題。確實使用了梯度裁剪,但不要設置得太過激。發現,較小的學習率無論如何都會收斂得更快,因此繼續這樣做。
引文
使用以下bibtex引用此存儲庫:
@misc{matterport_maskrcnn_2017,
title={Mask R-CNN for object detection and instance segmentation on Keras and TensorFlow},
author={Waleed Abdulla},
year={2017},
publisher={Github},
journal={GitHub repository},
howpublished={\url{https://github.com/matterport/Mask_RCNN}},
}
貢獻
歡迎對該存儲庫做出貢獻。可以做出貢獻的示例:
- 速度改進。就像在TensorFlow或Cython中重寫一些Python代碼一樣。
- 訓練其數據集。
- 精度提高。
- 可視化和示例。
也可以加入團隊,並幫助建立更多像這樣的項目。
要求
列出了Python 3.4,TensorFlow 1.3,Keras 2.0.8和其常見軟件包requirements.txt。
MS COCO要求:
要對MS COCO進行訓練或測試,還需要:
- pycocotools(下面的安裝說明)
- MS COCO數據集
- 下載5K minival 和35K 驗證減去最小值 子集。更多詳細信息,請參見原始的Faster R-CNN實現。
如果使用Docker,則代碼已通過驗證可在此Docker容器上工作 。
安裝
- copy此存儲庫
- 安裝依賴
pip3 install -r requirements.txt
- 從存儲庫根目錄運行安裝程序
python3 setup.py安裝
- 從發布頁面下載預訓練的COCO權重(mask_rcnn_coco.h5)。
- (可選)pycocotools從這些存儲庫之一中進行MS COCO安裝的訓練或測試。是原始pycocotools的分支,具有針對Python3和Windows的修復(官方倉庫似乎不再處於活動狀態)。
- Linux:https://github.com/waleedka/coco
- Windows:https://github.com/philferriere/cocoapi。路徑上必須具有Visual C ++ 2015生成工具(有關更多詳細信息,請參見repo)