找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

291

积分

0

好友

33

主题
发表于 6 天前 | 查看: 20| 回复: 0

海上船舶检测对于海事安全监管与港口智能管理至关重要。传统视觉方法在复杂海况和小目标检测中常面临挑战。基于深度学习的目标检测技术,特别是YOLO系列模型,以其出色的实时性和准确性,为此类问题提供了高效的解决方案。

本文介绍一个基于YOLO系列模型(包括YOLOv5, v8, v11, v12)构建的船舶检测系统。该系统采用PyQt5框架开发了完整的桌面图形界面,支持多模态输入(图片、视频、摄像头实时流、文件夹批量处理),并集成了用户登录注册与信息管理功能,为算法模型的工程化应用与演示提供了完整范例。

系统功能演示

系统启动后,首先进入用户登录界面。界面设计简洁,左侧突出系统主题,右侧为登录表单,需要验证用户名、密码及验证码。

船舶检测系统登录界面

新用户可以通过注册功能创建账号。注册时支持自定义用户名、密码,并可上传个性化头像。

船舶检测系统注册界面

登录成功后进入主检测界面。界面采用经典的三栏布局:左侧为模型选择与文件操作区,中部是检测结果显示区域,右侧面板用于展示检测目标的详细数据列表和统计信息。

YOLO实时目标检测界面

系统提供了个人信息管理模块,用户可以在此修改登录密码或更换个人头像。

修改用户信息界面

系统核心是目标检测功能。上传图片或视频后,算法会自动识别画面中的船舶,并用边界框和类别标签进行标注。所有检测结果会实时在右侧的表格中列出,包括目标类别、置信度及坐标位置。

YOLO检测船舶结果界面

系统的一大亮点是支持多版本YOLO模型的一键切换。用户可以在界面中方便地选择不同的预训练模型(如YOLOv12n, YOLOv11n等),以适应不同场景下对精度和速度的要求。

YOLO 实时目标检测界面

模型训练与核心代码

系统附带完整的模型训练代码,方便用户使用自定义数据进行模型迭代。以下是一个用于批量训练多个YOLO版本模型的Python脚本核心代码。该脚本自动化了数据集路径配置和模型训练流程。

# -*- coding: utf-8 -*-
"""
YOLO模型批量训练脚本。
功能:
1. 自动修改数据集配置文件(data.yaml)中的路径为绝对路径。
2. 从指定目录加载不同版本的预训练模型。
3. 按统一参数启动训练任务。
"""

import os
import yaml
from pathlib import Path
from ultralytics import YOLO

def main():
    # 1. 配置待训练的模型列表
    models_to_train = [
        {'name': 'yolov5nu.pt', 'train_name': 'train_yolov5nu'},
        {'name': 'yolov8n.pt', 'train_name': 'train_yolov8n'},
        {'name': 'yolo11n.pt', 'train_name': 'train_yolo11n'},
        {'name': 'yolo12n.pt', 'train_name': 'train_yolo12n'}
    ]

    current_dir = os.path.abspath(os.getcwd())

    # 2. 动态更新数据集配置文件中的路径
    data_yaml_path = os.path.join(current_dir, 'train_data', 'data.yaml')
    with open(data_yaml_path, 'r', encoding='utf-8') as f:
        data_config = yaml.safe_load(f)

    data_config['path'] = os.path.join(current_dir, 'train_data')

    with open(data_yaml_path, 'w', encoding='utf-8') as f:
        yaml.dump(data_config, f, default_flow_style=False, allow_unicode=True)

    # 3. 循环训练每个模型
    for model_info in models_to_train:
        model_name = model_info['name']
        train_name = model_info['train_name']

        print(f"\n{'='*60}")
        print(f"开始训练模型: {model_name}")
        print(f"训练名称: {train_name}")
        print(f"{'='*60}")

        pretrained_model_path = os.path.join(current_dir, 'pretrained', model_name)
        if not os.path.exists(pretrained_model_path):
            print(f"警告: 预训练模型文件不存在: {pretrained_model_path}")
            continue

        try:
            model = YOLO(pretrained_model_path)
            print(f"开始训练 {model_name}...")
            # 启动训练,关键参数在此设置
            model.train(
                data=data_yaml_path,
                epochs=100,
                imgsz=640,
                batch=8,
                name=train_name,
            )
            print(f"{model_name} 训练完成!")
        except Exception as e:
            print(f"训练 {model_name} 时出现错误: {str(e)}")
            continue

    print(f"\n{'='*60}")
    print("所有模型训练完成!")
    print(f"{'='*60}")

