Python基于滑动窗口CNN损伤梁桥数据、故宫城墙图像数据分类可视化|附数据代码

news/2024/12/5 10:01:11/文章来源:https://www.cnblogs.com/tecdat/p/18585174

全文链接:https://tecdat.cn/?p=38442

原文出处:拓端数据部落公众号

分析师:Yufei Guo

在现代土木结构工程领域,结构损伤的准确识别与定位对于保障基础设施的安全性和耐久性具有极为关键的意义。传统的人工检查方法,如目视检查以及借助专业设备进行检测,在很长一段时间内占据着主导地位,成为识别和评估砖石历史建筑等土木结构表面损伤的常用手段。然而,这种传统方式存在着诸多局限性。其成本高昂,需要投入大量的人力、物力和时间资源。在面对一些偏远地区的结构或部件时,由于地理条件限制、交通不便等因素,人工检查往往难以有效实施,导致这些区域的结构健康状况无法及时、准确地被掌握。

随着科技的飞速发展,深度学习技术在图像识别、目标检测等领域取得了令人瞩目的成就,为土木结构损伤检测带来了新的契机。卷积神经网络(CNN)作为深度学习中的重要分支,已在众多领域展现出强大的特征提取和模式识别能力。但现有的基于 CNN 的损伤检测方法大多并非专门针对砖石历史建筑的多种损伤识别而设计,难以满足这类特殊结构的检测需求。

针对我国连续梁桥数量众多且分布广泛,以及现场测试信号容易受到各种干扰的现状,本研究提出了一种创新的方法。通过一个或几个加速度传感器监测信号,依据车桥耦合理论,并借助正弦函数型呼吸裂缝模型来模拟连续梁桥的损伤情况。在此基础上,采用 Tsfresh 特征提取方法与 1D - CNN 模型相结合的方式,有效提升模型的特征提取能力,进而提高 CNN 的计算效率,实现对桥梁损伤的精准识别。

同时,在土木结构损伤检测领域的另一个重要研究方向 —— 砖石历史建筑损伤检测方面,本项目利用卷积神经网络(基于 LeNet - 5、AlexNet - 8、ZFNet - 8 和 GoogLeNet (inception v1) - 22)开发了一种专门的损伤识别与定位技术。通过基于区域的卷积神经网络(Faster - RCNN)应用于实时损伤检测,并采用基于滑动窗口的 CNN 方法,能够对完好、裂缝、泛碱和剥落等四类损伤进行准确的识别与定位,准确率高达 94.3%。本研究的数据仅来自中国故宫城墙图像的训练和测试,通过对不同数据集和网络架构的深入研究与实验,为基础设施工程中的人工智能应用提供了有价值的见解和实践经验,有望推动整个土木结构损伤检测技术朝着更加高效、精准和智能化的方向发展。

 Tsfresh-CNN损伤梁桥数据分类

针对我国连续梁桥量大面广及现场测试信号易受干扰等问题,根据一个或几个加速度传感器监测信号,基于车桥耦合理论和正弦函数型呼吸裂缝模型模拟连续梁桥的损伤,通过对监测信号的特征提取以达到减少数据维数,降低数据噪声的效果,进而采用卷积神经网络实现桥梁损伤识别。

数据源准备

为准确考虑车辆上桥对桥梁的振动影响,引入车桥耦合振动模型,将车辆简化为1/4车模型与桥梁进行车桥耦,通过正弦函数呼吸裂缝模型模拟桥梁损伤,车辆与桥梁的耦合振动根据车、桥之间位移与作用力的协调关系建立动力学方程求解

征转换

Tsfresh特征提取方法与1D-CNN模型结合,可以有效提高模型的特征提取能力,提高CNN计算效率

划分训练集和测试集

在对1D-CNN进行搭建之前需要对Tsfresh算法进行合理设置,每种工况得到70000×3个数据点。为保证每段数据的数据量相等,对其进行合理分割,令单个传感器每段的数据量λ=500,即每段数据含有500×3个数据点,则每种工况一共有140段数据。

建模

考虑到节省计算资源,本文搭建的卷积神经网络加入较少卷积层,经过多次实验比对,在网络中加入4层卷积层,下采样适当地加入用来优化网络架构对于其余超参数的设置,本文将Ts-CNN的网络参数首先根据经验进行初始化,再利用网格搜索法对超参数进行优化。

模型优化

基于深度学习的结构损伤检测|附数据代码

