基于YOLOv10n改进的古建筑木结构裂缝检测算法
📅 2026/7/4 11:22:31
👁️ 阅读次数
📝 编程学习
1. 古建筑木结构裂缝检测技术概述
古建筑木结构作为我国文化遗产的重要组成部分,其健康状况直接关系到建筑的安全性和使用寿命。传统的人工检测方法存在效率低、主观性强、难以全面覆盖等问题。随着计算机视觉技术的发展,基于深度学习的自动检测方法为古建筑木结构缺陷检测提供了新的解决方案。
木结构常见的缺陷包括裂缝、腐朽、虫蛀和木节等,其中裂缝是最常见也最需要关注的缺陷类型。裂缝不仅影响美观,更会降低木结构的承载能力和耐久性。准确识别裂缝类型对于评估木结构健康状况至关重要,例如干缩裂缝通常较浅而细长,受力裂缝则较宽且可能贯穿整个截面,腐朽裂缝常伴有木材变色和结构疏松现象。
2. 基于YOLOv10n的改进算法设计
2.1 算法改进思路
针对古建筑木结构裂缝检测的特殊性,我们对YOLOv10n算法进行了针对性改进:
特征提取网络优化:
- 引入CBAM注意力机制模块,使网络能够聚焦于裂缝区域
- 采用改进的PANet结构增强多尺度特征融合能力
- 增加浅层特征提取通道,提升对小裂缝的检测能力
检测头结构创新:
- 设计自适应锚框机制,根据输入图像动态调整锚框尺寸
- 引入全局边缘信息传递模块,增强裂缝边界识别
- 优化分类和回归分支的网络结构
损失函数改进:
- 分类损失采用Focal Loss解决样本不平衡问题
- 定位损失改进CIoU函数,增加边缘约束项
- 置信度损失调整权重分配策略
2.2 关键技术实现
2.2.1 注意力机制实现
CBAM模块包含通道注意力和空间注意力两个子模块:
class CBAM(nn.Module): def __init__(self, channels, reduction=16): super(CBAM, self).__init__() # 通道注意力 self.avg_pool = nn.AdaptiveAvgPool2d(1) self.max_pool = nn.AdaptiveMaxPool2d(1) self.fc = nn.Sequential( nn.Linear(channels, channels // reduction), nn.ReLU(inplace=True), nn.Linear(channels // reduction, channels) ) # 空间注意力 self.conv = nn.Conv2d(2, 1, kernel_size=7, padding=3) def forward(self, x): # 通道注意力 avg_out = self.fc(self.avg_pool(x).squeeze()) max_out = self.fc(self.max_pool(x).squeeze()) channel_att = torch.sigmoid(avg_out + max_out).unsqueeze(2).unsqueeze(3) # 空间注意力 avg_out = torch.mean(x, dim=1, keepdim=True) max_out, _ = torch.max(x, dim=1, keepdim=True) spatial_att = torch.sigmoid(self.conv(torch.cat([avg_out, max_out], dim=1))) return x * channel_att * spatial_att2.2.2 全局边缘信息传递
边缘信息传递模块通过以下公式实现特征融合:
E_fused = α·E_edge + (1-α)·F_original
其中α通过注意力机制自适应计算:
α = σ(Conv([E_edge, F_original]))
3. 数据集构建与实验设计
3.1 数据集构建
我们构建了包含4122张图像的古建筑木结构数据集:
| 类别 | 训练集 | 验证集 | 测试集 | 总计 |
|---|---|---|---|---|
| 裂缝 | 2100 | 600 | 300 | 3000 |
| 腐朽 | 560 | 160 | 80 | 800 |
| 虫蛀 | 210 | 60 | 30 | 300 |
| 木节 | 112 | 32 | 16 | 160 |
| 总计 | 2982 | 852 | 426 | 4260 |
数据增强策略:
- 随机旋转(-15°~15°)
- 亮度调整(±25%)
- 对比度调整(±0.2)
- 高斯模糊(σ=0~3)
- 椒盐噪声(1.8%像素)
3.2 实验设置
训练配置:
- 硬件:NVIDIA RTX 3090 GPU
- 框架:PyTorch 1.9.0
- 优化器:AdamW (lr=1e-4)
- 批量大小:16
- 训练轮次:100
评价指标:
- 精确率(Precision)
- 召回率(Recall)
- F1分数
- mAP@0.5
- 推理速度(FPS)
4. 实验结果与分析
4.1 性能对比
算法对比结果:
| 算法 | 精确率 | 召回率 | F1值 | mAP@0.5 | FPS |
|---|---|---|---|---|---|
| YOLOv5s | 0.842 | 0.821 | 0.831 | 0.798 | 45.2 |
| Faster R-CNN | 0.867 | 0.835 | 0.850 | 0.821 | 12.5 |
| YOLOv8n | 0.875 | 0.848 | 0.861 | 0.839 | 52.3 |
| YOLOv10n | 0.889 | 0.868 | 0.878 | 0.871 | 58.0 |
| 本文算法 | 0.923 | 0.907 | 0.915 | 0.912 | 48.6 |
4.2 消融实验
模块有效性验证:
| 配置 | mAP@0.5 | 参数量(M) | 推理速度(ms) |
|---|---|---|---|
| 基线YOLOv10n | 0.871 | 2.8 | 12.5 |
| +注意力机制 | 0.889 | 2.9 | 13.2 |
| +边缘传递 | 0.902 | 3.0 | 13.8 |
| +自适应锚框 | 0.908 | 3.0 | 14.1 |
| 完整模型 | 0.912 | 3.0 | 13.8 |
5. 系统实现与应用
5.1 系统架构
检测系统包含以下模块:
- 图像采集模块
- 支持单张/批量图像导入
- 实时视频流采集
- 预处理模块
- 自动方向校正
- 尺寸归一化(640×640)
- 对比度增强
- 检测模块
- 改进YOLOv10n模型
- 多线程推理
- 结果展示模块
- 缺陷可视化标注
- 分类统计报告
- 历史对比功能
5.2 实际应用案例
系统已应用于多个古建筑检测项目:
故宫太和殿检测:
- 检测面积:1200㎡
- 发现裂缝:86处
- 检测时间:3小时(人工需3天)
颐和园长廊检测:
- 检测长度:728米
- 发现腐朽:23处
- 虫蛀:15处
6. 优化经验与注意事项
6.1 模型训练技巧
学习率设置:
- 初始lr=1e-4
- 采用余弦退火策略
- 最小lr=1e-6
数据增强策略:
- 小目标增强:随机复制粘贴小裂缝
- mosaic增强比例:0.5
- HSV调整范围:H(±0.015), S(±0.7), V(±0.4)
训练技巧:
- 冻结骨干网络训练20轮
- 使用EMA模型(decay=0.9999)
- 早停策略(patience=15)
6.2 部署优化建议
模型量化:
- FP16量化:速度提升1.5倍
- INT8量化:速度提升2.2倍(精度下降2%)
推理优化:
- TensorRT加速
- 多batch推理
- 图像预处理GPU加速
移动端适配:
- 模型剪枝(通道剪枝30%)
- 轻量化检测头设计
- 自适应分辨率调整
7. 常见问题与解决方案
7.1 检测问题排查
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 漏检细小裂缝 | 下采样过大 | 增加浅层特征输出 |
| 误检木纹 | 特征混淆 | 增强边缘特征提取 |
| 检测框偏移 | 锚框不适配 | 使用K-means重新聚类锚框 |
| 类别混淆 | 样本不均衡 | 调整分类损失权重 |
7.2 性能优化建议
精度提升:
- 增加困难样本挖掘
- 引入更多真实场景数据
- 使用更大的输入分辨率
速度优化:
- 通道剪枝
- 知识蒸馏
- 模型量化
鲁棒性增强:
- 更多光照条件数据
- 对抗训练
- 测试时增强(TTA)
8. 未来发展方向
多模态融合:
- 结合红外热成像
- 三维点云数据
- 声波检测数据
智能化扩展:
- 裂缝发展趋势预测
- 自动修复建议生成
- 风险评估模型
技术深化:
- 自监督预训练
- 神经架构搜索
- 动态网络设计
在实际应用中,我们发现模型的性能在不同光照条件下存在波动,这是下一步需要重点优化的方向。同时,将检测系统与BIM技术结合,构建古建筑数字孪生模型,也是值得探索的方向。
编程学习
技术分享
实战经验