桥梁损伤实例分割数据集 | 桥梁损伤 实例分割 裂缝检测 钢筋外露 混凝土剥落9160期
数据集概述
本数据集专注于桥梁结构表观损伤的像素级实例分割 ,服务于桥梁智能巡检、结构健康监测及养护决策。数据涵盖五类典型桥梁损伤,适配无人机巡检、人工检测辅助及自动化病害识别等应用。

数据集核心信息
| 数据要素 | 详细说明 |
|---|---|
| 类别 | 共 5 类:裂缝检测、钢筋外露、混凝土剥落、断裂、泛碱 |
| 数量 | 3261 张图像 |
| 格式 | 图像为 JPG/PNG(分辨率 512×512 );同时提供 YOLO 、VOC 、COCO 三种标注格式 |
| 数据划分 | 训练集 2936 张,验证集 162 张,测试集 163 张 |
| 应用价值 | 1. 智能巡检 :支撑桥梁表观损伤的自动化检测与分割,替代人工登高检查。 2. 量化评估 :通过像素级分割结果计算损伤面积,辅助结构健康评级。 3. 养护决策 :为桥梁维修计划制定提供数据基础,优化维护资源分配。 4. 算法研发:为实例分割、多类别损伤识别等视觉任务提供真实场景的训练与评测数据。 |

完整类别列表(共5类)
| 序号 | 英文名称 | 中文释义 | 包含该类图像数 | 标注框数量 |
|---|---|---|---|---|
| 0 | Crack-Detection | 裂缝检测 | 1391 | 2208 |
| 1 | Exposed Rebar | 钢筋外露 | 483 | 663 |
| 2 | Spalling | 混凝土剥落 | 484 | 675 |
| 3 | Break | 断裂 | 472 | 493 |
| 4 | Efflorescence | 泛碱 | 422 | 2143 |

数据三要素解析
类别与损伤覆盖
- 数据集定义 5 类桥梁典型损伤:裂缝 、钢筋外露 、混凝土剥落 、断裂 、泛碱。
- 损伤类型覆盖了混凝土桥梁从物理开裂、保护层剥落到材料劣化(泛碱)、结构断裂的主要失效模式。
- 类别设置与桥梁养护技术规范中的常见病害分类相衔接,具有较强的工程实用性。

数据规模与划分
- 图像总量约 3261 张,按约 90:5:5 比例划分为训练集(2936张)、验证集(162张)与测试集(163张),划分规范。
- 图像分辨率统一为 512×512,可直接输入常见分割网络。
- 同时提供 YOLO 、VOC 、COCO 三种通用标注格式,灵活适配不同分割框架。
配套资源与源码
- 附赠基于 YOLOv11n-seg 训练的完整模型(训练60轮),可直接推理或作为迁移学习起点。
- 提供全部训练 + 测试源代码。
- 提供 PyQt5 可视化界面 (含完整源码),支持图片、视频、摄像头实时检测,实时显示目标位置、类别、置信度等信息。

知识普及:桥梁损伤实例分割的技术要点
- 裂缝的细长特征:裂缝呈细长线状,对分割算法的边缘保持能力要求较高。建议采用具有跳跃连接的网络结构(如U-Net)或YOLOv11-seg。
- 泛碱的边界模糊:泛碱等损伤边界可能模糊,与混凝土表面纹理交织,需依赖色彩与纹理特征进行区分。
- 钢筋外露与剥落的关联:钢筋外露常伴随混凝土剥落发生,两者在空间上相邻,模型需能同时定位并区分。
- 类别不平衡:裂缝类样本最多(1391张),泛碱类标注框数量最多(2143个),模型需学习各类别的特征分布。
- 实例分割优势:相比目标检测(边界框),实例分割能精确勾勒损伤轮廓,支持面积、周长等几何参数计算,对工程量化分析至关重要。
- 应用闭环:分割结果可导入桥梁管理系统,结合桩号与结构信息,生成损伤分布图与维修工单。
快速开始(代码示例)
1. 准备配置文件 (bridge_damage.yaml)
yaml
path: ./bridge_damage
train: images/train
val: images/val
test: images/test
nc: 5
names: ['Crack-Detection', 'Exposed Rebar', 'Spalling', 'Break', 'Efflorescence']
2. 启动 YOLOv11n-seg 训练
python
from ultralytics import YOLO
if __name__ == '__main__':
model = YOLO("yolo11n-seg.pt")
results = model.train(
data="bridge_damage.yaml",
epochs=60,
imgsz=512,
batch=12,
device=0,
pretrained=True,
patience=8
)
print("训练完成,best权重路径:runs/segment/train/weights/best.pt")
3. 单图推理
python
from ultralytics import YOLO
import cv2
import numpy as np
model = YOLO("runs/segment/train/weights/best.pt")
def seg_img(img_path):
img = cv2.imread(img_path)
res = model(img, conf=0.25)
for r in res:
boxes = r.boxes
masks = r.masks
if masks is not None:
masks = masks.data.cpu().numpy()
for seg, box in zip(masks, boxes):
seg = seg.astype(np.uint8)
color_mask = np.zeros_like(img)
color_mask[seg > 0] = (0, 255, 0)
img = cv2.addWeighted(img, 1, color_mask, 0.4, 0)
x1, y1, x2, y2 = map(int, box.xyxy[0])
cls_name = model.names[int(box.cls[0])]
conf = float(box.conf[0])
cv2.rectangle(img, (x1, y1), (x2, y2), (255, 0, 0), 2)
cv2.putText(img, f"{cls_name} {conf:.2f}", (x1, y1 - 5),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 2)
cv2.imwrite("result.jpg", img)
return img
if __name__ == "__main__":
seg_img("test.jpg")
4. PyQt5 可视化界面(核心逻辑)
python
import sys
import cv2
import numpy as np
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QFileDialog, QLabel, QTableWidget, QTableWidgetItem
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtCore import Qt
from ultralytics import YOLO
class MainWin(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("YOLOv11-seg桥梁损伤分割系统")
self.setGeometry(60, 60, 1600, 900)
self.model = YOLO("runs/segment/train/weights/best.pt")
self.result_img = None
self.initUI()
def initUI(self):
self.label_origin = QLabel("原始图像", self)
self.label_origin.setGeometry(20, 30, 700, 550)
self.label_origin.setStyleSheet("border:1px solid #777")
self.label_result = QLabel("分割结果", self)
self.label_result.setGeometry(760, 30, 700, 550)
self.label_result.setStyleSheet("border:1px solid #777")
self.btn_img = QPushButton("选择图片", self)
self.btn_img.setGeometry(20, 600, 130, 40)
self.btn_img.clicked.connect(self.load_image)
self.table = QTableWidget(self)
self.table.setGeometry(20, 660, 1440, 200)
self.table.setColumnCount(5)
self.table.setHorizontalHeaderLabels(["序号", "类别", "置信度", "xmin,ymin", "bbox"])
def load_image(self):
file_path, _ = QFileDialog.getOpenFileName(self, "打开图片", ".", "Image(*.png *.jpg *.bmp)")
if not file_path:
return
img_ori = cv2.imread(file_path)
# ... 推理与结果显示逻辑
标签
桥梁损伤 实例分割 裂缝检测 钢筋外露 混凝土剥落 目标检测 YOLO格式 深度学习数据集 计算机视觉