使用 Mask-RCNN 对路面坑洞进行实例分割
共 4640字,需浏览 10分钟
·
2021-08-25 11:30
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
在文章中,我们将创建自己的训练模型来检测坑洼。关于检测,我们将在 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“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~