if __name__ == "__main__":
    main()

技术栈与模型选择

本项目采用的技术栈清晰明确:

  • 编程语言:Python 3.10
  • 图形界面:PyQt5
  • 数据存储:SQLite(用于管理用户信息)
  • 核心模型:YOLOv5, YOLOv8, YOLOv11, YOLOv12
YOLO模型性能对比与选择建议

根据Ultralytics官方在COCO数据集上的基准测试,几个轻量级模型的性能对比如下:

模型 尺寸(像素) mAPval 50-95 速度(CPU ONNX/毫秒) 参数量(M) 计算量(FLOPs/B)
YOLO12n 640 40.6 - 2.6 6.5
YOLO11n 640 39.5 56.1 ± 0.8 2.6 6.5
YOLOv8n 640 37.3 80.4 3.2 8.7
YOLOv5nu 640 34.3 73.6 2.6 7.7

核心结论

  1. 精度最优:YOLO12n的mAP达到40.6%,领先优势明显。
  2. 速度最快:YOLO11n的CPU推理速度最快(56.1ms),相比YOLOv8n提升了约42%,更适合对实时性要求高的轻量化部署。
  3. 效率均衡:YOLO12n和YOLO11n在保持较高精度的同时,参数量和计算量都控制得较好。

选型建议

  • 追求最高检测精度,推荐使用YOLO12n。
  • 需要最优的推理速度以支持实时应用,YOLO11n是最佳选择。
  • 对于模型兼容性或历史项目延续性有要求的场景,可考虑YOLOv5或YOLOv8。

数据集与训练效果分析

本系统使用的船舶检测数据集包含总计超过8000张训练和验证图片,类别为“船舶”。数据配置文件示例如下:

names:
- ship
nc: 1
path: /absolute/path/to/train_data
train: ../train/images
val: ../valid/images
test: ../test/images

下图展示了训练批次中经过数据增强(如缩放、色偏、拼接等)后的部分样本图片,这有助于提升模型的鲁棒性。

多张船舶检测图像

多张船舶检测图像

训练结果可视化评估

训练完成后,系统会生成一系列评估图表,用于分析模型性能。

混淆矩阵(Normalized)展示了模型在验证集上的分类情况。理想状态下,对角线颜色最深,表明模型能准确地将目标识别为“船舶”,误检和漏检率极低。

混淆矩阵图

F1-置信度曲线反映了模型在不同置信度阈值下的综合表现(F1分数是精确率和召回率的调和平均数)。如图所示,当置信度阈值设置为0.387时,模型取得了约0.93的最高F1分数,表明在此阈值下精确率和召回率达到了很好的平衡。

F1-置信度曲线图

精确率-召回率(PR)曲线是目标检测中评价模型性能的关键指标。曲线下的面积即为平均精度(AP)。本模型在IoU阈值为0.5时的平均精度(mAP@0.5)达到了0.965,即96.5%,显示出极高的检测准确性。

精确率-召回率曲线图

获取方式

完整的项目源代码、预训练模型及数据集已公开,可以通过以下链接获取:https://www.bilibili.com/video/BV1GcywBiEJ6。该资源包提供了从环境配置、模型训练到应用部署的全流程材料,适合用于深度学习项目实践、算法研究或工程化参考。




上一篇:Agent前沿论文综述:131篇核心系统形态与技术融合创新解析
下一篇:Spring事务重试机制详解:避免@Retryable导致事务失效的正确配置
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-25 03:06 , Processed in 0.194392 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表