YOLO模型如何训练 桥梁缺陷目标检测数据集 桥梁缺陷检测 #智慧交通 #桥梁巡检 #市政工程 #结构监测
📅 2026/7/15 14:48:30
👁️ 阅读次数
📝 编程学习
桥梁缺陷目标检测数据集
【内容】16045张图片,包含’Biodegradation’, ‘Concrete-leaching’, ‘Corrison’, ‘Crack’, ‘Efflorescence’, ‘Exposed-reinforcement-steel’, ‘Formwork-Niche’, 'Staining-or-infiltration’等8类目标,图片清晰标注,适合yolo等目标检测模型训练
1
1
1
1
一、数据集信息总表
| 项目 | 详细说明 |
|---|---|
| 数据集名称 | 桥梁缺陷目标检测数据集 |
| 图像总量 | 16045 张 |
| 标注格式 | YOLO 标准.txt标签,图签一一对应 |
| 检测类别 | 共8类桥梁病害: 0: Biodegradation(生物侵蚀) 1: Concrete-leaching(混凝土溶蚀) 2: Corrosion(腐蚀) 3: Crack(裂缝) 4: Efflorescence(泛碱/盐析) 5: Exposed-reinforcement-steel(钢筋外露) 6: Formwork-Niche(模板凹坑) 7: Staining-or-infiltration(污渍/渗渍) |
| 图像质量 | 图像清晰,人工精细标注 |
| 适用模型 | YOLOv5 / YOLOv7 / YOLOv8 / YOLOv11 等主流目标检测模型 |
| 应用场景 | 桥梁外观病害智能巡检、结构健康监测、市政桥梁自动化缺陷识别 |
| 数据划分建议 | 训练集:验证集:测试集 = 8:1:1 |
二、数据集目录结构
按 YOLO 标准格式整理,目录如下:
bridge_defect/ ├── images/ │ ├── train/ # 训练集图片 │ ├── val/ # 验证集图片 │ └── test/ # 测试集图片 ├── labels/ │ ├── train/ # 对应训练集txt标签 │ ├── val/ # 对应验证集txt标签 │ └── test/ # 对应测试集txt标签 └── bridge_defect.yaml # 模型配置文件三、YOLO 配置文件bridge_defect.yaml
放置在数据集根目录,类别顺序不可改动:
# 数据集根路径,根据本地实际路径修改path:./bridge_defecttrain:images/trainval:images/valtest:images/test# 类别数量nc:8# 8类病害名称names:0:Biodegradation1:Concrete-leaching2:Corrosion3:Crack4:Efflorescence5:Exposed-reinforcement-steel6:Formwork-Niche7:Staining-or-infiltration四、环境依赖安装
# YOLOv8 / YOLOv11 通用依赖pipinstallultralytics opencv-python numpy五、完整训练代码(YOLOv8 推荐)
针对桥梁表面缺陷(细长裂缝、小面积腐蚀/污渍、多尺度目标)做参数优化
5.1 训练脚本train_bridge_defect.py
fromultralyticsimportYOLOdeftrain_bridge_defect():# 加载预训练权重:n(轻量) / s(均衡) / m(高精度) / l(大型)model=YOLO("yolov8s.pt")# 训练参数配置model.train(data="./bridge_defect/bridge_defect.yaml",# 指向yaml配置文件epochs=150,imgsz=640,batch=16,# 显存不足改为 8 / 4device=0,# 无GPU改为 device="cpu"workers=4,patience=30,# 早停,防止过拟合pretrained=True,optimizer="Adam",lr0=0.001,# 数据增强:适配户外光照、阴影、表面纹理干扰mosaic=0.85,hsv_h=0.015,hsv_s=0.7,hsv_v=0.4,fliplr=0.5,flipud=0.2,# 缺陷检测阈值优化conf=0.2,iou=0.45,# 输出路径project="runs/bridge_defect",name="train_yolov8",exist_ok=True)print("训练完成!最优模型路径:runs/bridge_defect/train_yolov8/weights/best.pt")if__name__=="__main__":train_bridge_defect()5.2 推理测试脚本predict_bridge.py
支持单图、批量图片、视频、摄像头实时检测:
fromultralyticsimportYOLO# 加载训练完成的最优权重model=YOLO("./runs/bridge_defect/train_yolov8/weights/best.pt")if__name__=="__main__":# 1. 单张图片检测# model("test.jpg", save=True, conf=0.2)# 2. 文件夹批量图片检测(推荐)model(source="./test_images",save=True,conf=0.2)# 3. 视频流检测(桥梁巡检视频)# model("bridge_video.mp4", save=True, conf=0.2)# 4. 本地摄像头实时检测# model(source=0, save=True, conf=0.2)print("检测完成,结果保存在 runs/detect 目录")5.3 YOLOv5 启动命令(备选)
将bridge_defect.yaml放入 YOLOv5 工程data文件夹,命令行执行:
python train.py--datadata/bridge_defect.yaml--epochs150--imgsz640--batch16--weightsyolov5s.pt六、可选:PyQt5 可视化检测界面
做成桌面工具,适合现场演示、单机部署,和常规界面风格统一:
importsysimportosfromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QWidget,QVBoxLayout,QHBoxLayout,QPushButton,QLabel,QFileDialog,QTextEdit)fromPyQt5.QtGuiimportQPixmapfromPyQt5.QtCoreimportQtfromultralyticsimportYOLOclassBridgeDefectUI(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle("桥梁缺陷检测工具")self.setGeometry(100,100,1000,700)# 加载训练好的模型self.model=YOLO("./runs/bridge_defect/train_yolov8/weights/best.pt")self.file_path=""self.init_ui()definit_ui(self):central=QWidget()self.setCentralWidget(central)main_layout=QVBoxLayout(central)# 按钮区域btn_layout=QHBoxLayout()self.btn_select=QPushButton("选择图片/视频")self.btn_detect=QPushButton("开始检测")self.btn_select.clicked.connect(self.select_file)self.btn_detect.clicked.connect(self.do_detect)btn_layout.addWidget(self.btn_select)btn_layout.addWidget(self.btn_detect)main_layout.addLayout(btn_layout)# 路径显示self.path_label=QLabel("当前文件:无")main_layout.addWidget(self.path_label)# 图片显示区self.img_label=QLabel()self.img_label.setAlignment(Qt.AlignCenter)self.img_label.setMinimumSize(800,480)main_layout.addWidget(self.img_label)# 日志输出self.log_text=QTextEdit()self.log_text.setReadOnly(True)main_layout.addWidget(self.log_text)defselect_file(self):file_path,_=QFileDialog.getOpenFileName(self,"选择检测文件","","图片文件 (*.jpg *.png *.jpeg);; 视频文件 (*.mp4);; 所有文件 (*)")iffile_path:self.file_path=file_path self.path_label.setText(f"当前文件:{file_path}")iffile_path.lower().endswith(("jpg","png","jpeg")):pix=QPixmap(file_path)self.img_label.setPixmap(pix.scaled(self.img_label.size(),Qt.KeepAspectRatio,Qt.SmoothTransformation))self.log_text.append("文件加载完成,点击【开始检测】")defdo_detect(self):ifnotself.file_pathornotos.path.exists(self.file_path):self.log_text.append("请先选择有效文件!")returnself.log_text.append("正在执行缺陷检测...")results=self.model(self.file_path,save=True,conf=0.2)res_dir=results[0].save_dir res_img=os.path.join(res_dir,os.path.basename(self.file_path))ifos.path.exists(res_img):pix=QPixmap(res_img)self.img_label.setPixmap(pix.scaled(self.img_label.size(),Qt.KeepAspectRatio,Qt.SmoothTransformation))self.log_text.append(f"检测完成!结果已保存至:{res_dir}")else:self.log_text.append("视频检测完成,请查看输出目录")if__name__=="__main__":app=QApplication(sys.argv)win=BridgeDefectUI()win.show()sys.exit(app.exec_())
编程学习
技术分享
实战经验