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

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

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

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

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


對(duì)圖像進(jìn)行注釋?zhuān)?qǐng)單擊projects >> Pothole dataset >>從下拉菜單中單擊開(kāi)始注釋?zhuān)覀儗⑹褂梦粓D注釋?zhuān)F(xiàn)在只注釋我們要檢測(cè)的區(qū)域。

位圖注釋
使用 DTL 進(jìn)行數(shù)據(jù)增強(qiáng):
注釋完所有圖像后,是時(shí)候擴(kuò)充我們的數(shù)據(jù)了。增強(qiáng)是一種用于通過(guò)對(duì)收集的數(shù)據(jù)集進(jìn)行水平翻轉(zhuǎn)、垂直翻轉(zhuǎn)、旋轉(zhuǎn)、鏡像、剪切等稍微的更改來(lái)增加數(shù)據(jù)樣本的技術(shù)。
在監(jiān)督方面,我們將借助dtl(數(shù)據(jù)轉(zhuǎn)換語(yǔ)言)來(lái)擴(kuò)充數(shù)據(jù),我們可以將以下 json 代碼稱(chēng)為 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": {}}]

選擇運(yùn)行 DTL 選項(xiàng)

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


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

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

新集群已創(chuàng)建

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

3. 我們將選擇名為p2.xlarge的 GPU 實(shí)例

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

5. 提供至少 90Gib 的存儲(chǔ)空間

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

實(shí)例已啟動(dòng)
對(duì)于訓(xùn)練,將來(lái)自監(jiān)督的 curl 命令復(fù)制并粘貼到我們的 ec2 實(shí)例上。

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

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

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


模型開(kāi)始訓(xùn)練

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


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

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

