使用 Mask-RCNN 对路面坑洞进行实例分割
共 4640字,需浏览 10分钟
·
2021-08-25 11:30
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
在文章中,我们将创建自己的训练模型来检测坑洼。关于检测,我们将在 Supervisely 的帮助下使用 Mask-RCNN 的实例分割技术。在创建模型之前,让我们了解一下我们正在使用的工具和技术。
![](https://filescdn.proginn.com/0af865ff206d77a9462d56986bdfe3c4/33508b08e6fa9d61bc62a3969d4d5b7d.webp)
Mask-RCNN 是一种深度神经网络,旨在解决机器学习或计算机视觉中的实例分割问题。Mask RCNN 有两个阶段,首先,它根据输入图像生成关于可能存在对象的区域的建议;其次,根据第一阶段的建议,预测对象的类别,细化边界框并生成对象像素级的掩码。
Mask-RCNN 实际上是一个经过训练的模型,但在文章中,我将向小伙伴展示如何微调我们的自定义对象或训练 Mask-RCNN 模型。
Mask-RCNN 结构
![](https://filescdn.proginn.com/f2b3d49f7f69331a5468b7f2c5fd2b4c/46f7f170ae449989acbb760a96695f2a.webp)
监督工作流程
收集和注释数据集:我们已经从 Kaggle 的 Pothole 图像数据集中收集了数据集。
现在让我们使用 supervisely 来注释图像,在注释之前,让我们监督导入数据。
首先在supervise中创建一个工作区
![](https://filescdn.proginn.com/343dac37ac3d7590d9c75468de998348/08a2cbc58850d8172d27b9dbe55e73e7.webp)
创建工作区
然后从我们的电脑导入数据
![](https://filescdn.proginn.com/6be0d9e6b78f9e9949ee97ac1ec8cd5a/20e88417d4d10b4aa6698705eaf24d6c.webp)
对图像进行注释,请单击projects >> Pothole dataset >>从下拉菜单中单击开始注释,我们将使用位图注释,现在只注释我们要检测的区域。
![](https://filescdn.proginn.com/c986c3b5371875d29da79316cfd7113e/94c76e4f19046091647837a1b2c30ff0.webp)
位图注释
使用 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)模型。
![](https://filescdn.proginn.com/324442e2744a96d59829952dbb2fe5a7/0eaf06332825ac2400cfe8ed532afa5b.webp)
克隆神经网络
现在点击训练按钮训练神经网络
但是训练我们的神经网络会给我们带来错误,它给出了错误,因为我们没有提供所需的代理或资源,我们将使用 aws 云提供适当的代理
![](https://filescdn.proginn.com/64f1ca13622d36331747ebd92a3e676d/f65ce57ea316dc7b5f7b93b34bf5e304.webp)
现在单击集群页面链接以创建集群
![](https://filescdn.proginn.com/bb8bf463d65bed2df9c51934dd7bfb3f/f9dcec1626a0aad765c3ef8d2b26bb9e.webp)
新集群已创建
![](https://filescdn.proginn.com/38c6f53d38e81968f2cb6df5621d4228/30329436c45d33585cb1f99258f9d2f7.webp)
对我们代理的要求
要运行 EC2 实例,请按照以下步骤操作:
1.首先转到 AWS EC2 服务,然后单击 Launch Instance,之后我们将选择一个具有 Linux、Docker、GPU、Nvidia-Docker 的实例。
2.选择深度学习 AMI (Ubuntu 18.04)
3. 我们将选择名为p2.xlarge的 GPU 实例
![](https://filescdn.proginn.com/e54cf66470c7c1a5e8e9ce4cbaa34025/dc4cbc8de8e460b8c286e97ec797af49.webp)
4.现在去配置实例并做以下配置
5. 提供至少 90Gib 的存储空间
6. 现在创建密钥后启动实例,要登录实例,请使用 ssh 命令
![](https://filescdn.proginn.com/80a9daf1031159d8a14cb68544f993a0/b9793a973bfaff814d7370847517047e.webp)
实例已启动
对于训练,将来自监督的 curl 命令复制并粘贴到我们的 ec2 实例上。
![](https://filescdn.proginn.com/938b3d5de76cf9d39a36f60d837e37f3/be826e22c423ba9f3b97beb83ba5e8e9.webp)
运行 bash 命令
等待完整的设置安装
现在去监督训练Mask-RCNN模型:
首先,所有图像都将下载到我们的实例中
![](https://filescdn.proginn.com/8855f9305a5fea0e96bc93854b7983f0/9ea6ef7edd765cf0e5ca6af11b7b3a33.webp)
模型开始训练
![](https://filescdn.proginn.com/fdb8f610670e8fe41a22b9ea521554c6/835bc697c6c4937ae07def5ca90a1784.webp)
我们还可以看到我们模型的训练图和日志
![](https://filescdn.proginn.com/44470f1df687d0984d94971bf9ac5154/256a213e5d5d1137b5409901ea9434c2.webp)
![](https://filescdn.proginn.com/fd0f353bcfda389b24a8c458a47bdd76/8ad4b00c96bb62e77217deecaae2bcd5.webp)
最后,训练后我们可以通过上传一些测试图像来测试我们的模型,这是我们模型的结果,我认为它运行的非常很好。
坑洼图像分割
交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~