深度学习目标检测算法YOLOV8模型训练 无人机钓鱼检测数据集 识别检测钓鱼者的检测识别 无人机河道河边垂钓检测数据集的训练及应用
深度学习目标检测算法YOLOV8模型训练 钓鱼检测数据集 识别检测钓鱼者的检测识别 河道河边垂钓检测数据集的训练及应用
文章目录
-
-
- **河道垂钓检测数据集信息表**
- **数据集特点**
- ✅ 一、环境搭建(CUDA + Anaconda + Python + 依赖)
-
- 1. 检查 CUDA 驱动
- 2. 安装 Anaconda
- 3. 创建 Python 虚拟环境
- 4. 安装依赖项
- 📂 二、数据集结构(你已划分好)
- 📄 三、创建 `data.yaml` 文件
- 🚀 四、训练代码(`train.py`)—— 使用 YOLOv8 官方预训练模型
- 🔍 五、推理代码(`infer.py`)—— 检测钓鱼行为
- 📊 六、评估代码(`evaluate.py`)—— 获取 mAP 等指标
-
河道河边垂钓钓鱼数据集,训练集941张,测试集验证集235张。
无人机采集数据,一类
垂钓场景数据集。YOLO目标检测
YOLO11 map50-95=0.57
河道垂钓检测数据集信息表
fishing
(垂钓者/垂钓行为).txt
文件(每图一标,与图片一一对应)数据集特点
你提供的 河道垂钓检测数据集 是合使用 YOLOv8 进行目标检测的场景:
- 数据清晰(无人机采集)
- 标注完整(单类别“fishing”)
- 已划分训练集(941张)和验证/测试集(235张)
- 适合部署在 河道监控、禁钓区域智能识别、城市管理 等场景
下面我将为你提供从 环境搭建 → 数据准备 → YOLOv8 训练 → 推理 → 评估 → 模型导出 的完整流程。
✅ 一、环境搭建(CUDA + Anaconda + Python + 依赖)
1. 检查 CUDA 驱动
nvidia-smi
- 确保 GPU 正常工作
- 推荐 CUDA 11.8 或 12.1
2. 安装 Anaconda
下载地址:https://www.anaconda.com/products/distribution
3. 创建 Python 虚拟环境
# 创建环境conda create -n fishing_detection python=3.9# 激活环境conda activate fishing_detection
4. 安装依赖项
# 安装 PyTorch(以 CUDA 11.8 为例)pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118# 安装 Ultralytics YOLOv8pip install ultralytics# 安装其他工具pip install opencv-python numpy matplotlib tqdm pillow seaborn pandas
✅ 验证安装:
import torchprint(torch.__version__)print(torch.cuda.is_available()) # 应输出 True
📂 二、数据集结构(你已划分好)
建议组织如下:
fishing_dataset/├── images/│ ├── train/ # 941 张│ └── val/ # 235 张├── labels/│ ├── train/ # 对应 .txt 标注文件│ └── val/├── data.yaml # 需创建
⚠️ 确保
.txt
文件格式为 YOLO 格式:class_id x_center y_center width height
(归一化坐标)
📄 三、创建 data.yaml
文件
# data.yamltrain: fishing_dataset/images/trainval: fishing_dataset/images/valnc: 1names: [\'fishing\']
✅
nc: 1
表示只有一个类别
✅ 路径根据你的实际路径调整(可使用绝对路径或相对路径)
🚀 四、训练代码(train.py
)—— 使用 YOLOv8 官方预训练模型
# train.pyfrom ultralytics import YOLOdef train_fishing_model(): # 加载官方预训练模型(推荐使用 yolov8s 或 yolov8m) model = YOLO(\'yolov8s.pt\') # 可换为 \'yolov8m.pt\' 获取更高精度 # 开始训练 results = model.train( data=\'data.yaml\', # 指向 data.yaml epochs=300, # 小数据集建议 200~300 轮 imgsz=640, # 可尝试 1280 提升小目标识别能力 batch=16,# 根据显存调整(24G 显存可用 32) name=\'fishing_yolov8s_640\', project=\'runs/fishing\', device=0,# 使用 GPU workers=4, optimizer=\'AdamW\', lr0=0.001, patience=50, # 早停:50 轮无提升则停止 augment=True, # 启用数据增强 mosaic=1.0, # Mosaic 增强 mixup=0.2, # MixUp 增强 copy_paste=0.3, # Copy-Paste 增强(对小样本非常有效) close_mosaic=25, # 最后几轮关闭 Mosaic cache=\'disk\', # 缓存图像到磁盘加速训练 fraction=1.0, # 使用全部数据 val=True # 每轮都验证 ) print(\"✅ 训练完成!\") return resultsif __name__ == \"__main__\": train_fishing_model()
📌 模型保存路径:
runs/fishing/fishing_yolov8s_640/weights/best.pt
🔍 五、推理代码(infer.py
)—— 检测钓鱼行为
# infer.pyfrom ultralytics import YOLOimport cv2def predict_image(model_path, image_path, conf=0.4, imgsz=640): \"\"\" 单张图像预测 \"\"\" model = YOLO(model_path) results = model(image_path, conf=conf, imgsz=imgsz) for r in results: im_array = r.plot() # 绘制边界框和标签 im = cv2.cvtColor(im_array, cv2.COLOR_RGB2BGR) cv2.imshow(\'Fishing Detection\', im) cv2.waitKey(0) cv2.imwrite(\'result_fishing.jpg\', im) return resultsdef predict_video(model_path, video_path=0, conf=0.4, imgsz=640): \"\"\" 视频流检测(可用于河道监控) \"\"\" model = YOLO(model_path) cap = cv2.VideoCapture(video_path) # 0 表示本地摄像头 while cap.isOpened(): ret, frame = cap.read() if not ret: break results = model(frame, conf=conf, imgsz=imgsz) annotated_frame = results[0].plot() cv2.imshow(\'Fishing Detection - Live\', annotated_frame) if cv2.waitKey(1) & 0xFF == ord(\'q\'): break cap.release() cv2.destroyAllWindows()if __name__ == \"__main__\": model_path = \'runs/fishing/fishing_yolov8s_640/weights/best.pt\' # 图像预测 predict_image(model_path, \'test.jpg\') # 视频预测(如无人机视频流) # predict_video(model_path, \'drone_video.mp4\') # 或 0 调用摄像头
📊 六、评估代码(evaluate.py
)—— 获取 mAP 等指标
# evaluate.pyfrom ultralytics import YOLOdef evaluate_model(): model = YOLO(\'runs/fishing/fishing_yolov8s_640/weights/best.pt\') metrics = model.val( data=\'data.yaml\', split=\'val\', batch=16, imgsz=640, device=0, save_json=True, conf=0.001 ) print(f\"mAP@50: {metrics.box.map50:.4f}\") print(f\"mAP@50-95: {metrics.box.map:.4f}\") # 你提到 YOLOv8s 达到 0.57,说明效果不错! print(f\"Precision: {metrics.box.p:.4f}\") print(f\"Recall: {metrics.box.r:.4f}\") print(f\"F1-score: {metrics.box.f1.mean():.4f}\") return metricsif __name__ == \"__main__\": evaluate_model()
以上文字及代码仅供参考学习使用。