本项目利用卷积神经网络(基于 LeNet - 5、AlexNet - 8、ZFNet - 8 和 GoogLeNet(inception v1) - 22)开发了一种用于土木结构的损伤识别与定位技术。同时将基于区域的卷积神经网络(Faster - RCNN)应用于实时损伤检测。
注意:本项目主要是对砖石历史建筑应用微调后的深度学习算法。若您对 CNN 架构或实现更感兴趣,可能此处细节不足。本项目旨在为基础设施工程中的人工智能提供见解。

摘要

目前,人工检查(即目视检查和/或使用专业设备)是识别和评估砖石历史建筑表面损伤的主要方法。然而,该方法成本高昂,有时难以应用于偏远结构或部件。现有的基于卷积神经网络(CNN)的损伤检测方法并非专门针对砖石历史建筑的多种损伤识别而设计。为克服这些局限,本文提出了一种用于砖石历史建筑的 CNN 损伤分类技术的深度架构,采用基于滑动窗口的 CNN 方法来识别和定位四类损伤(完好、裂缝、泛碱和剥落),准确率达 94.3%。这是首次尝试基于 CNN 技术识别历史砖石建筑的多种损伤并取得优异分类结果。数据仅来自中国故宫城墙图像的训练和测试,顺砖图像和丁砖图像的像素分辨率分别为 480×105 和 210×105。两个 CNN(AlexNet 和 GoogLeNet)均在小数据集(2000 张图像用于训练,400 张图像用于验证和测试)和大数据集(20000 张图像用于训练,4000 张图像用于验证和测试)上进行训练。在五张 1860×1260 像素分辨率的新图像上检验训练模型的性能(准确率 94.3%)。

实现

数据集:

您可以使用我们的中国故宫城墙图像数据,也可以创建自己的数据集!只需尽可能多地拍摄您感兴趣研究的对象的照片。您可能还想使用众包技术让其他人帮您收集数据!

训练:

训练环境取决于您的数据集和 CNN。例如,如果您的数据集很大(GB/TB/PB 级),您可能考虑使用分布式工作站而非个人电脑,这同样适用于更深层次的 CNN(ResNet、Inception v - 4 等)。由于 GPU 计算比仅使用 CPU 快得多,您可能还需要 GPU 进行计算。
对于训练数据集的工具,我建议使用 TensorFlow 或 PyTorch。但如果您仅关注应用,Caffe 也可以。如果您选择 Caffe,您只需更改文件中的超参数。

 
  1.  
    uid = caffe.NCCL.new_uid()
  2.  
     
  3.  
    caffe.init_log()
  4.  
    caffe.log('Using devices %s' % str(gpus))
  5.  
     
  6.  
    procs = []
  7.  
    for rank in range(len(gpus)):
  8.  
    p = Process(target=solve,
  9.  
    args=(solver, snapshot, gpus, timing, uid, rank))
  10.  
    p.daemon = True
  11.  
    p.start()
  12.  
    procs.append(p)
  13.  
    for p in procs:
  14.  
    p.join()
 

应用与可视化:

如果您要将深度学习应用于实际工程问题,仅以计算机视觉方式对目标进行分类是不够的。您应该弄清楚如何呈现或处理输出。此外,适用性和可重复性也非常重要。例如,您可能会问自己:成本是多少?效率如何?或者它在实际问题中是否有效?

图示与部分结果

在图 1 中,我们可以清晰地看到砖单元图像分类示意图。它展示了对砖单元图像进行分类的整体框架和流程,为后续基于 CNN 的损伤识别奠定了基础。从图中可以初步了解到图像分类所涉及的各个环节以及它们之间的相互关系,这有助于理解整个损伤检测系统如何对输入的砖单元图像进行预处理和初步分类判断。

图 1:砖单元图像分类示意图
图 2 呈现的是基于 CNN 的砖单元损伤识别与分类示意图。此图详细说明了 CNN 在砖单元损伤识别与分类过程中的架构和工作原理。通过该图,能够直观地认识到 CNN 如何提取砖单元图像的特征,以及如何依据这些特征对不同类型的损伤进行区分和归类。例如,CNN 的不同层可能会对图像中的纹理、颜色、形状等特征进行逐步抽象和分析,最终确定损伤的类别。

