交通路障类 道路灾后障碍物检测数据集19250张,yolo和voc两种标注yolo和voc两种标注方式图像尺寸:480*640类别数量:4类训练集图像数量: 17583;验证集图像数量:1221;测试集图像数量:446类别名称:每一类图像数每一类标注数. landslide -山体滑坡: 4432 4821fallen tree -倒伏树: 7530 9477stone -石头: 2645 21770road collapse -道路坍塌: 3963 5613image num: 19250111交通道路灾害后障碍物检测数据集 数据集总体概览项目内容总图像数量19,250 张图像分辨率480 × 640高 × 宽类别数量4 类标注格式同时提供YOLO 格式.txt和PASCAL VOC 格式.xml数据划分- 训练集17,583 张- 验证集1,221 张- 测试集446 张️ 类别分布统计表类别 ID类别名称英文类别名称中文图像数量含该类的图像数标注框总数instances平均每图目标数0landslide山体滑坡4,4324,821≈1.091fallen tree倒伏树7,5309,477≈1.262stone石头2,64521,770≈8.233road collapse道路坍塌3,9635,613≈1.42—总计去重图像数—19,250各图像可含多类41,681— 注图像数量 ≠ 总和因单张图像可能包含多个类别如“石头倒伏树”但所有图像合计为 19,250 张。“石头”类标注数远高于图像数表明该类别常以密集小目标形式出现如碎石堆。 数据组织建议推荐结构road_disaster_dataset/ ├── images/ │ ├── train/ # 17,583 张 │ ├── val/ # 1,221 张 │ └── test/ # 446 张 ├── labels_yolo/ # YOLO 格式 (.txt) │ ├── train/ │ ├── val/ │ └── test/ ├── annotations_voc/ # VOC 格式 (.xml) │ ├── train/ │ ├── val/ │ └── test/ └── dataset.yaml # 用于 YOLOv8 训练dataset.yaml示例YOLOv8 使用# dataset.yamltrain:./images/trainval:./images/valtest:./images/testnc:4names:[landslide,fallen tree,stone,road collapse]✅ 应用场景智能交通系统中的道路异常自动巡检无人机/车载摄像头灾后快速评估高速公路养护自动化障碍物识别自动驾驶车辆的极端场景感知模块以下是基于 YOLOv8 构建道路障碍物检测系统的完整指南涵盖数据准备、模型训练、推理部署、可视化界面及工程化建议。该系统专为道路灾害障碍检测山体滑坡、倒伏树、石头、道路坍塌设计支持高精度、实时检测。 一、项目目标检测 4 类道路障碍landslide、fallen tree、stone、road collapse支持图像、视频、摄像头、无人机/车载设备输入提供训练 推理 可视化一体化解决方案兼容 YOLO 格式已提供 19,250 张标注数据 二、项目结构road_obstacle_detection/ ├── data/ │ ├── images/ │ │ ├── train/# 17,583│ │ ├── val/# 1,221│ │ └── test/# 446│ ├── labels/# YOLO格式 .txt│ │ ├── train/ │ │ ├── val/ │ │ └── test/ │ └── dataset.yaml# 数据配置├── weights/ │ └── yolov8s.pt# 官方预训练权重自动下载├── outputs/# 推理结果保存目录├── models/# 训练输出模型best.pt├── train.py# 训练脚本├── detect.py# 推理核心├── GUI.py# PySide6 可视化界面可选├── utils/ │ ├── convert_voc_to_yolo.py# VOC转YOLO工具如需│ └── visualize_labels.py# 标注可视化├── requirements.txt └── README.md 三、环境依赖requirements.txtultralytics8.2.0 opencv-python4.8.0 numpy1.24.3 matplotlib3.6.3 PySide66.6.0 # 如需GUI scikit-image tqdm安装pipinstall-rrequirements.txt 四、数据配置文件dataset.yaml# data/dataset.yamltrain:../data/images/trainval:../data/images/valtest:../data/images/testnc:4names:[landslide,fallen tree,stone,road collapse]✅ 确保路径正确类别顺序与标注.txt中 class_id 一致0~3 五、模型训练train.py# train.pyfromultralyticsimportYOLOdeftrain_road_obstacle_detector():# 使用预训练模型yolov8s 在精度和速度间平衡较好modelYOLO(yolov8s.pt)# 首次运行会自动下载# 开始训练resultsmodel.train(datadata/dataset.yaml,imgsz640,# 输入尺寸原始图 480x640可保持或缩放epochs100,batch32,# 根据 GPU 显存调整如 16/32/64device0,# GPU ID无 GPU 则设为 cpunameroad_obstacle_yolov8s,projectmodels,patience30,# 早停saveTrue,save_period10,augmentTrue,# 启用增强对遮挡/光照鲁棒性关键hsv_h0.015,hsv_s0.7,hsv_v0.4,degrees10.0,translate0.1,scale0.5,fliplr0.5,mosaic1.0,# Mosaic 增强提升小目标检测mixup0.1,)print(f✅ 训练完成最佳模型:{results.save_dir}/weights/best.pt)if__name____main__:train_road_obstacle_detector()训练建议“石头”类目标密集且小 → 启用mosaic和scale增强若 GPU 显存不足降低batch或使用yolov8n使用yolov8m可进一步提升 mAP适合服务器部署 六、推理检测detect.py# detect.pyimportcv2importosfromultralyticsimportYOLOclassRoadObstacleDetector:def__init__(self,model_pathmodels/road_obstacle_yolov8s/weights/best.pt):self.modelYOLO(model_path)self.class_names[Landslide,Fallen Tree,Stone,Road Collapse]defdetect_image(self,image_path,conf0.3,save_diroutputs):resultsself.model(image_path,confconf)annotated_imgresults[0].plot()os.makedirs(save_dir,exist_okTrue)output_pathos.path.join(save_dir,os.path.basename(image_path))cv2.imwrite(output_path,annotated_img)print(f✅ 图像检测完成 →{output_path})returnannotated_imgdefdetect_video(self,video_path,conf0.3,save_diroutputs):capcv2.VideoCapture(video_path)fpsint(cap.get(cv2.CAP_PROP_FPS))wint(cap.get(cv2.CAP_PROP_FRAME_WIDTH))hint(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))os.makedirs(save_dir,exist_okTrue)out_pathos.path.join(save_dir,detected_os.path.basename(video_path))outcv2.VideoWriter(out_path,cv2.VideoWriter_fourcc(*mp4v),fps,(w,h))whileTrue:ret,framecap.read()ifnotret:breakresultsself.model(frame,confconf)annotatedresults[0].plot()out.write(annotated)cap.release()out.release()print(f✅ 视频检测完成 →{out_path})defdetect_camera(self,cam_id0,conf0.3):capcv2.VideoCapture(cam_id)whileTrue:ret,framecap.read()ifnotret:breakresultsself.model(frame,confconf)annotatedresults[0].plot()cv2.imshow(Road Obstacle Detection,annotated)ifcv2.waitKey(1)0xFFord(q):breakcap.release()cv2.destroyAllWindows()️ 七、可视化界面可选GUI.py可复用前文“行人跌倒检测”的 PySide6 界面仅需替换模型路径类别名称默认置信度建议 0.3因“石头”目标小▶️ 八、使用示例1. 训练模型python train.py2. 检测单张图像fromdetectimportRoadObstacleDetector detectorRoadObstacleDetector()detector.detect_image(test_images/road1.jpg)3. 检测视频detector.detect_video(road_disaster.mp4)4. 实时摄像头检测detector.detect_camera()️ 九、工程化部署建议场景方案边缘设备Jetson导出为 TensorRT 引擎yolo export modelbest.pt formatengineWeb API 服务使用 FastAPI 封装推理接口车载/无人机端集成到 ROS 或 DJI SDK实时回传告警批量处理编写脚本遍历test/目录生成检测报告 附评估模型性能可选# eval.pyfromultralyticsimportYOLO modelYOLO(models/road_obstacle_yolov8s/weights/best.pt)metricsmodel.val(datadata/dataset.yaml)print(metrics.box.map)# mAP0.5:0.95智慧交通、应急救灾、自动驾驶感知等关键场景。