2
无人机航拍视角河到钓鱼溺水目标检测数据集
,3293张,yolo,voc,coco标注
图像尺寸:1080*1920
类别数量:4类
训练集:3234; 验证集:47; 测试集:12
类别: 每一类图像数 ,每一类标注数
ShuiBianDiaoYu-水边钓鱼: 1404,2872
YouYongNiShui-游泳溺水: 1508,9347
DiaoYuSan-钓鱼伞: 210,429
boat-船只: 689,1507
image num: 3293
🛰️ 无人机视角河边场景目标检测系统
——含“水边钓鱼”、“游泳/溺水”、“钓鱼伞”、“船只”四类
✅ 数据总量:3293 张高清图像(1080×1920)
✅ 支持 YOLO / VOC / COCO 三种标注格式
✅ 提供 YOLOv11 完整训练 + 推理代码
✅ 适用于智慧河道监控、应急救援、AI巡检等场景
📊 数据集统计表
| 类别名称(Chinese) | 类别英文名 | 图像数量 | 标注框数 |
|---|---|---|---|
| 水边钓鱼 | ShuiBianDiaoYu | 1404 | 2872 |
| 游泳溺水 | YouYongNiShui | 1508 | 9347 |
| 钓鱼伞 | DiaoYuSan | 210 | 429 |
| 船只 | boat | 689 | 1507 |
| 总计 | —— | 3293 | 14,155 |
📁 数据集划分情况
| 集合 | 图像数量 | 占比 |
|---|---|---|
| 训练集(train) | 3234 | ~98.2% |
| 验证集(val) | 47 | ~1.4% |
| 测试集(test) | 12 | ~0.4% |
⚠️ 注意:验证集和测试集样本较少,建议在训练时使用交叉验证或手动增强验证集。
🗂️ 博主建议 :目录结构建议(标准 YOLO 格式)
drone_fishing_dataset/ ├── images/ │ ├── train/# 3234 张 (1080x1920)│ ├── val/# 47 张│ └── test/# 12 张├── labels/ │ ├── train/# .txt 文件 (YOLO 格式)│ ├── val/ │ └── test/ ├── annotations/ │ ├── voc/# .xml 文件 (Pascal VOC)│ └── coco/# instances_drone.json (COCO 格式)├── drone.yaml# YOLO 配置文件└── README.md🛠️ YOLO 配置文件:drone.yaml
# drone.yamltrain:./drone_fishing_dataset/images/trainval:./drone_fishing_dataset/images/valtest:./drone_fishing_dataset/images/testnc:4names:['ShuiBianDiaoYu','YouYongNiShui','DiaoYuSan','boat']✅ 保存为项目根目录下的
drone.yaml
🚀 YOLOv11 完整训练代码(Python 脚本)
# train_drone.pyfromultralyticsimportYOLOimportosimporttime# ======================= 参数设置 =======================MODEL_NAME="yolov11m.pt"# 推荐:yolov11n/s/m/l/x;小数据可用 yolov11sCONFIG_FILE="drone.yaml"# 数据集配置EPOCHS=120BATCH_SIZE=8# 显存不足可设为 4 或 2IMG_SIZE=(1080,1920)# 原始尺寸输入(保持纵横比)PROJECT_NAME="drone_water_surveillance"EXPERIMENT_NAME="exp_v1"# 设备选择(自动检测 GPU)DEVICE=0ifos.environ.get("CUDA_AVAILABLE")else"cpu"# 检查配置文件是否存在ifnotos.path.exists(CONFIG_FILE):raiseFileNotFoundError(f"[ERROR] 配置文件{CONFIG_FILE}不存在,请检查路径!")# ======================= 加载模型 =======================print("🚀 加载 YOLOv11 模型...")model=YOLO(MODEL_NAME)# 自动下载预训练权重# ======================= 开始训练 =======================print("🔥 开始训练...")start_time=time.time()results=model.train(data=CONFIG_FILE,epochs=EPOCHS,batch=BATCH_SIZE,imgsz=IMG_SIZE,# 支持非正方形输入device=DEVICE,project=PROJECT_NAME,name=EXPERIMENT_NAME,exist_ok=True,patience=40,# 早停轮数save=True,save_period=10,# 每10轮保存一次cache=False,# 若内存充足可设为 True 提升速度workers=4,# 优化器设置optimizer='AdamW',lr0=0.001,# 初始学习率lrf=0.01,# 最终学习率 = lr0 * lrfmomentum=0.937,weight_decay=0.0005,# 数据增强策略(针对航拍特点设计)hsv_h=0.015,# 色调扰动hsv_s=0.7,# 饱和度变化大(适应水面反光)hsv_v=0.4,degrees=15.0,# 允许轻微旋转(无人机晃动)translate=0.2,scale=0.6,# 大尺度缩放,模拟远近目标shear=2.0,flipud=0.0,# 不上下翻转(天空/地面不对称)fliplr=0.5,# 左右翻转增强bgr=0.0,mosaic=1.0,# Mosaic 增强,提升小目标检测能力mixup=0.1,# MixUp 增强copy_paste=0.2,# Copy-Paste 对于稀疏类别有效(如 DiaoYuSan))# ======================= 输出结果 =======================training_time=(time.time()-start_time)/3600print(f"✅ 训练完成!总耗时:{training_time:.2f}小时")print(f"📍 模型保存路径:{results.save_dir}")# ======================= 验证模型性能 =======================print("🔍 开始验证...")metrics=model.val()print(f"mAP@0.5:{metrics.box.map50:.4f}")print(f"mAP@0.5:0.95:{metrics.box.map:.4f}")print(f"Precision:{metrics.box.p:.4f}")print(f"Recall:{metrics.box.r:.4f}")# 分类别的 AP(需查看 tensorboard 或 results.csv)print("\n📊 各类别 mAP@0.5:")fori,cls_nameinenumerate(['ShuiBianDiaoYu','YouYongNiShui','DiaoYuSan','boat']):print(f"{cls_name}:{metrics.box.maps[i]:.4f}")# ======================= 导出 ONNX 模型(用于部署) =======================print("📦 导出 ONNX 模型...")onnx_path=model.export(format="onnx",dynamic=True,simplify=True)print(f"ONNX 模型已保存至:{onnx_path}")🔄 多格式转换工具(可选)
1. COCO → YOLO 转换示例
# coco_to_yolo.pyimportjsonfrompathlibimportPathdefcoco_to_yolo(coco_json,output_dir):withopen(coco_json)asf:data=json.load(f)# 建立 image_id -> file_name 映射id2name={img['id']:img['file_name']forimgindata['images']}h_map={img['id']:img['height']forimgindata['images']}w_map={img['id']:img['width']forimgindata['images']}forannindata['annotations']:image_id=ann['image_id']filename=Path(id2name[image_id]).stem+".txt"filepath=Path(output_dir)/filename x,y,w,h=ann['bbox']cls_id=ann['category_id']-1# COCO 从 1 开始,YOLO 从 0 开始center_x=(x+w/2)/w_map[image_id]center_y=(y+h/2)/h_map[image_id]width=w/w_map[image_id]height=h/h_map[image_id]line=f"{cls_id}{center_x:.6f}{center_y:.6f}{width:.6f}{height:.6f}\n"withopen(filepath,"a")asf:f.write(line)print("✅ COCO to YOLO 转换完成")2. VOC → YOLO 转换(略,类似前文)
🖼️ 推理代码(inference.py)
# inference.pyfromultralyticsimportYOLOimportcv2# 加载模型model=YOLO("drone_water_surveillance/exp_v1/weights/best.pt")# 单图推理results=model("test.jpg",conf=0.4,iou=0.5,imgsz=(1080,1920))# 可视化结果forrinresults:im_array=r.plot()# 绘制边界框和标签im=cv2.cvtColor(im_array,cv2.COLOR_RGB2BGR)cv2.imshow("Drone Detection Result",im)cv2.waitKey(0)cv2.imwrite("result_detected.jpg",im)# 打印检测详情forrinresults:boxes=r.boxesforboxinboxes:cls_id=int(box.cls[0])conf=float(box.conf[0])print(f"检测到:{model.names[cls_id]}({conf:.2f})")📈 训练技巧与优化建议
| 技巧 | 说明 |
|---|---|
| ✅ 使用大 backbone | 如yolov11m或yolov11l,应对高分辨率复杂场景 |
| ✅ 动态 resize | 设置imgsz=(1080,1920)保留原始比例,避免拉伸失真 |
| ✅ Copy-Paste 增强 | 特别对稀有类DiaoYuSan(仅 210 图)进行复制粘贴增强 |
| ✅ Focal Loss 替代 CE | 减轻类别不平衡问题(YouYongNiShui 占比过高) |
| ✅ 多尺度训练 | 可尝试multi_scale=True |
| ✅ 边缘设备部署 | 导出为 ONNX/TensorRT,在 Jetson Orin 等边缘设备运行 |
🎯 应用领域
| 场景 | 描述 |
|---|---|
| 🌊智慧河道监管 | 自动识别禁钓区钓鱼行为、非法船只 |
| 🚑溺水预警系统 | 实时监测游泳者状态,发现静止不动即报警 |
| 🛰️无人机自动巡检 | 结合 GPS 定位,实现 AI 自主导航+异常上报 |
| 🏞️景区安全管理 | 在公园湖泊、水库部署,提升安防效率 |
| 💡城市数字孪生 | 作为智慧城市感知层的一部分,接入统一平台 |
✅ 总结
| 项目 | 内容 |
|---|---|
| 图像总数 | 3293 张(1080×1920 竖屏) |
| 类别数 | 4:ShuiBianDiaoYu,YouYongNiShui,DiaoYuSan,boat |
| 标注总数 | 14,155 个框 |
| 标注格式 | YOLO / VOC / COCO 全支持 |
| 模型 | YOLOv11(最新一代) |
| 适用性 | 高空俯视、小目标密集、长宽比特殊 |