无人机落水钓鱼数据集 README
数据集核心信息表
| 信息类别 | 详细说明 |
|---|---|
| 类别数量及名称 | 4 类,分别为钓鱼伞(DiaoYuSan)、水边钓鱼(ShuiBianDiaoYu)、游泳溺水(YouYongNiShui)、船只(boat) |
| 数据数量 | 1200 张图像 |
| 数据集格式种类 | 计算机视觉领域常用格式(支持目标检测任务) |
| 最重要应用价值 | 可用于开发水边场景安全监测相关的 AI 模型,实现对钓鱼行为、溺水风险及船只目标的自动识别,助力水上安全管理与应急响应系统搭建 |
数据三要素概述
类别说明
该数据集涵盖 4 个与水边场景紧密相关的核心类别,既包含钓鱼相关的钓鱼伞、水边钓鱼目标,也涉及安全监测关键的游泳溺水、船只目标,类别划分贴合实际水边场景的监测需求,能为目标检测模型提供明确的识别方向。
数量说明
数据集包含 1200 张图像,图像数量规模可满足基础目标检测模型的训练需求,为模型学习不同类别目标的特征提供了充足的数据支撑。
应用价值说明
其核心应用价值聚焦于水边安全监测领域,通过该数据集训练的 AI 模型,可自动识别水边区域的钓鱼行为、溺水风险及船只目标,帮助相关管理部门实时掌握水边场景动态,及时发现安全隐患,提升水上安全管理效率与应急响应速度。
关键说明
数据集更新时间为 3 个月前,数据时效性较强,能较好适配当前水边场景监测模型的训练需求。
适用于目标检测类计算机视觉任务,可直接用于模型的训练、验证与测试环节。
数据标注准确,能有效保证模型学习到的目标特征的可靠性,提升模型识别精度。
1
基于你提供的“落水钓鱼”目标检测数据集背景(包含1241张图片,标注类别为ShuiBianDiaoYu(水边钓鱼),数据格式支持YOLO等),以下提供完整的数据集训练代码方案,采用YOLOv8框架(目前主流且易用,支持自动读取标注文件)。
一、环境准备
首先安装训练所需依赖库,推荐使用conda创建独立环境避免冲突:
# 1. 创建并激活环境(Python 3.8-3.11均可)conda create -n yolo_fishingpython=3.10conda activate yolo_fishing# 2. 安装核心依赖pipinstallultralytics# YOLOv8官方库(含模型、数据加载、训练逻辑)pipinstallopencv-python# 图像处理pipinstallpandas numpy# 数据统计pipinstallmatplotlib# 训练可视化pipinstallroboflow# 可选(若需从Roboflow直接下载数据集,跳过手动整理)二、数据集整理(关键!需匹配YOLO格式)
你的数据集来自Roboflow,导出时需选择YOLOv8格式(含train/val/test文件夹+data.yaml配置文件)。若已下载,文件夹结构需如下:
fishing_dataset/ # 数据集根目录 ├─ train/ # 训练集(1221张图,对应网页中Train:1221) │ ├─ images/ # 训练集图片(w1920_h0_i486.jpg等) │ └─ labels/ # 训练集标注文件(与图片同名的.txt文件) ├─ val/ # 验证集(20张图,对应网页中Valid:20) │ ├─ images/ │ └─ labels/ ├─ test/ # 测试集(0张,可暂空或后续补充) │ ├─ images/ │ └─ labels/ └─ data.yaml # 数据集配置文件(记录类别、路径等)若需手动生成data.yaml(Roboflow导出会自动生成):
# data.yaml内容path:./fishing_dataset# 数据集根目录路径(绝对路径或相对路径)train:./train/images# 训练集图片路径val:./val/images# 验证集图片路径test:./test/images# 测试集图片路径nc:1# 类别数量(仅1类:ShuiBianDiaoYu)names:['ShuiBianDiaoYu']# 类别名称(与标注文件中的类别ID对应,0=ShuiBianDiaoYu)三、完整训练代码(YOLOv8_train.py)
代码包含数据加载、模型初始化、训练参数配置、训练过程监控、结果保存全流程,可直接运行:
fromultralyticsimportYOLOimportosimportmatplotlib.pyplotasplt# -------------------------- 1. 基础配置(根据需求修改) --------------------------MODEL_TYPE="yolov8n.pt"# 初始模型(n= nano,s=small,m=medium,l=large;n最快,l精度最高)DATA_YAML="./fishing_dataset/data.yaml"# 数据集配置文件路径EPOCHS=50# 训练轮次(建议30-100,根据数据量调整;1200张图推荐50-80)BATCH_SIZE=8# 批次大小(根据GPU显存调整:12GB显存可设8-16,8GB显存设4-8)IMG_SIZE=640# 输入图片尺寸(YOLO默认640,也可设1280提升精度,但训练变慢)DEVICE="0"# 训练设备(0=第1块GPU,-1=CPU,"0,1"=多GPU;无GPU则用CPU,训练会慢)SAVE_DIR="./fishing_train_results"# 训练结果保存路径(模型、日志、可视化图)# -------------------------- 2. 创建结果保存目录 --------------------------os.makedirs(SAVE_DIR,exist_ok=True)print(f"训练结果将保存至:{SAVE_DIR}")# -------------------------- 3. 加载YOLOv8模型 --------------------------# 加载预训练模型(基于COCO数据集预训练,加速收敛)model=YOLO(MODEL_TYPE)print(f"成功加载初始模型:{MODEL_TYPE}")# -------------------------- 4. 开始训练 --------------------------# 核心训练参数说明:# - data:数据集配置文件# - epochs:训练轮次# - batch:批次大小# - imgsz:输入图片尺寸# - device:训练设备# - project:结果保存根目录# - name:本次训练任务名称(会在project下创建子目录)# - patience:早停机制(若10轮验证集mAP无提升,自动停止训练,避免过拟合)# - save:是否保存训练过程中的最佳模型# - pretrained:是否使用预训练权重(默认True,推荐开启)train_results=model.train(data=DATA_YAML,epochs=EPOCHS,batch=BATCH_SIZE,imgsz=IMG_SIZE,device=DEVICE,project=SAVE_DIR,name="yolov8_fishing_run1",patience=10,save=True,pretrained=True,optimizer="Adam",# 优化器(Adam比SGD收敛更快,适合小数据集)lr0=0.001,# 初始学习率(默认0.01,小数据集可调小至0.001避免过拟合)augment=True,# 开启数据增强(自动随机翻转、缩放、亮度调整等,提升泛化能力)val=True# 训练中自动验证(每轮结束后计算验证集mAP))# -------------------------- 5. 训练结果可视化(可选) --------------------------# 提取训练过程中的关键指标(损失、mAP等)train_loss=train_results.history["train/box_loss"]# 训练集边界框损失val_loss=train_results.history["val/box_loss"]# 验证集边界框损失val_map50=train_results.history["val/mAP50"]# 验证集mAP50(目标检测核心指标,越高越好)# 绘制损失曲线和mAP曲线plt.figure(figsize=(12,4))# 子图1:损失曲线plt.subplot(1,2,1)plt.plot(range(1,EPOCHS+1),train_loss,label="Train Loss",color="blue")plt.plot(range(1,EPOCHS+1),val_loss,label="Val Loss",color="red")plt.xlabel("Epochs")plt.ylabel("Box Loss")plt.title("Training & Validation Loss")plt.legend()plt.grid(alpha=0.3)# 子图2:mAP50曲线plt.subplot(1,2,2)plt.plot(range(1,EPOCHS+1),val_map50,label="Val mAP50",color="green")plt.xlabel("Epochs")plt.ylabel("mAP50")plt.title("Validation mAP50")plt.legend()plt.grid(alpha=0.3)# 保存可视化图plt.tight_layout()plt.savefig(os.path.join(SAVE_DIR,"yolov8_fishing_run1","train_metrics.png"),dpi=300)plt.close()# -------------------------- 6. 模型评估(测试集,可选) --------------------------# 若后续补充测试集,可运行以下代码评估模型在测试集上的性能# results = model.val(# data=DATA_YAML,# split="test", # 评估测试集# imgsz=IMG_SIZE,# device=DEVICE# )# print(f"测试集mAP50:{results.box.map50:.2f}") # 输出测试集核心指标# -------------------------- 7. 模型推理(用训练好的模型预测新图片) --------------------------# 加载训练好的最佳模型(保存在 SAVE_DIR/yolov8_fishing_run1/weights/best.pt)best_model=YOLO(os.path.join(SAVE_DIR,"yolov8_fishing_run1","weights","best.pt"))# 预测一张示例图片(替换为你的测试图片路径)test_img_path="./test_fishing.jpg"# 新的钓鱼场景图片predict_results=best_model.predict(source=test_img_path,imgsz=IMG_SIZE,conf=0.3,# 置信度阈值(高于0.3才认为是目标)iou=0.5,# IOU阈值(用于非极大值抑制,避免重复框)save=True# 保存预测结果图片(保存在 runs/detect/predict 目录))# 打印预测结果(目标类别、坐标、置信度)forresultinpredict_results:boxes=result.boxesforboxinboxes:cls_id=int(box.cls[0])cls_name=best_model.names[cls_id]conf=float(box.conf[0])x1,y1,x2,y2=box.xyxy[0]# 目标框坐标(左上角x1,y1,右下角x2,y2)print(f"预测结果:类别={cls_name},置信度={conf:.2f},坐标=({x1:.0f},{y1:.0f})-({x2:.0f},{y2:.0f})")四、关键参数调整建议(根据训练效果优化)
模型选择:
- 若追求速度(如实时检测):用
yolov8n.pt(最快,精度稍低); - 若追求精度(如静态图片检测):用
yolov8m.pt或yolov8l.pt(精度高,训练时间长)。
- 若追求速度(如实时检测):用
批次大小(batch):
- GPU显存≥12GB:设
16;显存8GB:设8;显存4GB:设4;无GPU(CPU):设2。
- GPU显存≥12GB:设
训练轮次(epochs):
- 若训练中验证集mAP50不再提升(早停机制触发),说明已收敛,无需增加epochs;
- 若训练集损失仍在下降但验证集损失上升,说明过拟合,可减小epochs或增加数据增强(如
augment=True改为augment=True, mixup=0.1)。
学习率(lr0):
- 小数据集(<2000张):推荐
0.001(默认0.01可能导致过拟合); - 大数据集(>5000张):用默认
0.01。
- 小数据集(<2000张):推荐
五、训练结果解读
训练完成后,SAVE_DIR/yolov8_fishing_run1目录下会生成以下关键文件:
weights/best.pt:最佳模型(基于验证集mAP50选择,推荐用于后续推理);weights/last.pt:最后一轮训练的模型(不推荐直接使用,可能未收敛);train_metrics.png:训练损失和mAP曲线(判断是否收敛、过拟合);results.csv:详细训练日志(每轮的损失、mAP、FPS等指标)。
六、常见问题解决
标注文件读取错误:
- 检查标注文件
.txt格式是否正确(YOLO格式:class_id x_center y_center width height,坐标需归一化到0-1); - 确保标注文件与图片同名,且放在对应
labels文件夹下。
- 检查标注文件
GPU内存不足:
- 减小
batch_size(如从8改为4); - 减小
img_size(如从640改为480); - 用更小的模型(如
yolov8n.pt替代yolov8m.pt)。
- 减小
过拟合(训练集精度高,验证集精度低):
- 增加数据增强:在
model.train()中添加mixup=0.2, mosaic=1.0(混合图片、马赛克增强); - 减少模型复杂度(如从
yolov8l.pt改为yolov8s.pt); - 增加数据集(如用Roboflow的“Data Augmentation”功能生成更多增强数据)。
- 增加数据增强:在
运行代码前,需确保数据集路径、图片路径正确,若从Roboflow下载数据集,可直接用roboflow库自动下载(需在Roboflow项目中获取API密钥),具体代码可参考Roboflow YOLOv8导出文档。