使用 Mask-RCNN 对路面坑洞进行实例分割
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
在文章中,我们将创建自己的训练模型来检测坑洼。关于检测,我们将在 Supervisely 的帮助下使用 Mask-RCNN 的实例分割技术。在创建模型之前,让我们了解一下我们正在使用的工具和技术。

Mask-RCNN 是一种深度神经网络,旨在解决机器学习或计算机视觉中的实例分割问题。Mask RCNN 有两个阶段,首先,它根据输入图像生成关于可能存在对象的区域的建议;其次,根据第一阶段的建议,预测对象的类别,细化边界框并生成对象像素级的掩码。
Mask-RCNN 实际上是一个经过训练的模型,但在文章中,我将向小伙伴展示如何微调我们的自定义对象或训练 Mask-RCNN 模型。

Mask-RCNN 结构

监督工作流程
收集和注释数据集:我们已经从 Kaggle 的 Pothole 图像数据集中收集了数据集。
现在让我们使用 supervisely 来注释图像,在注释之前,让我们监督导入数据。
首先在supervise中创建一个工作区

创建工作区
然后从我们的电脑导入数据


对图像进行注释,请单击projects >> Pothole dataset >>从下拉菜单中单击开始注释,我们将使用位图注释,现在只注释我们要检测的区域。

位图注释
使用 DTL 进行数据增强:
注释完所有图像后,是时候扩充我们的数据了。增强是一种用于通过对收集的数据集进行水平翻转、垂直翻转、旋转、镜像、剪切等稍微的更改来增加数据样本的技术。
在监督方面,我们将借助dtl(数据转换语言)来扩充数据,我们可以将以下 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 工作流程
现在点击开始按钮,单击后我们可以看到创建了一个新的图像文件夹,这样我们的数据增强部分就完成了,让我们进入下一部分。
使用增强数据训练 Mask-RCNN:
我们将使用 Mask-RCNN 模型来训练坑洼图像,所以点击神经网络选项,我们会看到神经网络模型列表,然后添加Mask-RCNN(keras+TF)(COCO)模型。


克隆神经网络
现在点击训练按钮训练神经网络

但是训练我们的神经网络会给我们带来错误,它给出了错误,因为我们没有提供所需的代理或资源,我们将使用 aws 云提供适当的代理

现在单击集群页面链接以创建集群

新集群已创建

对我们代理的要求
要运行 EC2 实例,请按照以下步骤操作:
1.首先转到 AWS EC2 服务,然后单击 Launch Instance,之后我们将选择一个具有 Linux、Docker、GPU、Nvidia-Docker 的实例。
2.选择深度学习 AMI (Ubuntu 18.04)

3. 我们将选择名为p2.xlarge的 GPU 实例

4.现在去配置实例并做以下配置

5. 提供至少 90Gib 的存储空间

6. 现在创建密钥后启动实例,要登录实例,请使用 ssh 命令

实例已启动
对于训练,将来自监督的 curl 命令复制并粘贴到我们的 ec2 实例上。

运行 bash 命令
等待完整的设置安装

现在去监督训练Mask-RCNN模型:

首先,所有图像都将下载到我们的实例中


模型开始训练

我们还可以看到我们模型的训练图和日志


最后,训练后我们可以通过上传一些测试图像来测试我们的模型,这是我们模型的结果,我认为它运行的非常很好。

坑洼图像分割
交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

