計算機非常擅長數字運算,但對分析圖像中的大量資料束手無策。直到最近找到了解決方法,即建立圖像處理單元庫,利用數千個核心的原始動力解鎖圖檔背後的含義。
使用自己的資料
我們将使用一個示例資料集,它在随機色彩背景上由不同大小和顔色的圓圈、正方形和三角形組成。我已經建立了一個COCO-style版本,如果你想學習如何将圖檔轉換成自己的資料集,請參閱前面的
文章。
這一次我們的重點是自動标記圖像中的所有形狀,并标出每個圖像精确到像素的位置。這類的任務稱為“目标分割”。在計算機視覺中,有很多聽起來類似的的術語,比如“物體識别(object recognition)”、“類分割(class segmentation)”、“目标檢測(object detection)”,我們需要通過看它們做了什麼來區分。下圖展示了我們從這四個類型中所能獲得的資訊,從左到右,任務依次變得困難。
不同類型的圖像處理
目辨別别告訴我們圖像中有什麼,而不是在什麼地方或者有多少。類分割對圖像中不同類型的對象添加位置資訊。目标檢測将圖像中的每個對象通過邊界框分割開。最後,這四個當中最難也是我們要訓練的是——目标分割。它賦予每個對象一個清晰的邊界,也能用來建立前三個的結果。
對于這種簡單資料集,我們可以使用老式計算機視覺思路,例如Hough圈和線條檢測或模闆比對來獲得好的結果。但是通過深度學習,我們可以使用相同方法在幾乎所有類型的圖像資料集上獲得相同類型的結果,而且無需考慮要找的是什麼特征,這簡直太神奇了。
Mask R-CNN是什麼?
在訓練自己的Mask R-CNN之前,讓我們快速從右向左講解一下名字的含義。
“NN”是神經網絡,它的靈感來自于生物神經元的工作原理,神經網絡是連接配接的神經元集合,每個神經元根據輸入和内部參數輸出信号。當訓練神經網絡時,我們要不斷調整神經元的内部參數來獲得期望的輸出。
神經網絡
“C”代表“卷積”。CNNs是專門為圖像學習而設計的,但在某些方面上與神經網絡相似。它們的過濾器是通過在某個時間段在圖像上某小塊橫向和縱向滑動進行的,而不是一次向穿過整個圖像。CNN比正常的神經網絡使用更少的參數和記憶體,這使得它們能夠處理比傳統神經網絡更大的圖像。
卷積
普通的CNNs擅長目辨別别,但是如果我們想要做目标檢測,需要知道位置。這就是“R”“區域”。R-CNNs能夠圍繞對象畫出邊框。随着時間的推移,發展出了Fast R-CNN和Faster R-CNN。Faster R-CNN在CNN最後提出了Proposal生成網絡,即如果在區域内發現對象,則這些區域就會被用作邊框。
最後,“Mask”添加了像素級的分割,并建立了目标分割模型。它為網絡添加了一個額外的分支來建立二進制掩碼,這與我們在注釋圖像時所做的類似。
準備好電腦組態
要運作這些例子,你需要用最新nvidia顯示卡的Ubuntu 16.04系統。我可以使用隻有2GB記憶體的GeForce 940M對一小部分網絡進行訓練,但是你最好使用11GB記憶體以上的nvidia卡。如果沒有,你可以開始使用Amazon Web Services或谷歌雲。
我們将使用Docker上運作來確定在同一頁面。Docker通過腳本建立系統的副本,是以不必安裝所有的小程式。但是在此之前需要準備好主機系統。
安裝Ubuntu 16.4之後,我們需要安裝NVIDIA圖形驅動和CUDA(并行計算平台)。首先打開一個終端并運作以下指令來安裝圖形驅動程式。

然後安裝CUDA
現在安裝Docker、Docker- compose和Nvidia-Docker。
全部安裝好後,重新開機電腦就可以運作我們的Mask C-RNN系統了。
開始實踐
下載下傳并提取
deep-learning-explorer。裡面包含mask-rcnn檔案夾和一個資料檔案夾。Data/shapes檔案夾中包含資料測試集的壓縮檔案。提取出shapes.zip檔案,并将annotations,shapes_train2018,shapes_test2018和shapes_validate2018移動到data/shapes檔案夾中。
回到終端界面,cd進入到mask-rcnn/docker目錄下,并運作docker-compose up。首次運作這個指令時,Docker需要幾分鐘準備從頭開始建構系統。準備就緒時會顯示如下:
Docker系統準備就緒
将最後一行複制粘貼到web浏覽器中,就會打開Jupyter Notebook。進入home/keras/mask-rcnn/notebooks目錄,點選mask_rcnn.ipynb。現在您可以浏覽每個筆記本單元并訓練您自己的Mask
R-CNN模型。幕後Keras與Tensorflow正在GPU上訓練神經網絡。如果你沒有11GB顯存的話,你可能會在“微調”步驟中遇到問題,但你應該能夠用最少2GB的記憶體卡來訓練網絡頂端。
我們之是以不必花費數天或數周時間訓練模型以及數以千計的例子就能獲得不錯的結果,是因為複制了之前真實的COCO資料集上完成的訓練的權重(内部神經元參數)。由于大多數圖像資料集具有相似的基本特征,比如顔色和模式,是以通常可以用一種模型的訓練資料來訓練另一個模型。這種複制資料稱為遷移學習。
如果你滾動到筆記本的底部,你會發現我們隻預測了大約37%的正确形狀。但是可以通過将STEPS_PER_EPOCH增加到750(教育訓練樣本的總數)并運作5個或更多的epochs,來改進模型。
在訓練期間或之後,你可以通過一些圖表來檢視TensorBoard的使用情況。首先需要登入到Docker容器中,啟動并運作TensorBoard,然後在web浏覽器中通路。過程為在終端運作docker ps,将顯示所有運作的容器,使用CONTAINER ID的前兩個字元啟動Docker容器bash
shell來訓練模型。例如,我們的ID是d5242f7ab1e3,我們将使用docker exec - d5 bash來登入。運作tensorboard --logdir ~/data/shapes/logs --host 0.0.0.0,現在可以通過通路http://localhost:8877進入TensorBoard了。
現在,你已經根據自己的資料準備好訓練Mask R-CNN模型了。
引用和資源:
pycococreator- 轉換資料
R-CNN (
arxiv)
Fast R-CNN (
Faster R-CNN (
Mask R-CNN (
Stanford CS class
notes
數十款阿裡雲産品限時折扣中,趕緊點選領劵開始雲上實踐吧!本文由北郵
@愛可可-愛生活老師推薦,
阿裡雲雲栖社群組織翻譯。
文章原标題《Train a Mask
R-CNN model on your own data》
作者:waspinator
譯者:奧特曼,審校:袁虎。
文章為簡譯,更為詳細的内容,請檢視
原文