使用 Mask-RCNN 对路面坑洞进行实例分割

重磅干货,第一时间送达

在文章中,我们将创建自己的训练模型来检测坑洼。关于检测,我们将在 Supervisely 的帮助下使用 Mask-RCNN 的实例分割技术。在创建模型之前,让我们了解一下我们正在使用的工具和技术。

什么是实例分割?
实例分割
实例分割是一种通过屏蔽或逐像素覆盖检测到的对象来进行检测的技术。实例分割在自动驾驶汽车中非常有用,因为我们获得像素到像素的结果,从而提高了减少事故的准确性。
Mask-RCNN

Mask-RCNN 是一种深度神经网络,旨在解决机器学习或计算机视觉中的实例分割问题。Mask RCNN 有两个阶段,首先,它根据输入图像生成关于可能存在对象的区域的建议;其次,根据第一阶段的建议,预测对象的类别,细化边界框并生成对象像素级的掩码。

Mask-RCNN 实际上是一个经过训练的模型,但在文章中,我将向小伙伴展示如何微调我们的自定义对象或训练 Mask-RCNN 模型。

Mask-RCNN 结构

什么是Supervisely以及如何使用它?
Supervisely是一个用于解决计算机视觉问题的网络平台,在监督的帮助下,我们可以非常轻松地对图像进行注释,并且在对图像进行注释后,我们可以轻松地在任何深度学习模型上训练我们的数据而无需编码。

监督工作流程

如何在监督中使用 Mask R-CNN 进行目标检测?
在这个实践中,我们将通过掩盖检测到的区域来检测道路坑洼。

收集和注释数据集:我们已经从 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 云提供适当的代理

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

新集群已创建

对我们代理的要求

使用 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模型:

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

模型开始训练

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

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

坑洼图像分割

下载1:OpenCV-Contrib扩展模块中文版教程
(0)

相关推荐