使用 Mask-RCNN 對路面坑洞進行實例分割
點擊上方“小白學(xué)視覺”,選擇加"星標"或“置頂”
重磅干貨,第一時間送達
在文章中,我們將創(chuàng)建自己的訓(xùn)練模型來檢測坑洼。關(guān)于檢測,我們將在 Supervisely 的幫助下使用 Mask-RCNN 的實例分割技術(shù)。在創(chuàng)建模型之前,讓我們了解一下我們正在使用的工具和技術(shù)。

Mask-RCNN 是一種深度神經(jīng)網(wǎng)絡(luò),旨在解決機器學(xué)習(xí)或計算機視覺中的實例分割問題。Mask RCNN 有兩個階段,首先,它根據(jù)輸入圖像生成關(guān)于可能存在對象的區(qū)域的建議;其次,根據(jù)第一階段的建議,預(yù)測對象的類別,細化邊界框并生成對象像素級的掩碼。
Mask-RCNN 實際上是一個經(jīng)過訓(xùn)練的模型,但在文章中,我將向小伙伴展示如何微調(diào)我們的自定義對象或訓(xùn)練 Mask-RCNN 模型。

Mask-RCNN 結(jié)構(gòu)

監(jiān)督工作流程
收集和注釋數(shù)據(jù)集:我們已經(jīng)從 Kaggle 的 Pothole 圖像數(shù)據(jù)集中收集了數(shù)據(jù)集。
現(xiàn)在讓我們使用 supervisely 來注釋圖像,在注釋之前,讓我們監(jiān)督導(dǎo)入數(shù)據(jù)。
首先在supervise中創(chuàng)建一個工作區(qū)

創(chuàng)建工作區(qū)
然后從我們的電腦導(dǎo)入數(shù)據(jù)


對圖像進行注釋,請單擊projects >> Pothole dataset >>從下拉菜單中單擊開始注釋,我們將使用位圖注釋,現(xiàn)在只注釋我們要檢測的區(qū)域。

位圖注釋
使用 DTL 進行數(shù)據(jù)增強:
注釋完所有圖像后,是時候擴充我們的數(shù)據(jù)了。增強是一種用于通過對收集的數(shù)據(jù)集進行水平翻轉(zhuǎn)、垂直翻轉(zhuǎn)、旋轉(zhuǎn)、鏡像、剪切等稍微的更改來增加數(shù)據(jù)樣本的技術(shù)。
在監(jiān)督方面,我們將借助dtl(數(shù)據(jù)轉(zhuǎn)換語言)來擴充數(shù)據(jù),我們可以將以下 json 代碼稱為 dtl。
[{"dst": "$raw","src": ["pothole_detection/*"],"action": "data","settings": {"classes_mapping": "default"}},{"action": "flip","src": ["$raw"],"dst": "$raw_fliph","settings": {"axis": "vertical"}},{"dst": "$data","src": ["$raw","$raw_fliph"],"action": "multiply","settings": {"multiply": 5}},{"action": "crop","src": ["$data"],"dst": "$randocrop","settings": {"random_part": {"height": {"min_percent": 10,"max_percent": 40},"width": {"min_percent": 30,"max_percent": 80},"keep_aspect_ratio": false}}},{"action": "crop","src": ["$data"],"dst": "$randocrop2","settings": {"random_part": {"height": {"min_percent": 40,"max_percent": 90},"width": {"min_percent": 60,"max_percent": 90},"keep_aspect_ratio": false}}},{"action": "dummy","src": ["$raw","$raw_fliph","$randocrop","$randocrop2"],"dst": "$out","settings": {}},{"dst": "$precontrast","src": ["$out"],"action": "multiply","settings": {"multiply": 10}},{"dst": "$outcontrast","src": ["$precontrast"],"action": "contrast_brightness","settings": {"contrast": {"min": 0.5,"max": 2,"center_grey": false},"brightness": {"min": -50,"max": 50}}},{"dst": ["$totrain","$toval"],"src": ["$outcontrast","$out"],"action": "if","settings": {"condition": {"probability": 0.95}}},{"dst": "$train","src": ["$totrain"],"action": "tag","settings": {"tag": "train","action": "add"}},{"dst": "$val","src": ["$toval"],"action": "tag","settings": {"tag": "val","action": "add"}},{"dst": "pothole_augmented-train-val","src": ["$train","$val"],"action": "supervisely","settings": {}}]

選擇運行 DTL 選項

DTL 工作流程
現(xiàn)在點擊開始按鈕,單擊后我們可以看到創(chuàng)建了一個新的圖像文件夾,這樣我們的數(shù)據(jù)增強部分就完成了,讓我們進入下一部分。
使用增強數(shù)據(jù)訓(xùn)練 Mask-RCNN:
我們將使用 Mask-RCNN 模型來訓(xùn)練坑洼圖像,所以點擊神經(jīng)網(wǎng)絡(luò)選項,我們會看到神經(jīng)網(wǎng)絡(luò)模型列表,然后添加Mask-RCNN(keras+TF)(COCO)模型。


克隆神經(jīng)網(wǎng)絡(luò)
現(xiàn)在點擊訓(xùn)練按鈕訓(xùn)練神經(jīng)網(wǎng)絡(luò)

但是訓(xùn)練我們的神經(jīng)網(wǎng)絡(luò)會給我們帶來錯誤,它給出了錯誤,因為我們沒有提供所需的代理或資源,我們將使用 aws 云提供適當?shù)拇?/p>
現(xiàn)在單擊集群頁面鏈接以創(chuàng)建集群

新集群已創(chuàng)建

對我們代理的要求
要運行 EC2 實例,請按照以下步驟操作:
1.首先轉(zhuǎn)到 AWS EC2 服務(wù),然后單擊 Launch Instance,之后我們將選擇一個具有 Linux、Docker、GPU、Nvidia-Docker 的實例。
2.選擇深度學(xué)習(xí) AMI (Ubuntu 18.04)

3. 我們將選擇名為p2.xlarge的 GPU 實例

4.現(xiàn)在去配置實例并做以下配置

5. 提供至少 90Gib 的存儲空間

6. 現(xiàn)在創(chuàng)建密鑰后啟動實例,要登錄實例,請使用 ssh 命令

實例已啟動
對于訓(xùn)練,將來自監(jiān)督的 curl 命令復(fù)制并粘貼到我們的 ec2 實例上。

運行 bash 命令
等待完整的設(shè)置安裝

現(xiàn)在去監(jiān)督訓(xùn)練Mask-RCNN模型:

首先,所有圖像都將下載到我們的實例中


模型開始訓(xùn)練

我們還可以看到我們模型的訓(xùn)練圖和日志


最后,訓(xùn)練后我們可以通過上傳一些測試圖像來測試我們的模型,這是我們模型的結(jié)果,我認為它運行的非常很好。

坑洼圖像分割
交流群
歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN、算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~

