1. 程式人生 > >matterport Mask_RCNN官方教程翻譯

matterport Mask_RCNN官方教程翻譯

matterport/Mask_RCNN官方教程

這是一個基於python3,keras和tensorflow的mask rcnn模型。這個模型對影象中的每一個目標例項產生候選框和分割掩膜。這個模型基於特徵金字塔網路(Feature Pyramid Network, FPN)和 一個ResNet101骨架。


這個版本包括:
  • Mask R-CNN基於FPN和ResNet101建立的原始碼.
  • MS COCO的訓練程式碼
  • MS COCO的預訓練模型
  • jupyter notebook,裡面包含了檢測步驟的每一步的視覺化
  • 並行模型類用於多GPU訓練
  • 在MS COCO上的評價函式
  • 用於訓練自己的資料的例子
程式碼以文件形式呈現,容易拓展。如果你使用它們在你的研究當中,請考慮引用這個版本。如果你的研究方向是三維視覺,你可能發現我們最近釋出的Matterport3D資料集也很好用。這個資料集收集於我們的願意開源的客戶,用於三維重建。
開始:
  • demo.ipynb 最簡單的開始方式。展示了使用一個在MS COCO上預訓練的模型在你的圖片上實現影象分割。包括了在任意圖片上實現影象檢測和例項分割的程式碼。
  • train_shapes.ipynb 展示了怎麼訓練Mask R-CNN用自己的資料集。這個教程包括了一個玩具資料集來演示訓練一個新資料集。
  • model.py util.py config.py 這些檔案包括主要的Mask RCNN實現。
  • inspect_data.ipynb 這個教程展示了不同的預處理步驟來準備訓練資料
  • inspect_model.ipynb 這個教程深度解析了mask rcnn執行目標檢測和語義分割的每一步。
  • inspect_weights.ipynb 這個教程考察了訓練模型的權重,尋找異常值和反常的模式。
一步步的檢測: 為了幫助除錯和理解模型,這兒有3個notebook(inspect_data.ipynb, inspect_model.ipynb, inspect_weights.ipynb) 提供一系列的視覺化,允許我們一步步的執行這個模型,觀察每一步的輸出。下面是一些例子:
  1. anchor (候選區域)排序和篩選
視覺化第一階段候選區域產生網路(RPN)的每一步,展示正樣本和負樣本以及調整後的位置 2. 候選框精調 下圖展示了一個例子,對於最終的檢測結果(虛線),以及精調運用在它們上面(實線)。這是第二個階段。
3.掩膜產生 產生的掩膜的例子,這些被尺度化接著放到合適的位置
4.層啟用 通常這是非常有利的,觀察不同層的啟用值,來尋找訓練模型的錯誤(都是0值或者隨機的噪聲)
5.權重直方圖 另一個有用的除錯工具是觀察權重直方圖,這個在inspect_weights.ipynb教程裡。
6. tensorboard訓練日誌 tensorboard是另外一個重要的除錯和視覺化工具。這個模組用來記錄損失以及儲存權重

7.組合不同的模組得到最終的結果
在MS COCO上訓練: 我們提供了一個在MS COCO上預訓練好的權重檔案使得使用者很容易開始。你可以使用這些權重作為一個起始點來訓練你自己的模型。訓練和評估程式碼在coco.py 。你可以匯入這個模組在jupyter notebook 或者直接執行它們利用命令列向下面所示: #訓練一個新模型微調自預訓練的COCO權重 python3 coco.py train --dataset=/path/to/coco/ --model=coco #訓練一個新模型微調自預訓練的ImageNet權重 python3 coco.py train --dataset=/path/to/coco/ --model=imagenet #繼續訓練一個模型利用你之前已經訓練過的模型 python3 coco.py train --dataset=/path/to/coco/ --model=/path/to/weights.h5 #繼續訓練最後的模型,這個模組會找到最後訓練出來的模型 python3 coco.py train --dataset=/path/to/coco/ --model=last
你也可以用以下程式碼評估COCO模型 python3 coco.py evaluate --dataset=/path/to/coco/ --model=last 訓練設定,學習率以及其他引數在coco.py裡面設定。
利用你自己的資料集訓練: 為了訓練你自己的資料集你需要修改下面兩個類: Config : 這個類包括了預設的配置,修改你需要改變的屬性。 Dataset: 這個類使得你可以使用新資料集用於訓練不需要改變模型的程式碼。它也支援載入多個數據集同時,如果你想檢測的目標不是在同一個資料集裡這會非常有用。 Dataset是一個基類。為了使用它,建立一個繼承自它的新類,增加函式指向你的資料集。可以在util.py和train_shapes.ipynb和coco.py裡看它的用法。
和官方論文的差別: 這個版本大部分和官方論文一樣,但是也有一部分我們做出了修改,為了程式碼的簡便和通用性。下面是一些我們知道的區別。如果你遇到了其他不同的地方,請讓我們知道。
  • 影象尺度變換:為了支援在每一個批次當中訓練多幅影象,我們把所有影象都變換到了同一尺寸。例如,1024畫素*1024畫素的MS COCO影象。我們保留了這個縱橫比,所以如果一副影象不是正方形的,我們會在周圍補上0.在這篇文章裡取樣是遵循這樣的原則:最短邊是800畫素,長邊調整為1000畫素。
  • 邊界框: 一些資料集提供邊界框,另外一些僅僅提供掩膜。為了支援在多元資料集上進行訓練,我們選擇忽視來自於資料集的邊界框,利用我們的模型自動產生它們。我們選擇包括掩膜所有畫素的最小框作為目標的邊界框。這樣就可以簡化實現,同時也使得影象增強更加容易實現,有些影象增強方式在邊界框上難以實現,例如影象旋轉。為了驗證我們的方法,我們和COCO資料集提供的邊界框進行了比較。我們發現大約2%的邊界框相差了1個畫素或者更多,0.05%的邊界框相差5個畫素或者更多,0.01%的邊界框相差10個畫素或者更多。
  • 學習率:這篇文章使用了0.02的學習率,但是我們發現這太大了,經常導致權重擴散,尤其當使用一個小batch size。這可能是由於caffe和tensorflow計算梯度的方式不一樣(求和vs平均,沿著不同batch和gpu).或者,官方模型使用了梯度裁剪來避免這個問題。我們沒有使用梯度裁剪,也沒有把這個值設得特別大。我們發現更小的學習率收斂得更快,我們我們使用了更小的收斂率。
  • anchor 滑動幅度:特徵金字塔的最小層有一個4畫素的滑動幅度相對於輸入影象,所以anchors每隔4個畫素被產生。為了減少計算和記憶體佔用,我們採用了2個畫素的滑動幅度,以此來減少4倍的anchor數目,同時對精度沒有顯著的影響。
貢獻: 對這個版本的貢獻會很受歡迎。你可以做的貢獻的例子如下:
  • 速度的提升。例如重寫一些tensorflow或者cython裡的python程式碼。
  • 在替他的資料集上訓練。
  • 精度上的提升。
  • 視覺化以及例子。
你也可以加入我們團隊,幫助構建更多專案。