【深度学习】使用深度学习检测混凝土结构中的表面裂缝
混凝土建筑裂缝
介绍
表面裂缝检测是监测混凝土结构健康的一项重要任务。如果裂纹发展并继续扩展,它们会减少有效承载表面积,并且随着时间的推移会导致结构失效。裂纹检测的人工过程费时费力,且受检验人员主观判断的影响。在高层建筑和桥梁的情况下,手动检查也可能难以执行。在这篇文章中,我们使用深度学习来构建一个简单但非常准确的裂缝检测模型。此外,我们在现实世界的数据上测试了模型,发现该模型在检测混凝土和非混凝土结构示例道路中的表面裂缝方面是准确的。该代码在Github上的链接上开源。
数据集
在这篇文章中,我们使用了公开可用的混凝土裂缝图像数据集,该数据集由 20,000 张有裂缝的混凝土结构图像和 20,000 张无裂缝的图像组成。该数据集由 458 张高分辨率图像(4032x3024 像素)生成。数据集中的每个图像都是 227 x 227 像素的 RGB 图像。部分有裂纹和无裂纹的示例图如下所示:
带有裂纹的示例图像
没有裂纹的示例图像
可以看出,数据集有各种各样的图像——不同颜色、不同强度和形状的裂缝。
建立模型
对于这个问题,让我们在 Pytorch 中构建一个卷积神经网络(CNN)。由于我们的图像数量有限,因此我们将使用预训练的网络作为起点,并使用图像增强功能来进一步提高准确性。图像增强使我们能够进行诸如垂直和水平翻转、旋转和亮度变化之类的转换,从而显着增加样本并帮助模型泛化。
对于以下步骤,请参考我在 Github 上的代码。
将输入数据混洗并拆分为 Train 和 Val
下载的数据将有 2 个文件夹,一个用于正样本文件夹,一个用于负样本文件夹,我们需要将其拆分为 train 和 val。下面的代码片段将为 train 和 val 创建新文件夹,并将 85% 的数据随机混洗到 train 中,并将其余数据随机放入 val 中。
拆分为 train 和 val
应用转换
Pytorch 可以轻松应用数据转换,这可以增强训练数据并帮助模型提高泛化性。我们选择的转换是随机旋转、随机水平和垂直翻转以及随机颜色抖动。此外,每个通道除以 255,然后归一化,这有助于神经网络训练。
转变
预训练模型
我们使用在 ImageNet 上经过预训练的 Resnet 50 模型来快速启动模型。如下所示,ResNet50 模型由 5 个阶段组成,每个阶段都有一个卷积和 Identity 块。每个卷积块有 3 个卷积层,每个标识块也有 3 个卷积层。ResNet-50 有超过 2300 万个可训练参数。我们将冻结所有这些权重和 2 个全连接的层——第一层在输出中有 128 个神经元,第二层在输出中有 2 个神经元,这是最终的预测。
ResNet50 模型
ResNet 模型层
如模型摘要所示,该模型有 2300 万个不可训练参数和 262K 个可训练参数
模型参数
我们使用 Adam 作为优化程序并训练模型 6 个 epoch。
真实图像上的模型训练和预测
我们用迁移学习训练,然后在训练数据集模型,同时在验证集上测量损失和准确性。如下面的损失和准确率数字所示,模型训练的非常快。在第 1 个 epoch 之后,训练准确率为 87%,验证准确率为 97%!这就是迁移学习的力量,我们的最终模型的验证准确率为 98.4%。
模型训练统计
在真实图像上测试模型
现在是最有趣的部分。是的,该模型适用于验证数据,但我们希望确保它也适用于互联网上看不见的数据。为了测试这一点,我们随机拍摄了混凝土开裂结构和路面裂缝的图像,这些图像比我们的训练图像大得多。请记住,该模型是在 227,227 像素的切片上训练的。我们现在将输入图像分成小块并对其进行预测。如果模型预测有裂纹,我们将补丁涂成红色(有裂纹),否则将补丁涂成绿色。以下代码片段将执行此操作。
切片预测
该模型在从未见过的图像上效果非常好。如下图所示,该模型能够通过处理图像上的 100 多个补丁来检测混凝土中很长的裂缝。
混凝土裂缝检测。左原图。右侧红色区域是有裂纹的预测,绿色区域是无裂纹的预测
此外,也在道路裂缝上测试了该模型。这个模型没有在路面数据集上训练过,但在识别道路裂缝方面也做得很好!
道路裂缝检测。左原图。右侧红色区域是有裂纹的预测,绿色区域是无裂纹的预测
在此项目的 github 链接上共享了更多现实世界图像以及有关它们的模型预测。
结论
这篇文章展示了使用深度学习和开源数据构建现实世界的应用程序变得多么容易。整个工作花了半天时间,输出了一个实用的解决方案。我希望小伙伴们自己尝试这个代码,并在更多现实世界的图像上进行测试。
参考
2018 — Özgenel, Ç.F., Gönenç Sorguç, A. “Performance Comparison of Pretrained Convolutional Neural Networks on Crack Detection in Buildings”, ISARC 2018, Berlin.
Good paper on importance of crack detection — https://www.hindawi.com/journals/ace/2018/3924120/
Good blog on Image Classification in Pytorch. Several of the code snippets used in the blog were from here.
Another good blog on Image Classification in Pytorch. Several of the code snippets used in the blog were from here.
Github代码连接:
https://github.com/priya-dwivedi/Deep-Learning/tree/master/crack_detection
https://github.com/priya-dwivedi/Deep-Learning/blob/master/crack_detection/Crack%20Detection%20Model.ipynb
https://github.com/priya-dwivedi/Deep-Learning/tree/master/crack_detection/real_images
往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载黄海广老师《机器学习课程》视频课黄海广老师《机器学习课程》711页完整版课件
本站qq群955171419,加入微信群请扫码:
【深度学习】使用深度学习检测混凝土结构中的表面裂缝相关推荐
- 使用深度学习检测混凝土结构中的表面裂缝
作者 | 小白 来源 | 小白学视觉 混凝土建筑裂缝 介绍 表面裂缝检测是监测混凝土结构健康的一项重要任务.如果裂纹发展并继续扩展,它们会减少有效承载表面积,并且随着时间的推移会导致结构失效.裂纹检测 ...
- 基于深度学习的磁环表面缺陷检测算法
基于深度学习的磁环表面缺陷检测算法 人工智能技术与咨询 来源:< 人工智能与机器人研究> ,作者罗菁等 关键词: 缺陷检测:深度学习:磁环:YOLOv3: 摘要: 在磁环的生产制造过程中, ...
- 深度学习三(PyTorch物体检测实战)
深度学习三(PyTorch物体检测实战) 文章目录 深度学习三(PyTorch物体检测实战) 1.网络骨架:Backbone 1.1.神经网络基本组成 1.1.1.卷积层 1.1.2.激活函数层 1. ...
- 《深度学习之PyTorch物体检测实战》—读书笔记
随书代码 物体检测与PyTorch 深度学习 为了赋予计算机以人类的理解能力与逻辑思维,诞生了人工智能(Artificial Intelligence, AI)这一学科.在实现人工智能的众多算法中,机 ...
- 基于深度学习的显著性目标检测方法综述
源自:电子学报 作者:罗会兰 袁璞 童康 摘 要 显著性目标检测旨在对图像中最显著的对象进行检测和分割,是计算机视觉任务中重要的预处理步骤之一,且在信息检索.公共安全等领域均有广泛的应 ...
- 深度学习数据驱动_3D目标检测深度学习方法数据预处理综述
作者 | 蒋天元 来源 | 3D视觉工坊(ID: QYong_2014) 这一篇的内容主要要讲一点在深度学习的3D目标检测网络中,我们都采用了哪些数据预处理的方法,主要讲两个方面的知识,第一个是rep ...
- 使用 Python 进行深度学习以进行裂纹检测
使用 Python 进行深度学习以进行裂纹检测 问题陈述 数据集准备 训练模型 结论 参考 问题陈述 虽然新技术已经改变了我们生活的方方面面,在建筑领域似乎牛逼Ø正在努力追赶.目前,建筑物的结构状况仍 ...
- 智慧工地-基于深度学习yolov3的安全帽检测以及安全帽检测数据集(1)
基于深度学习yolov3的安全帽检测以及安全帽检测数据集 数据集和代码下载地址:下载地址 数据可视化: 根目录下运行命令: show_yolo_anno.py (注意脚本内相关参数配置 ) 模型训练 ...
- 【camera】自动泊车-基于深度学习的视觉车位检测项目(课程设计--训练代码、测试代码、部署demo)(2)
**基于深度学习的点定位回归和角度预测的车位检测 基于深度学习的点定位回归和角度预测 基于深度学习的角点检测和角度回归 ** 项目下载地址:训练代码.测试代码.部署demo 数据集百度网盘下载:数据集 ...
最新文章
- CTFshow 命令执行 web35
- 插入ASP代码让网站数据库成为ASP木马
- GridView分页后RowCommand出错:索引超出范围
- mysql8.0.12插件_MySQL8.0.12 安装及配置
- android应用的界面编程----View与ViewGroup的概念
- python队列精灵对战_python队列Queue
- 钉钉开放平台:内网穿透工具 - 服务器免费打造教程
- linux开发板最好芯片,既然是中国十大最有影响力的芯片之一 一定要有个好开发板...
- ArcGIS水文分析实战教程(6)河流提取与河网分级
- torch的使用笔记
- Mysql实现企业级数据库主从复制架构实战
- 《离散数学及其应用》【张清华版】 第四章习题总结
- Java读文件的三种方式
- python聚类系数_NetworkX 计算聚类系数的Python实现
- 绝地求生6月23号服务器维护到几点,绝地求生6月23号更新内容汇总 维护公告信息一览...
- 数字+字母+特殊字符 的正则表达式
- 机器学习中的特征重要性 Feature Importance
- 国家档案局发布第13号令《机关档案管理规定》
- 什么是SPA(单页面应用)?
- mysql查询更新优化_mysql查询优化(持续更新中)
热门文章
- FPGA数字系统设计(8)——可综合电路及状态机
- Windows 10 Creators Update即将上线 Cortana又新增了哪些新功能?
- 考虑不周和指针越界1156: 单数变复数
- NI myRIO密码重置
- 【FPGA教程案例42】图像案例2——通过verilog实现图像二值化处理,通过MATLAB进行辅助验证
- pythonnumpy生成二进制流_Python 读写二进制文件 以及Numpy读写二进制文件
- Wayos网吧路由英雄联盟频繁掉线解决办法
- 计算机网络物联网专业课程,物联网工程专业课程
- 网络推广团队每天都在干什么?
- 如何屏蔽掉电脑上因下载软件捆绑的广告(烦人的广告让人十分尴尬)