图 2:基于 CNN 的砖单元损伤识别与分类示意图
图 3 是全连接模式与局部连接模式对比图,包括全连接模式(a)和局部连接模式(b)。

 
  1.  
    parser = ArgumentParser(description=__doc__,
  2.  
    formatter_class=ArgumentDefaultsHelpFormatter)
  3.  
     
  4.  
    parser.add_argument('input_net_proto_file',
  5.  
    help='Input network prototxt file')
  6.  
    parser.add_argument('output_image_file',
 

全连接模式中,每个神经元都与前一层的所有神经元相连,这种连接方式虽然能够充分整合信息,但也会带来大量的参数,容易导致过拟合现象,并且计算复杂度较高。而局部连接模式则只连接局部区域的神经元,它在减少参数数量的同时,能够保留一定的局部特征信息,更适合于图像这类具有局部相关性的数据处理。在本项目的 CNN 架构设计中,对这两种模式的理解和选择对于优化网络性能、提高损伤检测的准确性有着重要意义。

图 3:全连接模式与局部连接模式对比:(a)全连接模式,(b)局部连接模式

图 3:全连接模式与局部连接模式对比:(a)全连接模式,(b)局部连接模式
图 4 展示了 4 类训练样本,即完好(a)、剥落(b)、裂缝(c)和泛碱(d)用于 CNN 的情况。这些训练样本是模型学习和识别不同损伤类型的基础。从图中可以观察到不同损伤类型在图像上呈现出的不同特征。例如,完好的砖单元图像表面相对平整,无明显瑕疵;剥落的部分可能会有块状缺失;裂缝则呈现出线状的破损;泛碱区域可能会有颜色和纹理的变化。通过大量这样的训练样本,CNN 能够逐渐学习到不同损伤类型的图像特征模式,从而在实际检测中准确判断损伤类别。

图 4:4 类训练样本:(a)完好,(b)剥落,(c)裂缝,(d)泛碱(用于 CNN)

图 4:4 类训练样本:(a)完好,(b)剥落,©裂缝,(d)泛碱(用于 CNN)
图 5 为 Faster - RCNN 训练样本。Faster - RCNN 是一种用于目标检测的有效算法,其训练样本的特点和质量直接影响到模型对损伤目标的检测效果。从图中可以推测样本的多样性、代表性以及标注信息等方面的情况。例如,样本是否涵盖了不同角度、不同光照条件下的损伤情况,标注是否准确地框定了损伤区域等。这些因素都对 Faster - RCNN 能否准确地在实际场景中检测到损伤并定位有着关键作用。

图 5:Faster - RCNN 训练样本

图 5:Faster - RCNN 训练样本
图 6 给出了使用 AlexNet - 8 训练结果,包括训练损失(a)和验证准确率(b)。训练损失曲线反映了模型在训练过程中预测值与真实值之间的差异程度。随着训练的进行,损失值逐渐降低,说明模型在不断学习和优化,逐渐拟合数据。而验证准确率曲线则展示了模型在验证集上的性能表现。在训练初期,验证准确率可能会有波动,随着训练的深入,准确率逐渐上升并趋于稳定。通过对这两条曲线的分析,可以判断 AlexNet - 8 模型的训练效果,如是否存在过拟合或欠拟合现象,从而调整训练策略,如调整学习率、增加训练数据量等。

图 6:使用 AlexNet - 8 训练结果:(a)训练损失,(b)验证准确率

图 6:使用 AlexNet - 8 训练结果:(a)训练损失,(b)验证准确率
图 7 展示了使用 GoogLeNet - 22 训练结果,同样包含训练损失(a)和验证准确率(b)。与 AlexNet - 8 类似,通过对这些曲线的研究,可以深入了解 GoogLeNet - 22 模型的训练动态。比较两者的曲线,可以分析不同网络架构在本项目损伤检测任务中的优劣。例如,可能发现 GoogLeNet - 22 在处理某些复杂损伤特征时具有更好的表现,而 AlexNet - 8 在计算资源消耗或训练速度上有一定优势,这有助于根据实际需求选择更合适的网络架构。

图 7:使用 GoogLeNet - 22 训练结果:(a)训练损失,(b)验证准确率

图 7:使用 GoogLeNet - 22 训练结果:(a)训练损失,(b)验证准确率
图 8 的滑动窗口策略是本项目中的一个重要技术手段。滑动窗口在图像上逐步移动,对每个窗口内的图像区域进行 CNN 分析,从而实现对整个图像的全面检测。这种策略能够有效地处理不同尺寸和位置的损伤,提高损伤检测的覆盖率和准确性。例如,对于较大尺寸的图像,通过滑动窗口可以避免因一次性处理整个图像而导致的计算资源不足或特征提取不充分的问题。

图 8:滑动窗口策略
最后,图 9 呈现了基于 GoogLeNet - 22 与滑动窗口算法的测试结果。从图中可以直观地看到模型在实际测试中的表现,如对不同损伤类型的检测准确性、是否存在误判或漏判情况等。这些结果是对整个基于深度学习的结构损伤检测系统性能的综合评估,通过对测试结果的详细分析,可以进一步优化模型和算法,提高系统在实际工程应用中的可靠性和有效性。

图 9:基于 GoogLeNet - 22 与滑动窗口算法的测试结果

图 9:基于 GoogLeNet - 22 与滑动窗口算法的测试结果

关于分析师

在此对 Yufei Guo 对本文所作的贡献表示诚挚感谢,他在重庆大学完成了结构健康监测专业的硕士学位,专注深度学习领域。擅长 Python、Matlab 仿真、数据清洗、神经网络、数据分析 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/846356.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【专题】日本车企利润骤降94%,裁员9000人,中国新能源汽车行业迎头赶上|报告汇总PDF洞察(附原数据表)

原文链接:https://tecdat.cn/?p=38407 在全球化的汽车产业竞争中,中国新能源汽车的迅猛发展正重塑市场格局。近期,日本车企遭遇前所未有的挑战,利润大幅下滑,日产净利润暴跌94%,全球裁员9000人,而丰田等巨头也感受到了市场的压力。与此同时,中国品牌如比亚迪以破纪录的…

【恐怖の算法】 扫描线

【恐怖の算法】 扫描线【恐怖の算法】 扫描线 引入 扫描线一般运用在图形上面,它和它的字面意思十分相似,就是一条线在整个图上扫来扫去,它一般被用来解决图形面积,周长,以及二维数点等问题。 二维矩形面积并问题 在二维坐标系上,给出多个矩形的左下以及右上坐标,求出所…

堆栈2

1、 2、push 3push 2push 1 只有ESP发生变化(ESP=ESP-c),1、2、3也被压入栈 3、CALL 00401005(按F7不按F8) 把这个值(它的下一行)压入堆栈,EIP修改00401005(与9相同)按F7之后会生成一个JMP指令4、PUSH EBPMOV EBP,ESPSUB ESP,48 5、PUSH EBXPUSH ESIPUSH EDI 6、…

vxe-table 在 vxe-tabs 页签组件中使用表格

在 vxe-tabs 页签组件中使用 vxe-table 表格组件,自适应页签高度。 官网:https://vxetable.cn/<template><div><vxe-tabs padding><vxe-tab-pane title="页签1" name="1"><vxe-grid v-bind="gridOptions1"><…

jar包目录介绍

jar包目录介绍BOOT-INF:包含class文件和依赖jar META-INF:包含Class-Path:指定执行运行jar时的classpath; Main-Class:指定运行时的main方法所在类 org:包含springboot一些文件重要信息官网:https://ais.cn/u/vEbMBz

傻瓜式jvm基础学习

Q:jvm调优是在做什么? A:通过修改jvm参数和更换合适的垃圾回收器从而达到提高垃圾回收效率、降低停顿时间,提高系统的吞吐量和响应速度。从上面的问答中可以得到两个概念,jvm参数、垃圾回收器。程序计数器存储当前线程正在执行的Java方法的字节码指令地址的内存区域,作为…

既然overleaf崩了,那就立马尝试装本地的latex吧

目前还没定下来具体的latex搭配方案,只是先安装了各个软件 参考博客:https://zhuanlan.zhihu.com/p/607473890VSCode+Texlive+LaTeX Workshop+Copilot AI辅助写作 (推荐)参考博客:https://blog.csdn.net/Luan__Yu/article/details/143562703 超详细2024版Latex安装Texlive…

Everything 重大更新(新增拼音搜索 + 文档内容搜索)

Everything 重大更新(新增拼音搜索 + 文档内容搜索)原文:https://mp.weixin.qq.com/s/rrrijG0HXbQaCssWN9zAkQ Everything v1.5a 新版本开启拼音搜索的方法 现在官方更新,终于直接内置了中文拼音缩写搜索功能了! 另外,新版 Everything 还加入了呼声很高的文件全文内容搜索功…

jfinal 快速入门

0000package cn.jbolt.starter;import cn.jbolt.config.AppConfig; // 导入应用配置类 import com.jfinal.server.undertow.UndertowServer; // 导入Undertow服务器类// 主应用类 public class App {// 主函数,程序的入口点public static void main(String[] args) {// 创建Un…

高精度计算器-Qt版

代码 widget.h 文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <vector> #include <stack> using namespace std;QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:…

Power Automate 获取用户属性

前言最近,要在项目里需要获取用户的属性正文在Power Automate里有个Office 365 Users,里面有Action可以获取用户属性执行的结果,可以获取到很多属性,当然,这里都是默认的,如果想要更多的属性,在Select fields里添加就可以了。结束语想要其它的属性,参考官网就可以了。u…

JavaSwing 事件处理

1. 事件类型 2. ActionListenera:如果同一个组件添加了多个监听器,则每个监听器都会被执行, 后添加监听器会先被执行!b: 同一个监听器对象,可以监听多个组件!try{BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.osLookAndFeelDecorated;o…