数据集描述:

深度学习YOLOV8模型如何训练建筑工地工程类桥梁/建筑/裂缝病害检测数据集的训练及应用 建筑物损伤分割与检测数据集 建筑结构健康监测、城市基础设施巡检、AI辅助工程评估等方向的研究与应用

文章目录

      • **类别标注统计表**

      • 数据集信息

      • 目标

    • ✅ 一、环境配置

      • 1. 安装 CUDA 驱动(GPU 加速)

      • 2. 安装 Anaconda

      • 3. 创建 Python 虚拟环境

      • 4. 安装必要依赖

    • ✅ 二、数据集结构与 `data.yaml` 配置

      • 数据目录结构

      • 创建 `data.yaml`

    • ✅ 三、调用 YOLOv8 官方预训练模型进行训练

    • ✅ 四、推理代码(单图 / 批量 / 视频)

      • 1. 单张图像推理

      • 2. 批量图像推理

      • 3. 视频检测(如无人机巡检视频)

      • 4. 实时摄像头检测(OpenCV)

    • ✅ 五、模型评估(验证集 + 测试集)

      • 1. 在验证集上评估

      • 2. 在测试集上独立评估(最终性能)

    • ✅ 六、可视化与分析

      • 1. 使用中文标签显示

      • 2. 查看训练曲线

    • ✅ 七、模型导出(ONNX / TensorRT / TFLite)


以下文字及代码仅供参考学习使用。 “建筑物损伤分割与检测数据集”

项目

内容

数据集名称

建筑物损伤分割与检测数据集

图像总数

5,925 张

标注格式

VOC 格式、YOLO 格式(支持目标检测与图像分割任务)

类别数量

4 类

任务类型

目标检测、语义分割


类别标注统计表

类别编号

英文名称

中文名称

标注数量(实例数)

0

Rebar-Exposure

钢筋外露

1,281

1

Corrosion

腐蚀

6,843

2

Efflorescence

泛碱

2,297

3

Cracked

开裂

3,471

总计

——

——

13,892

注:标注数量为所有图像中各类缺陷的实例总数。


适用于建筑结构健康监测、城市基础设施巡检、AI辅助工程评估等方向的研究与应用。


使用YOLOv8 训练和推理一个建筑物损伤分割与检测数据集(5925张图片,4类标注)从环境搭建、数据准备、模型训练、推理到评估提供完整的技术流程与代码。由于这是一个包含多种建筑损伤的多类别目标检测任务,侧重于如何利用 YOLOv8 的强大能力来准确识别并定位这些损伤。

数据集信息

  • 类别数量: 4

    • Rebar-Exposure (钢筋外露)

    • Corrosion (腐蚀)

    • Efflorescence (泛碱)

    • Cracked (开裂)

  • 图像总数: 5925 张

  • 标注格式: 提供 VOC 和 YOLO 格式

目标

  1. 搭建 YOLOv8 环境。

  2. 配置数据集以适应 YOLOv8 训练。

  3. 使用预训练模型进行迁移学习。

  4. 完成模型训练、推理、评估全流程。

  5. 导出模型用于部署。


✅ 一、环境配置

1. 安装 CUDA 驱动(GPU 加速)

确保你的 NVIDIA 显卡驱动已安装:

nvidia-smi

输出应显示 GPU 信息。推荐使用 CUDA 11.8 或 12.1


2. 安装 Anaconda

下载并安装 Anaconda(Python 3.9+ 推荐)。


3. 创建 Python 虚拟环境

conda create -n building_damage_yolo python=3.9
conda activate building_damage_yolo

4. 安装必要依赖

# 安装 PyTorch(以 CUDA 11.8 为例)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

# 安装 YOLOv8 官方库
pip install ultralytics opencv-python numpy matplotlib tqdm scikit-learn pandas pillow

# 可选:TensorBoard 可视化
pip install tensorboard

# 如果需要处理 VOC 格式
pip install lxml  # 用于解析 XML (VOC)

验证 GPU 是否可用:

python -c "import torch; print(torch.cuda.is_available())"
# 应输出 True

✅ 二、数据集结构与 data.yaml 配置

将使用 YOLO 格式的标注文件,并且数据集已经按照 8:1:1 的比例划分(即训练集4740张,验证集592张,测试集593张)。

数据目录结构

building_damage_dataset/
├── images/
│   ├── train/      # 训练集图像
│   ├── val/        # 验证集图像
│   └── test/       # 测试集图像
├── labels/
│   ├── train/      # 对应的 .txt 文件 (YOLO 格式)
│   ├── val/
│   └── test/
└── data.yaml       # 数据配置文件

创建 data.yaml

在项目根目录创建 data.yaml 文件:

# data.yaml
train: ./building_damage_dataset/images/train
val: ./building_damage_dataset/images/val
test: ./building_damage_dataset/images/test  # 支持独立测试集评估

# 类别数量
nc:4

# 英文类别名称(与标签顺序一致)
names:
- Rebar-Exposure
- Corrosion
- Efflorescence
- Cracked

# 中文映射(用于可视化)
names_zh:
- 钢筋外露
- 腐蚀
- 泛碱
- 开裂

注意:YOLOv8 要求 names 列表中的顺序与 .txt 标注中的类别 ID 完全对应(从 0 开始)。


