混凝土建筑裂缝
原标题 | CONTRIBUTE Detection of Surface Cracks in Concrete Structures using Deep Learning
作者 | Priya Dwivedi
链接 | https://towardsdatascience.com/detection-of-surface-cracks-in-concrete-structures-using-deep-learning-f8f85cd8ac8b
编译 | 天字一号、吉蒂•布罗德
审校 | 唐里、望北
提示 | 相关链接请点击【阅读原文】查看。
介绍
表面裂缝检测是监测混凝土结构健康的重要任务。如果裂纹发展并继续蔓延,它们会减小有效的承载表面积,并且随着时间的流逝会导致结构失效。手动进行裂缝检测非常耗时,并且会受到检查员的主观判断。在高层建筑物和桥梁的情况下,手动检查也很难执行。在此博客中,我们使用深度学习来构建简单但非常准确的裂缝检测模型。此外,我们在现实世界的数据上测试了该模型,发现该模型在检测混凝土和非混凝土结构示例道路的表面裂缝方面是准确的。该代码在我的Github上的链接上开源。(https://github.com/priya-dwivedi/Deep-Learning/tree/master/crack_detection)
完整的内容在我的网站上发布(https://deeplearninganalytics.org/)。
数据集
对于此博客,我们使用的是公开可用的混凝土裂缝图像数据集(详情可见今日第二篇内容)。该数据集由Ozgenel和Gonenc在论文中公开发布(https://www.researchgate.net/publication/326676263_Performance_Comparison_of_Pretrained_Convolutional_Neural_Networks_on_Crack_Detection_in_Buildings)。
数据集包含20,000张有裂缝的混凝土结构图像和20,000张无裂缝的图像。该数据集是由458张高分辨率图像(4032x3024像素)生成的。数据集中的每个图像都是227 x 227像素的RGB图像。下面显示了一些有裂纹和无裂纹的示例图像:
带有裂纹的图像样本
无裂纹图像样品
可以看出,数据集中有各种各样的图像:不同颜色,不同强度和形状的裂缝。
建立模型
对于这个问题,我们在Pytorch中构建卷积神经网络(CNN)。由于图像数量有限,因此我们将使用预先训练的网络作为起点,并使用图像增强功能进一步提高准确性。图像增强使我们能够进行诸如垂直和水平翻转,旋转和亮度变化之类的转换,从而显着增加样本并帮助模型泛化。
对于以下步骤,请遵循我在Github上的代码(https://github.com/priya-dwivedi/Deep-Learning/blob/master/crack_detection/Crack%20Detection%20Model.ipynb)。
将输入数据混洗并拆分为Train和Val
下载的数据将有2个文件夹,其中一个“正样本”文件夹,一个“负样本”文件夹。我们需要将此分为train和val。下面的代码段将为train和val创建新文件夹,并将85%的数据随机混洗到train中,并将其余数据随机放入val中。
拆分为train和val
应用转换
使用Pytorch可以轻松地进行数据转换,从而可以增加训练数据并帮助模型提高泛化性。我选择的转换是随机旋转,随机水平和垂直翻转以及随机色彩抖动。同样,每个通道除以255,然后归一化。这有助于进行神经网络训练。
转换
预训练模型
我们正在使用在ImageNet上经过预训练的Resnet 50模型来快速启动模型。要了解有关ResNet模型的更多信息,请阅读我的博客(https://towardsdatascience.com/understanding-and-coding-a-resnet-in-keras-446d7ff84d33)。如下所示,ResNet50模型由5个阶段组成,每个阶段都有一个卷积和Identity块。每个卷积块具有3个卷积层,每个标识块也具有3个卷积层。ResNet-50具有超过2300万个可训练参数。我们将冻结所有这些权重和2个全连接的层-第一层在输出中具有128个神经元,第二层在输出中具有2个神经元,这是最终的预测。
ResNet50 Model
ResNet模型层
如模型摘要所示,该模型具有2300万不可训练参数和262K可训练参数
模型参数
我们使用Adam作为优化程序,训练6个epoch
在真实图像上训练和预测
我们用迁移学习训练,然后在训练数据集模型,同时测量在验证集的损失和准确性。如下面的损失和准确度数字所示,模型训练非常快。在第一个epoch之后,训练精度为87%,验证精度为97%!这就是迁移学习的力量。我们的最终模型的验证准确性为98.4%。
模型训练统计
在真实图像上测试模型
现在是最有趣的部分。是的,该模型适用于验证数据,但我们要确保它也适用于互联网上看不见的数据。为了对此进行测试,我们随机拍摄了开裂的混凝土结构和路面裂缝的图像。这些图像比我们的训练图像大得多。请记住,该模型是在227,227像素的切片上训练的。现在,我们将输入图像分成小块并对其进行预测。如果模型预测有裂纹,则将贴片染成红色(裂纹),否则将贴片染成绿色。下面的代码片段将执行此操作。
切片预测
该模型在从未见过的图像上效果很好。如下图所示,该模型能够通过处理图像上的100个切片来检测混凝土中很长的裂缝
混凝土裂缝检测。左图为原图。右图红色区域是有裂纹的预测,绿色区域是无裂纹的预测
此外,我也在道路裂缝上测试了该模型。该模型未在路面数据集上进行训练,但在识别道路裂缝方面也非常出色!
道路裂缝检测。左图为原图。右图红色区域是有裂纹的预测,绿色区域是无裂纹的预测
在此项目的github链接上共享了更多真实世界的图像以及有关它们的模型预测:https://github.com/priya-dwivedi/Deep-Learning/tree/master/crack_detection/real_images。
结论
这个博客展示了使用深度学习和开源数据构建真实世界应用程序变得多么容易。整个工作花了半天的时间,得出了一个实用的解决方案。我希望你自己试试这个代码,并在更多真实世界的图片上进行测试。
我对计算机视觉和深度学习非常有热情。我有自己的深度学习顾问,喜欢处理有趣的问题。我曾帮助许多初创公司部署基于人工智能的创新解决方案。请访问-http://deeplearninganalytics.org/。
你也可以在https://medium.com/@priya.dwivedi上看到我的其他文章
References
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.