无人机公路损伤目标检测数据集
Yolo格式
无人机公路损伤目标检测数据集
数量:11024张数据集
"训练集:8306""验证集:2012"“测试集:706”
类别数量:8类
类别类型:[1-Alligator Cracking 龟裂(网裂、鳄鱼皮裂缝,路表面呈网状或块状的密集裂纹,形似龟壳或鳄鱼皮。)
2-Longitudinal Crack 纵向裂缝
3-othole 坑洞(坑槽)
4-Rutting车辙(在车行道轮迹带产生的纵向带状凹陷变形。)
5-Transverse Crack 横向裂缝
6-Bleeding 泛油(沥青析出,沥青过多渗至表面形成光滑、发亮的油膜。)
7-Raveling 松散(集料脱落表面集料从沥青结合料中脱落,呈现粗糙麻面。)
8-Stripping 剥离(沥青与集料粘附失效)沥青膜与集料之间失去粘结力,导致分层破坏。]
文件格式:JPG
标签格式:txt
图片大小:640 x 640
1
1
📊 无人机公路损伤检测数据集概览表
| 项目 | 内容 |
|---|---|
| 数据集名称 | 无人机公路损伤目标检测数据集 |
| 总图像数量 | 11,024 张 |
| 图像格式 | JPG |
| 图像尺寸 | 统一为640 × 640 像素 |
| 标注格式 | YOLO 格式(.txt文件,每行:class x_center y_center width height,归一化) |
| 类别数量 | 8 类 |
| 数据划分 | 已科学划分,无需再处理:• 训练集:8,306 张• 验证集:2,012 张• 测试集:706 张 |
| 采集方式 | 无人机航拍(俯视视角,贴近真实巡检场景) |
| 适用模型 | YOLOv5 / YOLOv6 /YOLOv8/ YOLO11 等全系列通用 |
🗂️ 类别定义与说明表
| 类别ID | 中文名称 | 英文名称 | 描述 |
|---|---|---|---|
| 0 | 龟裂(网裂) | Alligator Cracking | 路表面呈网状或块状的密集裂纹,形似龟壳或鳄鱼皮 |
| 1 | 纵向裂缝 | Longitudinal Crack | 沿行车方向延伸的线性裂缝 |
| 2 | 坑洞 | Pothole | 路面局部塌陷形成的坑槽,通常边缘破碎 |
| 3 | 车辙 | Rutting | 在车行道轮迹带产生的纵向带状凹陷变形 |
| 4 | 横向裂缝 | Transverse Crack | 垂直于行车方向的裂缝,常贯穿整个车道 |
| 5 | 泛油(沥青析出) | Bleeding | 沥青过多渗至表面形成光滑、发亮的油膜 |
| 6 | 松散 | Raveling | 表面集料从沥青结合料中脱落,呈现粗糙麻面 |
| 7 | 剥离 | Stripping | 沥青膜与集料之间失去粘结力,导致分层破坏 |
✅ 类别 ID 从
0开始,符合 YOLO 标准索引规范
✅ 所有.txt标签文件与图像文件同名,一一对应
📁 推荐目录结构(标准 YOLO 格式)
drone_road_damage_dataset/ ├── images/ │ ├── train/ # 8,306 张 │ ├── val/ # 2,012 张 │ └── test/ # 706 张 ├── labels/ │ ├── train/ │ ├── val/ │ └── test/ └── data.yaml # YOLO 配置文件📄 示例data.yaml配置文件
# drone_road_damage_dataset/data.yamltrain:./images/trainval:./images/valtest:./images/testnc:8names:['Alligator_Cracking','Longitudinal_Crack','Pothole','Rutting','Transverse_Crack','Bleeding','Raveling','Stripping']⚠️ 使用前请确保路径与实际项目结构一致。
无人机公路损伤检测数据集(8 类,11,024 张图像,YOLO 格式)
✅ 一、YOLOv8 完整训练代码
1. 环境依赖安装
pipinstallultralytics opencv-python numpy matplotlib tqdm推荐使用 Python 3.8+ 和 PyTorch ≥ 1.10
2.data.yaml配置文件(保存为road_damage/data.yaml)
train:./images/trainval:./images/valtest:./images/testnc:8names:['Alligator_Cracking','Longitudinal_Crack','Pothole','Rutting','Transverse_Crack','Bleeding','Raveling','Stripping']确保你的数据目录结构如下:
road_damage/ ├── images/train/ # 8306 张 JPG ├── labels/train/ ├── images/val/ # 2012 张 ├── labels/val/ ├── images/test/ # 706 张 ├── labels/test/ └── data.yaml3. 训练脚本:train_road_damage.py
# train_road_damage.pyfromultralyticsimportYOLOimporttorch# 检查 GPUdevice='cuda'iftorch.cuda.is_available()else'cpu'print(f"Using device:{device}")# 加载预训练模型(可选 yolov8n / yolov8s / yolov8m)model=YOLO('yolov8s.pt')# 首次运行会自动下载# 开始训练results=model.train(data='road_damage/data.yaml',# 数据配置路径epochs=150,# 建议 100~200 轮imgsz=640,# 图像尺寸(已统一为 640x640)batch=32,# 根据 GPU 显存调整(RTX 3060 可设 32)name='road_damage_yolov8s',# 实验名称device=device,hsv_h=0.015,# 色调增强hsv_s=0.7,hsv_v=0.4,degrees=10.0,# 旋转translate=0.1,scale=0.5,mosaic=1.0,# Mosaic 增强(对小裂缝有效!)flipud=0.0,fliplr=0.5,patience=30,# 早停:30 轮无提升则停止save_period=10# 每 10 轮保存一次 checkpoint)print("✅ Training completed!")4. 启动训练(命令行方式,可选)
yolo detect train\data=road_damage/data.yaml\model=yolov8s.pt\epochs=150\imgsz=640\batch=32\name=road_damage_yolov8s\device=05. 评估模型性能
yolo detect val\model=runs/detect/road_damage_yolov8s/weights/best.pt\data=road_damage/data.yaml✅ 二、道路损伤检测系统(GUI 应用)
使用PyQt5 + OpenCV + YOLOv8构建桌面应用,支持图像/视频检测。
1. 安装 GUI 依赖
pipinstallpyqt5 pyqt5-tools2. 主程序:road_damage_detector.py
# road_damage_detector.pyimportsysimportcv2fromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QLabel,QPushButton,QVBoxLayout,QWidget,QFileDialog,QMessageBox)fromPyQt5.QtGuiimportQImage,QPixmapfromPyQt5.QtCoreimportQt,QTimerfromultralyticsimportYOLOimportnumpyasnpclassRoadDamageDetector(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle("🚥 无人机道路损伤检测系统")self.setGeometry(100,100,1000,700)# 初始化模型(请替换为你的 best.pt 路径)self.model_path="runs/detect/road_damage_yolov8s/weights/best.pt"try:self.model=YOLO(self.model_path)print("✅ 模型加载成功!")exceptExceptionase:QMessageBox.critical(self,"错误",f"模型加载失败:\n{str(e)}")sys.exit(1)self.cap=Noneself.timer=QTimer()self.timer.timeout.connect(self.update_frame)self.init_ui()definit_ui(self):central_widget=QWidget()self.setCentralWidget(central_widget)layout=QVBoxLayout()self.image_label=QLabel()self.image_label.setAlignment(Qt.AlignCenter)self.image_label.setMinimumSize(960,540)self.image_label.setStyleSheet("background-color: #f0f0f0; border: 1px solid #ccc;")btn_layout=QVBoxLayout()self.btn_image=QPushButton("📁 选择图像")self.btn_video=QPushButton("🎥 选择视频")self.btn_stop=QPushButton("⏹ 停止")self.btn_image.clicked.connect(self.load_image)self.btn_video.clicked.connect(self.load_video)self.btn_stop.clicked.connect(self.stop_media)forbtnin[self.btn_image,self.btn_video,self.btn_stop]:btn.setFixedHeight(40)btn_layout.addWidget(btn)layout.addWidget(self.image_label)layout.addLayout(btn_layout)central_widget.setLayout(layout)defload_image(self):path,_=QFileDialog.getOpenFileName(self,"选择图像","","Image Files (*.jpg *.png *.jpeg)")ifpath:self.process_image(path)defload_video(self):path,_=QFileDialog.getOpenFileName(self,"选择视频","","Video Files (*.mp4 *.avi *.mov)")ifpath:self.cap=cv2.VideoCapture(path)self.timer.start(30)# ~30 FPSdefstop_media(self):ifself.cap:self.cap.release()self.timer.stop()self.image_label.clear()defprocess_image(self,image_path):frame=cv2.imread(image_path)ifframeisNone:QMessageBox.warning(self,"警告","无法读取图像!")returnresult_frame=self.detect_and_draw(frame)self.display_image(result_frame)defupdate_frame(self):ifself.capandself.cap.isOpened():ret,frame=self.cap.read()ifret:result_frame=self.detect_and_draw(frame)self.display_image(result_frame)else:self.stop_media()defdetect_and_draw(self,frame):results=self.model(frame,conf=0.4)[0]# 置信度阈值 0.4annotated_frame=results.plot()# 自动绘制边界框和标签returnannotated_framedefdisplay_image(self,img):img_rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)h,w,ch=img_rgb.shape bytes_per_line=ch*w q_img=QImage(img_rgb.data,w,h,bytes_per_line,QImage.Format_RGB888)self.image_label.setPixmap(QPixmap.fromImage(q_img).scaled(self.image_label.width(),self.image_label.height(),Qt.KeepAspectRatio))defcloseEvent(self,event):self.stop_media()event.accept()if__name__=="__main__":app=QApplication(sys.argv)window=RoadDamageDetector()window.show()sys.exit(app.exec_())3. 运行检测系统
python road_damage_detector.py功能支持:
- 📁 上传单张图像进行检测
- 🎥 播放本地视频并实时标注
- ⏹ 随时停止
- 自动显示类别名称与置信度
✅ 三、部署建议
| 场景 | 建议 |
|---|---|
| 边缘设备(如 Jetson Nano) | 导出 ONNX:model.export(format='onnx') |
| Web 服务 | 使用 Flask/FastAPI 封装推理 API |
| 批量处理 | 编写脚本遍历test/目录并保存结果 |