救生衣检测模型YOLO8-300n
提供训练好的模型文件(pt格式)、过程文件和验证图片,带对应的训练数据集10000张
1
·
1
1
1
一、救生衣检测模型(YOLOv8-300n)完整方案
1. 模型与数据集信息
| 项目 | 详情 |
|---|---|
| 模型版本 | YOLOv8n(300轮训练) |
| 任务类型 | 救生衣目标检测(穿戴/未穿戴二分类) |
| 数据集规模 | 10000张图片(含正例/负例、多场景、多角度) |
| 训练轮次 | 300 epochs |
| 核心指标 | 从训练曲线看: - 训练/验证loss持续下降并收敛 - Precision/Recall/mAP50均稳定在95%以上 - mAP50-95稳定在80%以上 |
| 输出文件 | best.pt(最优权重)、last.pt(最后一轮权重)、训练日志、验证图片、loss曲线 |
2. 数据集配置文件lifejacket.yaml
# 救生衣检测数据集配置path:./lifejacket_dataset# 数据集根目录train:images/trainval:images/valtest:images/testnc:2# 类别数:穿戴/未穿戴救生衣names:0:lifejacket_worn# 穿戴救生衣1:lifejacket_not_worn# 未穿戴救生衣3. 完整训练代码train_lifejacket.py
fromultralyticsimportYOLOdeftrain_lifejacket():# 加载YOLOv8n基础模型model=YOLO("yolov8n.pt")# 300轮训练(参数适配救生衣检测场景)results=model.train(data="lifejacket.yaml",epochs=300,# 训练轮次(和你图中一致)imgsz=640,# 输入图像尺寸batch=16,# 批次大小(可根据显卡调整)device=0,# 使用GPU训练(无GPU则改为device='cpu')lr0=0.01,# 初始学习率lrf=0.01,# 最终学习率warmup_epochs=3,# 热身轮数cos_lr=True,# 余弦退火学习率patience=20,# 早停(20轮无提升则停止)save=True,# 保存模型save_period=10,# 每10轮保存一次cache=True,# 缓存数据加速训练amp=True,# 混合精度训练augment=True,# 数据增强(适配户外/水域场景)hsv_h=0.015,# 色调增强hsv_s=0.7,# 饱和度增强hsv_v=0.4,# 亮度增强degrees=15,# 随机旋转(适配多角度拍摄)perspective=0.001,# 透视变换flipud=0.2,# 上下翻转fliplr=0.5,# 左右翻转mosaic=1.0,# Mosaic增强mixup=0.1,# Mixup增强name="lifejacket_yolov8n_300e"# 训练项目名称)# 训练完成后验证模型model.val()if__name__=="__main__":train_lifejacket()4. 推理/验证代码predict_lifejacket.py
fromultralyticsimportYOLOimportcv2# 加载训练好的最优模型model=YOLO("runs/detect/lifejacket_yolov8n_300e/weights/best.pt")defdetect_image(image_path,save_path="result.jpg"):# 单张图片检测results=model(image_path,conf=0.25)annotated_img=results[0].plot()cv2.imwrite(save_path,annotated_img)cv2.imshow("Lifejacket Detection",annotated_img)cv2.waitKey(0)defdetect_video(video_path,save_path="result.mp4"):# 视频检测cap=cv2.VideoCapture(video_path)fps=cap.get(cv2.CAP_PROP_FPS)width=int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))height=int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))out=cv2.VideoWriter(save_path,cv2.VideoWriter_fourcc(*'mp4v'),fps,(width,height))whilecap.isOpened():ret,frame=cap.read()ifnotret:breakresults=model(frame,conf=0.25)annotated_frame=results[0].plot()out.write(annotated_frame)cv2.imshow("Lifejacket Detection",annotated_frame)ifcv2.waitKey(1)&0xFF==ord('q'):breakcap.release()out.release()cv2.destroyAllWindows()if__name__=="__main__":# 示例:检测单张图片detect_image("test_lifejacket.jpg")5. 项目文件结构(完整可交付)
lifejacket_yolov8_project/ ├── lifejacket.yaml # 数据集配置文件 ├── train_lifejacket.py # 训练代码 ├── predict_lifejacket.py # 推理代码 ├── yolov8n.pt # 基础预训练权重 ├── lifejacket_dataset/ # 10000张数据集(YOLO格式) │ ├── images/ │ │ ├── train/ │ │ ├── val/ │ │ └── test/ │ └── labels/ │ ├── train/ │ ├── val/ │ └── test/ └── runs/ └── detect/ └── lifejacket_yolov8n_300e/ ├── weights/ │ ├── best.pt # 最优模型权重 │ └── last.pt # 最后一轮模型权重 ├── results.png # 训练loss/指标曲线(和你提供的图一致) ├── confusion_matrix.png # 混淆矩阵 ├── PR_curve.png # PR曲线 └── val_batch*.jpg # 验证集检测结果图片6. 运行说明
- 安装依赖
pipinstallultralytics opencv-python - 数据集准备
- 将10000张图片和标注文件按
images/+labels/结构放入lifejacket_dataset - 确保
lifejacket.yaml中的路径与实际一致
- 将10000张图片和标注文件按
- 开始训练
python train_lifejacket.py - 使用训练好的模型
python predict_lifejacket.py