✅ 三、调用 YOLOv8 官方预训练模型进行训练

考虑到该数据集包含了较为复杂的建筑损伤类型,建议使用 YOLOv8m 或 YOLOv8l 提升分类精度。

from ultralytics import YOLO

# 加载官方预训练模型(推荐使用 yolov8m.pt)
model = YOLO('yolov8m.pt')# 自动下载 ImageNet 预训练权重

# 开始训练
results = model.train(
    data='data.yaml',# 数据配置文件
    epochs=100,# 训练轮数
    batch=32,# 根据显存调整(RTX 3090 可用 64)
    imgsz=640,# 输入尺寸(可尝试 800 提升小目标检测)
    optimizer='AdamW',# 更稳定优化器
    lr0=0.001,# 初始学习率
    weight_decay=0.0005,
    momentum=0.937,

# 数据增强(提升泛化能力)
    augment=True,
    hsv_h=0.015,# 色调扰动
    hsv_s=0.7,
    hsv_v=0.4,
    degrees=10.0,# 随机旋转
    translate=0.1,
    scale=0.5,
    shear=0.0,
    flipud=0.0,
    fliplr=0.5,# 左右翻转
    mosaic=1.0,# Mosaic 增强
    mixup=0.1,# MixUp
    copy_paste=0.1,# Copy-Paste Augmentation

# 正则化
    dropout=0.2,
    label_smoothing=0.1,# 标签平滑,防止过拟合

# 学习率调度
    cos_lr=True,# 余弦退火学习率

# 保存与日志
    project='runs/train',
    name='building_damage_yolov8m',
    save=True,
    save_period=10,
    exist_ok=False,

# 缓存(内存充足时开启)
    cache=False
)

建议

  • 若显存不足,改用 yolov8s.pt 或降低 batch=16

  • 尝试 imgsz=800 提升远处小目标检测能力

  • 使用 copy_paste 增强稀有类别(如 Rebar-Exposure

✅ 四、推理代码(单图 / 批量 / 视频)

1. 单张图像推理

from ultralytics import YOLO
from PIL import Image

# 加载最佳模型
model = YOLO('runs/train/building_damage_yolov8m/weights/best.pt')

# 推理
results = model('test_building.jpg', conf=0.4)# 设置置信度阈值

# 显示结果
for r in results:
    im_array = r.plot()# 绘制边界框和标签
    im = Image.fromarray(im_array[...,::-1])# BGR to RGB
    im.show()

2. 批量图像推理

results = model.predict(
    source='building_damage_dataset/images/test',
    save=True,
    project='runs/detect',
    name='building_damage_test_results',
    conf=0.4,
    imgsz=640
)
print("批量推理完成")

3. 视频检测(如无人机巡检视频)

results = model.predict(
    source='building_inspection_video.mp4',
    save=True,
    project='runs/detect/video',
    name='building_damage_video_result',
    show=False,
    conf=0.4
)
print("视频检测完成")

4. 实时摄像头检测(OpenCV)

import cv2

cap = cv2.VideoCapture(0)

while cap.isOpened():
    ret, frame = cap.read()
ifnot ret:
break

    results = model(frame, conf=0.4)
    annotated_frame = results[0].plot()

    cv2.imshow('Building Damage Detection', annotated_frame)
if cv2.waitKey(1)&0xFF==ord('q'):
break

cap.release()
cv2.destroyAllWindows()

✅ 五、模型评估(验证集 + 测试集)

1. 在验证集上评估

metrics = model.val(
    data='data.yaml',
    split='val',
    batch=32,
    imgsz=640,
    save_json=False,
    project='runs/val',
    name='building_damage_eval'
)

print(f"mAP@0.5: {metrics.box.map50:.4f}")
print(f"mAP@0.5:0.95: {metrics.box.map:.4f}")
print(f"Precision: {metrics.box.p:.4f}")
print(f"Recall: {metrics.box.r:.4f}")

# 每类 AP
for i, name inenumerate(model.names):
print(f"{name} (AP@0.5): {metrics.box.ap[i]:.4f}")

2. 在测试集上独立评估(最终性能)

# 使用 test split 进行最终性能评估
test_metrics = model.val(
    data='data.yaml',
    split='test',
    save_json=True,
    name='test_final'
)

print(f"Test mAP@0.5: {test_metrics.box.map50:.4f}")
print(f"Test Recall: {test_metrics.box.r:.4f}")

✅ 六、可视化与分析

1. 使用中文标签显示

# 修改模型类名显示为中文
model.names =['钢筋外露','腐蚀','泛碱','开裂']

results = model('test.jpg')
results[0].plot()# 显示中文标签

2. 查看训练曲线

tensorboard --logdir runs/train/building_damage_yolov8m

✅ 七、模型导出(ONNX / TensorRT / TFLite)

# 导出为 ONNX(通用部署)
model.export(format='onnx', dynamic=True, opset=13, imgsz=640)

# 导出为 TensorRT(NVIDIA GPU 加速)
model.export(format='engine', half=True, dynamic=True)

# 导出为 TFLite(移动端)
model.export(format='tflite', int8=True)

# 导出为 CoreML(iOS)
model.export(format='coreml')

以上文字及代码仅供参考学习使用。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