无人机航拍铁轨铁铁路道异物检测数据集,
1285张,yolo和voc标注
图像尺寸:1080*1920
4类,训练集图像数量:901; 验证集图像数量:256; 测试集图像数量:128
类别名称: 每一类图像数 ,每一类标注数
poset 塑料袋: 282,341
bitki 植物: 375,1039
cubuk 长棍: 28,31
insan 人: 682,843
image num: 1285
1
1
1
1
无人机航拍图像铁道异物检测数据集
📊 一、数据集详细表格描述
✅ 总体信息
| 项目 | 内容 |
|---|---|
| 总图像数量 | 1,285 张 |
| 图像分辨率 | 1080 × 1920(高 × 宽,竖屏航拍) |
| 类别数量 | 4 类 |
| 标注格式 | 同时提供YOLO 格式(.txt)和PASCAL VOC 格式(.xml) |
| 数据划分 | - 训练集:901 张 - 验证集:256 张 - 测试集:128 张 |
🗂️ 类别分布统计表
| 类别 ID | 类别名称(土耳其语) | 类别名称(中文) | 包含该类的图像数 | 标注框总数(instances) | 平均每图目标数 |
|---|---|---|---|---|---|
| 0 | poset | 塑料袋 | 282 | 341 | ≈1.21 |
| 1 | bitki | 植物 | 375 | 1,039 | ≈2.77 |
| 2 | cubuk | 长棍 | 28 | 31 | ≈1.11 |
| 3 | insan | 人 | 682 | 843 | ≈1.24 |
| — | 总计(去重图像) | — | 1,285 | 2,254 | — |
🔍 注:
- 单张图像可包含多个类别(如“人+植物”),因此各类图像数之和 > 1,285。
- “植物”类标注密集(常为灌木、杂草覆盖轨道),“长棍”样本极少(需重点处理类别不平衡)。
- 图像为竖屏 1080×1920,适合铁路沿线纵向巡检场景。
🛠️ 二、构建基于 YOLOv8 的铁道异物检测系统(完整流程)
📁 1. 推荐项目结构
railway_obstacle_detection/ ├── data/ │ ├── images/ │ │ ├── train/# 901│ │ ├── val/# 256│ │ └── test/# 128│ ├── labels/# YOLO格式 .txt│ │ ├── train/ │ │ ├── val/ │ │ └── test/ │ └── dataset.yaml# YOLOv8 数据配置├── weights/ │ └── yolov8s.pt# 官方预训练模型(自动下载)├── models/# 训练输出├── outputs/# 推理结果├── train.py# 训练脚本├── detect.py# 推理模块├── utils/ │ ├── balance_analysis.py# 分析类别不平衡│ └── visualize_labels.py# 可视化标注└── requirements.txt📦 2. 环境依赖(requirements.txt)
ultralytics==8.2.0 opencv-python==4.8.0 numpy==1.24.3 matplotlib tqdm scikit-learn # 如需分析安装:
pipinstall-r requirements.txt📄 3. 数据配置文件dataset.yaml
# data/dataset.yamltrain:../data/images/trainval:../data/images/valtest:../data/images/testnc:4names:['poset','bitki','cubuk','insan']⚠️ 注意:类别顺序必须与标注
.txt中 class_id 严格对应(0~3)
🚀 4. 模型训练(train.py)
# train.pyfromultralyticsimportYOLOdeftrain_railway_detector():# 使用 yolov8s(兼顾精度与速度,适合小目标)model=YOLO("yolov8s.pt")results=model.train(data="data/dataset.yaml",imgsz=640,# 自动缩放 1080x1920 → 640(保持比例)epochs=150,# 增加 epoch 应对小样本batch=16,# 根据 GPU 调整device=0,name="railway_yolov8s",project="models",patience=50,save=True,augment=True,# 针对小目标 & 稀有类增强hsv_h=0.015,hsv_s=0.7,hsv_v=0.4,degrees=15.0,# 更大旋转(航拍角度多变)translate=0.2,scale=0.5,fliplr=0.5,mosaic=1.0,# Mosaic 增强提升“cubuk”检测mixup=0.2,copy_paste=0.3,# Copy-Paste 增强稀有类(如 cubuk))print(f"✅ 训练完成!最佳模型:{results.save_dir}/weights/best.pt")if__name__=="__main__":train_railway_detector()💡关键优化点:
- 启用
copy_paste增强:解决“长棍”(cubuk)样本极少问题- 使用
mosaic+mixup:提升小目标(塑料袋、长棍)召回率imgsz=640:YOLOv8 自动保持宽高比,避免形变
🔍 5. 推理检测(detect.py)
# detect.pyimportcv2importosfromultralyticsimportYOLOclassRailwayObstacleDetector:def__init__(self,model_path="models/railway_yolov8s/weights/best.pt"):self.model=YOLO(model_path)self.class_names=["Plastic Bag","Vegetation","Long Rod","Person"]defdetect_image(self,image_path,conf=0.25,save_dir="outputs"):results=self.model(image_path,conf=conf)annotated=results[0].plot()os.makedirs(save_dir,exist_ok=True)out_path=os.path.join(save_dir,os.path.basename(image_path))cv2.imwrite(out_path,annotated)print(f"✅ 检测完成 →{out_path}")returnannotateddefdetect_video(self,video_path,conf=0.25):cap=cv2.VideoCapture(video_path)fps=int(cap.get(cv2.CAP_PROP_FPS))w,h=int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)),int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))out_path="outputs/detected_"+os.path.basename(video_path)out=cv2.VideoWriter(out_path,cv2.VideoWriter_fourcc(*'mp4v'),fps,(w,h))whilecap.isOpened():ret,frame=cap.read()ifnotret:breakresult=self.model(frame,conf=conf)[0]out.write(result.plot())cap.release()out.release()print(f"✅ 视频检测完成 →{out_path}")defdetect_drone_stream(self,rtsp_url):"""支持 RTSP 流(如大疆无人机直播流)"""cap=cv2.VideoCapture(rtsp_url)whileTrue:ret,frame=cap.read()ifnotret:breakannotated=self.model(frame,conf=0.25)[0].plot()cv2.imshow("Railway Inspection",annotated)ifcv2.waitKey(1)==ord('q'):breakcap.release()cv2.destroyAllWindows()▶️ 6. 使用示例
# 快速测试fromdetectimportRailwayObstacleDetector detector=RailwayObstacleDetector()# 检测单图detector.detect_image("test_images/rail1.jpg")# 检测视频detector.detect_video("railway_drone.mp4")# 实时 RTSP 流(需替换 URL)# detector.detect_drone_stream("rtsp://192.168.1.10:8554/main")🛠️ 7. 部署与工程建议
| 场景 | 建议 |
|---|---|
| 无人机端侧部署 | 导出为 TensorRT:yolo export model=best.pt format=engine imgsz=640 |
| 铁路巡检车 | 集成到车载工控机,定时抓拍+告警 |
| Web 监控平台 | 用 Flask/FastAPI 提供 REST API,前端展示告警 |
| 处理类别不平衡 | 对cubuk使用Focal Loss(可通过 Ultralytics 自定义 loss)或过采样 |
铁路智能巡检、异物入侵告警、无人机自动巡线等关键任务。