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

小白学视觉

共 4640字,需浏览 10分钟

 ·

2021-08-25 11:30

点击上方小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

在文章中,我们将创建自己的训练模型来检测坑洼。关于检测,我们将在 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扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲
小白学视觉公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲
小白学视觉公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群


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


浏览 22
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报