文章目录
- 一.前言
- 二.核心技术&知识
-
- 1.PyQt5
- 2.YOLOv8
- 3.DeepSeek
- 4.Sqlite3
- 5.多线程
- 6.海上船只
- 7.海上船只检测的意义和应用场景
-
- [1. 智慧河流与城市水环境监管场景](#1. 智慧河流与城市水环境监管场景)
- 2.河流湖泊生态保护与环保巡检场景
- [3. 港口、码头及水上交通区域管理场景](#3. 港口、码头及水上交通区域管理场景)
- 4.无人机水面巡检与大范围环境监测场景
- [5. 水面清洁机器人与智能环保设备应用场景](#5. 水面清洁机器人与智能环保设备应用场景)
- 三.核心功能
- 四.数据集
- 五.问题统一回答
-
- 1.数据库
-
- 1.users用户信息表
- [2.detect_history 检测历史表](#2.detect_history 检测历史表)
- 2.如何修改文案
- 3.如何修改图片资源
- [4.如何更换API Key](#4.如何更换API Key)
- 5.运行最佳分辨率
- 6.如何隐藏部分功能
- 7.软件系统架构图
- 六.关于项目
- 七.总结
本系统功能强大!支持对输入数据源的海上船只情况进行检测,支持多种数据数据源输入并且接入了AI实现了对当前分析结果的评估,欢迎了解!
@项目名称:基于PyQt+YOLO+DeepSeek船只检测系统
@仓库名称:yolov8-floating-garbage-detect
@作者:懷淰メ
@主页地址:https://blog.csdn.net/a1397852386
@定制:A1397852386
@开发日期:2026年8月
关键字:
#PyQt5 #YOLOv8 #DeepSeek #水上漂浮物检测 #漂浮物检测 #多目标跟踪 #AI分析 #深度学习 #目标检测 #实时视频流 #图像识别 #低光环境检测 #可视化界面 #多线程 #QThread #SQLite3 #数据存储 #用户管理 #检测历史 #训练集 #验证集 #数据标注 #VOC转YOLO #模型训练 #Precision #Recall #mAP #学习率策略 #软件架构 #主界面 #登录注册 #图像检测界面 #视频检测界面 #AI智能分析 #可视化展示 #数据集管理 #系统设置 #项目部署 #Python3.8 #Windows11 #PyCharm #项目依赖 #超参数 #批量处理 #文件结构 #用户体验 #海上安全 #应急救援 #智慧航运 #非法入侵预警 #海洋渔业监管 #海上军事侦察 #模型评估 #训练损失 #混淆矩阵 #PR曲线 #F1曲线 #历史数据查看 #功能模块 #操作流程 #APIKey #背景图替换 #界面定制

一.前言
随着城市化进程加快以及水域周边人类活动日益频繁,河流、湖泊、港口等水体中的塑料垃圾、生活漂浮物、废弃物等污染问题日益突出。水面垃圾不仅影响水域景观,还会破坏水生态环境,威胁水生生物生存,并增加人工巡检和清理工作的难度。传统水面垃圾检测方式主要依赖人工观察,存在效率低、实时性差、受环境因素影响大等不足,难以满足现代智慧环保管理的需求。因此,利用人工智能技术实现水面垃圾自动检测具有重要的应用价值。本项目设计并实现了一套基于PyQt+YOLO+DeepSeek的水面垃圾检测系统,通过深度学习目标检测算法YOLO对图像、视频以及实时视频流中的漂浮垃圾进行快速识别与定位,并结合PyQt构建可视化交互界面,实现检测结果展示、目标框标注、类别识别以及实时监控等功能。同时,引入DeepSeek智能模型增强系统的数据分析与交互能力,为用户提供更加智能化的辅助决策支持。该系统能够有效提升水面垃圾巡检的自动化水平,降低人工成本,提高垃圾发现效率和环境治理响应速度。在智慧城市建设、河湖生态保护、无人巡检设备以及环保监管平台等领域具有较高的应用前景。通过人工智能与环境保护技术的结合,本项目为水域污染智能监测提供了一种高效、可靠、智能化的解决方案,对推动生态环境数字化管理和绿色可持续发展具有积极意义。
二.核心技术&知识
在这章我将要介绍本系统的核心技术。
1.PyQt5
PyQt5 是一套功能强大的 Python GUI 工具包,它将流行的 Qt 应用框架完整绑定到 Python 中,使开发者能够使用 Python 语言快速构建跨平台的桌面应用程序。通过 PyQt5,程序员可以方便地创建拥有现代化图形界面的软件,支持丰富的界面控件,包括按钮、文本框、列表、表格、树形视图等,以及高度可定制的窗口和布局管理。借助 PyQt5 的信号与槽机制,开发者能够实现灵活的事件响应与组件间通信,从而简化用户交互逻辑的实现,提高程序的可维护性和稳定性。
PyQt5 的跨平台特性十分显著,能够在 Windows、macOS 和 Linux 等主流操作系统上无缝运行,使得同一套代码即可部署在不同平台,降低了软件开发和维护的成本。同时,PyQt5 与 Qt Designer 的配合使用进一步提升了开发效率。Qt Designer 提供可视化界面设计工具,开发者可以通过拖拽控件快速生成界面布局,并通过 PyQt5 的 Python 代码实现逻辑绑定,从而大幅减少重复编码工作。
此外,PyQt5 在事件处理、绘图、多线程支持、国际化以及动画效果实现等方面也表现出色,能够满足从小型工具软件到大型复杂应用的多样化需求。它不仅适合快速原型开发,还能支撑企业级桌面应用程序的长期维护和升级。凭借 Python 的易用性和 Qt 框架的强大功能,PyQt5 已成为开发跨平台桌面软件的首选方案之一,广泛应用于数据可视化、管理系统、设计工具以及科研计算等多个领域,为开发者提供高效、灵活且可扩展的解决方案。
2.YOLOv8
YOLOv8(You Only Look Once version 8)是由 Ultralytics 推出的最新一代实时目标检测模型,属于 YOLO 系列的改进版本。相比前代模型,YOLOv8 在精度、速度和灵活性上都有显著提升,支持目标检测、图像分割、姿态估计等多任务处理。它采用了更加高效的网络结构和训练策略,并提供开箱即用的 Python 接口和命令行工具,适用于边缘设备和云端部署,广泛应用于安防监控、自动驾驶、工业检测等场景。
3.DeepSeek
DeepSeek 是由 DeepSeek 开发的大语言模型智能助手,具备自然语言处理、文本理解、知识问答以及文档分析等能力。当其与目标检测算法 YOLO(You Only Look Once)结合使用时,可构建高效的多模态智能分析系统。其中,YOLO 负责对图像或视频流进行实时目标检测与识别,快速获取场景中的目标信息;而 DeepSeek 则基于检测结果开展语义理解与智能分析,对目标属性、场景内容及行为特征进行进一步解读,并生成相应的分析结论和决策建议。
通过将计算机视觉技术与大语言模型能力相结合,系统不仅能够完成目标的精准识别,还能够实现对检测结果的深层次理解与推理,从而构建"视觉感知---语义分析---智能决策"的完整处理流程。该架构能够有效提升系统的信息理解能力和决策支持能力,在智能安防、自动驾驶、工业检测、智慧交通等领域具有广阔的应用前景,为复杂场景下的智能化应用提供有力支撑。
4.Sqlite3
本系统使用Sqlite3进行数据的存储与管理。
SQLite3 是一种轻量级嵌入式关系型数据库管理系统,被广泛应用于桌面应用、移动终端以及各种嵌入式设备开发中。与传统客户端---服务器架构数据库(如 MySQL、PostgreSQL)相比,SQLite3 不需要额外部署数据库服务器,其所有数据均保存在单个本地文件中,应用程序能够通过数据库库文件直接完成数据访问与管理。这种设计使其具备部署便捷、资源消耗低以及良好跨平台兼容性等优点。
SQLite3 遵循 ACID 事务规范,能够有效保障数据的一致性、完整性和可靠性。同时,它支持标准 SQL 语法,提供数据表创建、数据查询、索引建立、触发器定义等常用功能,能够满足中小型应用场景下的数据存储与管理需求。在性能方面,SQLite3 具有较高的读取效率,并通过锁机制实现多线程环境中的基础并发访问控制,从而保证数据操作的安全性。
凭借零配置、易集成和运行稳定等特点,SQLite3 已被广泛嵌入 Android、iOS 等主流操作系统,同时也常用于本地缓存管理、日志记录以及离线数据处理等实际场景。总体来看,SQLite3 以其简洁高效的架构设计和良好的实用性,在轻量级数据库领域占据着重要地位。
5.多线程
QThread 是 PyQt5 提供的线程类,专门用于在图形界面程序中高效、安全地执行耗时操作,从而避免主线程阻塞导致界面卡顿或无响应。在常见的GUI应用中,界面绘制与用户交互通常运行在主线程,如果在该线程直接执行数据处理、深度学习推理、视频流分析或文件读写等耗时任务,就容易引起界面冻结,严重影响用户体验。QThread 的设计正是为了解决这一问题。
利用 QThread,开发者可以将这些计算密集型或IO密集型操作放入子线程独立执行,使主线程专注于界面渲染和交互响应。同时,QThread 提供了基于信号与槽的线程间通信机制,能够在不同线程间安全传递数据和状态。例如,子线程完成检测或处理任务后,可以通过发送信号将结果传递给主线程,由主线程更新界面控件,从而避免直接跨线程操作UI的风险。
另外,QThread 还支持线程的生命周期管理,包括启动、暂停、退出和资源回收,使多线程程序结构更清晰可控。合理使用 QThread 不仅能显著提升应用响应速度和运行效率,还能增强系统稳定性与扩展性。在实时数据处理、视频监控或智能分析等复杂桌面应用开发场景中,QThread 已成为不可或缺的重要工具。
6.海上船只
水上漂浮物,是指因自然或人为因素,悬浮、漂泊于水面的一切物体。它的来源极其广泛:既有来自大自然的枯枝落叶、水生植物残体,也有来自人类活动的塑料瓶罐、废弃渔网,甚至包括因意外落水的货物或船舶残骸。
这些漂浮物是水环境的"晴雨表"。过量的天然漂浮物会消耗水中氧气,而塑料等持久性人造垃圾则会随水流远距离迁移,不仅破坏景观,更易被鱼类、海鸟误食,对生态链造成严重威胁。因此,它们的存在既是水文循环的自然现象,也是人类活动对环境影响的重要警示。控制与清理水上漂浮物,已成为全球水环境治理中不可或缺的一环。
7.海上船只检测的意义和应用场景
海上船只检测系统基于PyQt、YOLO和DeepSeek技术,能够对图像、视频及实时监控画面中的船舶目标进行自动识别、定位与统计,在夜间、雾天及复杂海况下仍具备较高检测精度。该系统广泛应用于海上交通监管与智慧航运管理,可实时掌握船舶动态,提升港口调度和航道管理效率;在海上安防领域,可对非法入侵、走私和可疑船只进行全天候监测与预警,提高边防和重点区域安全保障能力;在海上搜救与应急救援中,能够快速发现目标并辅助制定救援方案,提高救援效率;在渔业监管方面,可监测渔船活动、发现非法捕捞和越界作业行为,助力海洋资源保护;同时还可应用于海上侦察和重点目标监控,增强海域态势感知与安全防护能力。总体而言,该系统具有自动化程度高、监测范围广和实时性强等优势,为海洋管理与安全保障提供了重要技术支持。
1. 智慧河流与城市水环境监管场景
随着城市河流、湖泊、人工景观水域数量不断增加,传统依靠人工巡查的水环境监管方式已经难以满足大范围、高频率、实时化的管理需求。基于PyQt+YOLO+DeepSeek的水面垃圾检测系统可以应用于城市河道、生态公园湖泊、城市湿地以及景观水域的智能化巡检工作。系统通过摄像头、无人机、岸边监控设备等采集水面图像或实时视频流,利用YOLO深度学习目标检测算法自动识别水面上的塑料瓶、塑料袋、泡沫垃圾、树枝杂物等漂浮物,并在检测画面中实时标注垃圾位置、类别以及数量信息。相比传统人工巡查方式,该系统能够实现全天候、自动化监测,减少人工巡检过程中存在的遗漏问题,提高城市水环境治理效率。同时,系统结合PyQt开发的可视化管理界面,可以为环保管理人员提供直观的数据展示平台,实现检测结果查看、历史记录查询、视频流实时监控等功能。通过与DeepSeek智能分析能力结合,系统还可以进一步辅助工作人员分析垃圾产生规律、污染趋势以及重点区域分布情况,为城市水环境治理提供数据支撑。在智慧城市建设背景下,该系统能够推动水域管理由传统人工监管模式向智能感知、自动分析和精准治理方向转变,对于提升城市生态环境质量、改善居民生活环境具有重要意义。
2.河流湖泊生态保护与环保巡检场景
在自然生态环境保护领域,河流、湖泊、水库等水域经常受到游客活动、周边居民生活以及工业运输等因素影响,导致大量漂浮垃圾进入水体。水面垃圾长期积累不仅会影响水体美观,还可能造成水质下降,阻碍水生植物生长,并威胁鱼类、鸟类等生态系统中的生物安全。因此,对自然水域开展高效、持续的垃圾监测成为生态保护工作的重要环节。本项目利用YOLO目标检测模型对不同环境下的水面目标进行智能识别,能够适应复杂光照、水面反光、目标尺度变化等实际情况,实现对自然水域漂浮垃圾的自动发现。该系统可部署于水库管理站、自然保护区、湿地公园以及生态监测区域,通过固定摄像头或移动巡检设备持续获取水面状态。当检测到垃圾漂浮物后,系统可以及时反馈检测结果,帮助管理人员快速定位污染区域并安排清理工作,避免垃圾扩散造成更大范围的生态影响。此外,通过长期积累检测数据,系统可以形成水域垃圾污染数据库,对不同季节、不同区域的垃圾变化情况进行统计分析,为生态环境保护政策制定提供科学依据。结合DeepSeek智能分析模块后,系统不仅能够完成垃圾检测任务,还可以辅助生成检测报告、分析污染原因以及提出治理建议,使环保人员能够更加高效地开展生态保护工作。该应用场景充分体现了人工智能技术在生态治理领域中的价值,为构建绿色生态环境、推动智慧环保体系建设提供了技术支持。
3. 港口、码头及水上交通区域管理场景
港口、码头以及航运区域通常具有人员流动大、船舶活动频繁、水面范围广等特点,容易产生包装材料、生活垃圾、工业废弃物等漂浮污染物。这些垃圾不仅影响港口环境形象,还可能进入船舶动力系统,对航运安全造成一定影响。因此,在港口和水上交通区域部署智能化水面垃圾检测系统,可以有效提高环境监管能力和安全保障水平。基于PyQt+YOLO+DeepSeek的水面垃圾检测系统能够接入港口现有的视频监控设备,对重点水域进行实时分析。系统利用YOLO算法对视频流中的异常漂浮物进行自动检测,在发现垃圾目标后及时进行标记和提示,使管理人员能够快速掌握污染情况。同时,系统支持对连续视频数据进行分析,可以判断垃圾漂移方向、聚集区域以及污染程度,为港口清洁船调度和人工清理提供依据。此外,港口管理部门可以利用系统生成的数据记录,对不同时间段、不同区域的垃圾出现情况进行统计,优化日常巡检路线,提高管理效率。DeepSeek智能分析功能还能够帮助工作人员快速理解检测结果,例如总结某区域污染频率较高的原因,并辅助制定更加合理的环保管理方案。该应用不仅能够降低人工巡检压力,还能提高港口智能化管理水平,对于建设绿色港口、保障水上运输环境安全具有积极作用。
4.无人机水面巡检与大范围环境监测场景
对于大型湖泊、河流、水库以及偏远水域而言,依靠人工巡查往往存在覆盖范围有限、巡检成本高、危险区域难以到达等问题。无人机技术的发展为水域环境监测提供了新的解决方案,而结合人工智能视觉检测算法,可以进一步提升无人机巡检的自动化水平。本项目可应用于无人机搭载摄像设备进行空中巡检,通过采集水面高清视频或图像,将数据传输至检测系统,由YOLO模型自动完成垃圾目标识别。在实际应用过程中,无人机可以按照预设路线对大面积水域进行巡航,系统实时分析采集到的视频内容,对漂浮垃圾进行定位和分类。例如,在大型水库、河流交汇区域或自然保护区中,无人机能够快速发现人工难以及时发现的垃圾聚集区域,并将检测结果反馈给管理人员。这种方式相比传统巡检模式具有覆盖范围广、响应速度快、运行成本低等优势。同时,系统中的DeepSeek智能分析模块可以对无人机巡检产生的大量数据进行辅助处理,例如生成巡检总结报告、分析垃圾分布规律以及预测潜在污染区域,为环境管理部门提供更加全面的信息支持。该应用场景体现了人工智能、无人机和环保监测技术的融合发展趋势,可有效推动水域巡检向智能化、自动化和无人化方向发展。
5. 水面清洁机器人与智能环保设备应用场景
近年来,随着人工智能、机器人技术的发展,水面清洁机器人逐渐应用于河道、湖泊以及景观水域垃圾收集工作。然而,传统清洁机器人通常依靠简单传感器或人工控制进行移动和垃圾收集,智能识别能力有限,难以准确判断垃圾位置和类型。将本项目中的YOLO视觉检测算法与水面机器人结合,可以赋予设备更加智能化的环境感知能力。在实际应用中,水面机器人搭载摄像头采集周围环境信息,通过YOLO模型实时检测水面漂浮垃圾,并根据识别结果规划移动路径,实现自动靠近垃圾区域并执行清理任务。例如,当机器人检测到塑料瓶、泡沫块等漂浮物时,可以根据目标位置调整航行方向,提高垃圾收集效率。同时,PyQt管理平台可以作为机器人的远程控制和监控中心,工作人员能够实时查看机器人运行状态、检测画面以及垃圾清理情况。结合DeepSeek智能分析能力后,系统还可以进一步实现智能任务规划,例如根据历史垃圾分布数据预测高污染区域,优化机器人巡航路线,提高设备工作效率。该应用场景将人工智能视觉识别技术与环保装备相结合,实现从"发现垃圾"到"自动清理"的智能化闭环管理,为未来智慧环保设备的发展提供了重要技术参考。

三.核心功能
1.登录注册
1.登录
软件启动后首先进入登录页面,用户需要输入正确的用户名和密码,经过系统验证后方可使用本系统的正式功能。登录页面整体采用垂直布局,使信息层次清晰、结构简洁,同时在局部区域辅以水平布局,以提升界面的灵活性与可读性。整体设计风格遵循"简约而不简单"的原则,在保证视觉美观的同时,也兼顾操作的直观性与易用性。
在功能实现方面,登录模块的后端采用sqlite3文件型数据库来存储用户信息,包括用户名、密码及相关基础数据。每次用户发起登录请求时,系统都会通过查询数据库进行身份校验,确保输入信息的准确性与安全性,从而实现规范化、标准化的登录流程。
同时,我们设计了统一风格的登录与注册界面,用于展示系统与用户交互所需的全部组件。界面顶部以醒目的标题形式展示系统名称,增强整体识别度与专业性。通过合理布局输入框、按钮及提示信息,使用户在使用过程中能够快速理解操作步骤,从而提升整体使用体验。

2.注册
对于尚未拥有账号的用户,需要先完成注册操作后才能使用系统功能。整体注册流程设计得较为简洁直观,用户只需在登录界面点击"注册"按钮,即可快速跳转至注册窗口,无需复杂的页面切换或额外步骤。在注册界面中,用户需要填写自定义的用户名,并输入两次一致的密码以完成身份信息的确认。这种双重密码输入机制可以有效避免因输入错误而导致的登录失败问题,从而提升系统的可靠性与用户体验。
在用户成功完成注册后,系统还提供了一项便捷的优化设计:自动将刚刚注册的用户名和密码填充到登录界面中。用户无需再次手动输入信息,即可直接进行登录操作。这一设计在一定程度上简化了登录流程路径,减少了重复操作,提高了整体使用效率。同时,该功能也体现了系统在交互细节上的人性化考虑,使用户在首次使用时能够获得更加顺畅和友好的体验。

2.主界面
用户通过输入自己的用户名和密码登录到本系统后进入主界面,主界面内容十分丰富,我来一一介绍:首先软件整体是垂直布局,顶部是系统的标题,从左到右依次展示了系统的作者信息、系统名称、当前时间以及CPU内存占用情况,下方为水平布局,左侧是系统的导航区域,我们设计了windows风格支持展开与收缩的内容导航区域,右侧是内容核心区域,通过点击导航按钮切换展示内容,主界面主要展示了以日期为维度统计的数据、用户信息操作按钮、系统信息、系统环境信息以及实时CPU、内存可视化折线图

3.图像检测界面
1.检测结果展示
用户通过点击左侧导航栏按钮切换到图像检测界面,在此界面支持选择图像进行输入,用户选择完之后被选择的图像会展示在左侧并且展示图像绝对路径信息,用户可以通过点击右侧的"进行检测"按钮对输入的图像数据进行检测,系统会自动调用YOLOv8相关算法根据指定的参数对输入图像内容进行检测,最后将检测结果展示到右侧,这样用户可以通过比对左右图像的区别得到直观的检测结果,系统自动使用红色边框框选出目标区域并且使用红色文字展示出目标类别以及它的置信度,这些参数和展示效果都可以在设置页面进行详细设置。

2.导出检测结果
我们在界面中专门设置了检测结果展示区域,用于集中呈现系统输出的信息。该区域不仅包含检测目标数量的统计展示,还提供了结构清晰的详细检测结果表格。通过这种方式,用户可以直观地查看每一条检测数据,包括目标类别、置信度以及对应位置信息等内容,从而更全面地了解检测情况。整体布局兼顾信息密度与可读性,使数据展示既完整又不显杂乱。
此外,在检测任务完成之后,界面右侧的三个功能按钮会自动由不可用状态切换为可点击状态,避免用户在未生成结果前进行误操作。这三个按钮分别承担不同的功能,其中"导出结果"按钮允许用户将检测数据保存到本地。系统支持多种导出格式,包括Excel、CSV以及TXT,用户可以根据实际需求灵活选择合适的文件类型,以便后续分析或归档使用。以Excel格式为例,导出的文件通常采用表格结构,对应字段清晰排列,便于用户进一步查看与处理数据。

3.可视化展示
然后就是可视化展示,用户可以点击进行可视化按钮,查看对于本次检测的可视化效果,系统内置了四种可视化效果:分别是:目标位置热力图、目标面积占比、置信度分布直方图、检测能力柱状图,这些图标通过不同维度对当前数据进行了可视化展示,更便于用户理解,这里指的一体的是,支持可视化图表进行导出操作,用户可以点击紫色的导出按钮,对当前的可视化效果图表进行导出,生成一张本地的PNG图像文件。

4.AI(DeepSeek)智能分析
在每次检测任务完成并展示检测结果之后,系统为用户提供了一种便捷且智能的交互方式:用户只需点击界面右下角悬浮的机器人图标,即可触发对当前检测结果的深度AI分析功能。系统会自动将本次检测所得到的所有关键信息------包括检测到的目标类别、置信度分数、目标位置坐标、数量统计以及可能存在的异常或遮挡情况等------完整地作为输入传递给后端AI大模型。AI模型接收到这些数据后,会基于其强大的语义理解与逻辑推理能力,对本次检测结果进行多维度的智能评估。评估内容可以包括:检测结果的准确性与可靠性判断、识别结果中可能存在的误检或漏检风险提示、针对当前场景的优化建议、对异常情况的详细解释。这一设计不仅使用户无需手动复制或整理检测数据就能获得即时的专业分析反馈,更重要的是,它实现了一种通用化的AI能力接入机制:检测模块与分析模块实现了解耦,任何检测结果都可以以统一格式传递给AI进行分析,而AI的具体分析逻辑可以根据需要灵活替换、升级或定制。这使得系统在未来可以轻松扩展更多智能功能,例如接入不同的大模型、增加多模态分析能力、实现检测策略的自适应调整等,极大地提升了整个系统的可扩展性与智能化水平。
这里是软件的另外一个核心:AI智能分析,我们的目标检测系统接入了DeepSeek大模型,支持对当前检测结果数据进行AI分析,AI会通过不同维度对当前检测结果进行多角度分析,最后生成检测结果分析报告,用户可以根据这个结果对系统进行调整,不断完善系统功能和目标检测准确度!
在AI分析结束后下方会展示一些按钮,用户可以方便地复制结果、导出文本内容、生成PDF报告、重新生成以及关闭,多重的操作方式给于用户了多种选择!

4.视频检测界面
1.视频文件检测
我们的系统具备对视频内容中海上船只情况的智能检测能力,能够适配多种输入来源,包括本地视频文件、实时视频流以及各类摄像头设备,满足不同应用场景下的使用需求。系统通过对视频画面逐帧解析,利用先进的图像识别算法对画面中的目标进行精准检测,并实时完成标注与可视化展示,使用户能够直观了解检测效果。在性能方面,系统引入了灵活的帧率控制机制,在保证检测精度的同时有效提升视频播放的流畅性,避免出现卡顿或延迟问题,从而提升整体使用体验。
此外,系统界面设计注重用户交互体验,支持左右画面对比显示,用户可以通过肉眼直观对比原始画面与检测结果,快速评估算法表现与准确性。这种对比方式不仅便于结果验证,也有助于进一步优化检测参数。值得一提的是,视频检测界面在功能设计上与图像检测界面保持高度一致,操作逻辑统一,用户无需额外学习成本即可快速上手使用,包括基本的播放控制、暂停、逐帧查看以及检测结果开关等功能。因此,在保证功能完整性的同时,也兼顾了系统的易用性与扩展性。
2.摄像头内容检测
当用户点击"进行检测"按钮后,系统会自动调用本地摄像头设备并完成初始化,随即在界面中实时展示摄像头采集到的画面内容。在视频流持续输入的过程中,系统会同步启动目标检测算法,对当前画面中的目标进行实时识别与标注处理,确保检测结果能够及时反馈给用户。同时,界面采用左右分屏的展示方式,一侧显示原始画面,另一侧显示叠加检测结果的画面,用户可以通过直观对比快速判断检测效果与准确性。这种设计不仅提升了交互体验,也便于用户观察算法在不同场景下的表现情况。至于摄像头画面中是否出现本人,这里就暂时保持低调,不做展示了。
5.模型指标评估
在这个页面中我们通过三个tab展示了模型训练结果评估,分别是:训练结果图、训练结果详情、整体评估,所有的训练结果文件(夹)以及相关作用可见下面图标:
| 文件/文件夹名 | 类型 | 作用说明 |
|---|---|---|
weights/ |
文件夹 | 存放训练得到的模型权重 |
├─ best.pt |
文件 | 在验证集上表现最好的模型(推荐用于推理/部署) |
├─ last.pt |
文件 | 最后一轮训练结束时的模型(包含最新状态) |
results.csv |
文件 | 每个 epoch 的训练与验证指标(loss、mAP、precision 等) |
results.png |
图片 | 训练过程中各类指标变化曲线(loss、mAP 等可视化) |
confusion_matrix.png |
图片 | 混淆矩阵,展示类别预测情况 |
confusion_matrix_normalized.png |
图片 | 归一化后的混淆矩阵 |
PR_curve.png |
图片 | Precision-Recall 曲线 |
P_curve.png |
图片 | Precision 曲线 |
R_curve.png |
图片 | Recall 曲线 |
F1_curve.png |
图片 | F1-score 曲线 |
labels.jpg |
图片 | 数据集中标签分布(类别统计) |
labels_correlogram.jpg |
图片 | 标签相关性图(用于分析数据分布) |
train_batch*.jpg |
图片 | 训练批次样本可视化(带标注框) |
val_batch*.jpg |
图片 | 验证批次样本可视化 |
args.yaml |
文件 | 本次训练的完整参数配置(超参数、路径等) |
hyp.yaml(部分版本) |
文件 | 超参数配置(学习率、增强策略等) |
opt.yaml(旧版本可能有) |
文件 | 训练选项记录(已逐渐被 args.yaml 替代) |
events.out.tfevents.* |
文件 | TensorBoard 日志文件(用于可视化训练过程) |
1.训练结果图tab
本系统基于 PyQt5 + YOLOv8 + DeepSeek 构建,实现对海上船只的智能检测与可视化分析。在结果展示模块的该 tab 页面中,集中呈现模型训练与评估阶段生成的多维度指标图像,包括训练损失与性能指标曲线图、PR 曲线、Precision 曲线、Recall 曲线、F1 曲线,以及混淆矩阵与归一化混淆矩阵。同时还提供标签分布图与标签相关性图,用于分析数据集结构与类别关系。
这些图像以直观的方式嵌入界面中,用户无需额外操作即可快速浏览模型整体表现。例如,PR 曲线可反映模型在不同阈值下的查准率与召回率平衡,F1 曲线用于综合衡量模型性能,而混淆矩阵则清晰展示分类正确与误判情况。标签分布与相关性图则有助于判断数据是否均衡及类别间的潜在关联。
在交互设计上,用户可通过点击图像本身,或点击底部提供的图像路径,调用系统默认图像查看工具进行放大查看,提升细节分析能力。每张图像下方均附有简明且专业的说明文案,帮助用户理解其评估意义及应用价值,从而更全面地掌握模型训练效果与优化方向。

2.训练结果详情tab
在该子 tab 页面中,系统进一步对训练过程中的 results.csv 数据进行了结构化展示。通过将原始训练日志解析为二维表格,完整呈现模型在每一轮(epoch)中的关键指标变化情况,使用户能够以更加清晰、系统化的方式回顾训练全过程。界面设计上采用了简洁清新的视觉风格,并结合横向渐变配色对不同数值区间进行区分,使数据变化趋势更加直观,重点指标一目了然。
表格中包含了完整的字段信息,例如"轮次"和"时间"用于标识训练进度;"训练/边界框损失""训练/分类损失""训练/DFL损失"反映模型在训练阶段的收敛情况;"指标/精确率(B)""指标/召回率(B)"以及"指标/mAP@0.5(B)"和"指标/mAP@0.5:0.95(B)"用于综合评估模型检测性能;对应的"验证/边界框损失""验证/分类损失""验证/DFL损失"则用于判断模型的泛化能力与是否存在过拟合现象。此外,"学习率/pg0""学习率/pg1""学习率/pg2"展示了不同参数组在训练过程中的学习率动态变化,有助于分析优化策略的效果。
在交互体验方面,表格支持滚动浏览与高亮显示,用户可以快速定位关键轮次的数据变化。同时结合渐变色视觉编码,能够快速识别性能提升或波动区间。通过这一模块,用户不仅可以精确掌握模型训练的细节,还能够为后续参数调优与模型改进提供可靠的数据支撑,实现从"可视化观察"到"数据驱动优化"的有效过渡。

3.训练结果曲线对比tab
这是 YOLOv8 训练流程中用于可视化结果分析的核心界面模块。它的主要内容是自动读取训练生成的 results.csv 文件,并通过 Matplotlib 绘制两组关键曲线:上方子图展示训练/验证过程中的六条损失曲线(包括 box_loss、cls_loss、dfl_loss),下方子图展示精度、召回率、mAP50 和 mAP50-95 四项检测指标的变化趋势。在作用方面,该组件为开发者提供了直观的模型训练监控手段------通过观察损失曲线是否收敛且无严重震荡,可以判断模型是否欠拟合或过拟合;通过观察 mAP 等指标曲线的上升趋势,可以评估模型性能的改善情况。这使得用户无需手动解析 CSV 数据,即可快速完成模型调参、早停判断和训练效果对比,显著提升了 YOLOv8 模型开发的效率。

4.整体评估tab
在该页面中,系统对模型训练结果进行了更高层次的综合评估与总结分析。通过对关键指标进行统一整理与可视化表达,结合细致的颜色编码机制,将不同阶段的性能变化趋势清晰呈现出来,使用户能够从整体上把握模型训练的动态过程,而不仅仅停留在单一指标的观察。
在评估维度上,系统重点围绕多个核心方面展开。首先是收敛质量 ,通过训练与验证损失曲线的变化趋势,判断模型是否稳定收敛以及是否存在震荡或过早收敛的问题;其次是检测性能 ,结合 Precision、Recall 以及 F1 等指标,分析模型在目标检测任务中的准确性与覆盖能力;在泛化能力 方面,通过对比训练集与验证集指标差异,评估模型是否存在过拟合或欠拟合现象;同时利用 mAP 综合表现 (包括 mAP@0.5 与 mAP@0.5:0.95)对模型整体检测能力进行量化衡量,从多阈值角度反映检测精度的稳定性。
此外,系统还对学习率调度策略 进行了分析,通过展示不同参数组学习率随训练轮次的变化情况,帮助用户判断当前优化策略是否合理,以及是否需要进一步调整以提升训练效率或稳定性。所有评估结果均通过分层颜色与趋势变化进行突出展示,使关键结论更加直观易读。
在页面的最后部分,系统基于上述多维度分析结果,自动生成整体评估结论,并从工程应用视角给出总结性判断。例如模型是否已达到可部署标准、是否需要继续训练或优化数据集、以及在实际口罩检测场景中的预期表现。这种从数据到结论的完整闭环设计,有助于用户快速完成模型质量评估,并为后续系统部署与迭代提供明确依据。

6.数据查看界面
"历史数据"页面是系统中用于集中查看与管理过往记录的重要模块,整体设计清晰直观,通过两个独立的 Tab 实现不同维度数据的分类展示,方便用户快速切换与定位信息。
总体而言,"历史数据"页面通过清晰的结构划分与完善的功能设计,实现了检测记录与用户信息的高效管理与展示,为系统的运维与决策提供了有力支持。
1.历史数据tab
在"检测历史数据"Tab中,页面以结构化表格的形式呈现所有检测相关记录。每一条数据都包含关键字段:数据库ID用于唯一标识记录,目标类型用于说明检测对象的类别,检测结果用于反馈检测结论,检测日期则记录具体的时间信息。该模块不仅实现了数据的完整展示,还特别强化了可用性与交互体验------支持分页浏览功能,用户可以根据数据量分批查看内容,同时提供"跳转到第一页"、"上一页"、"下一页"以及"最后一页"等操作按钮,便于在大量数据中高效导航。这种分页机制有效避免了数据过载带来的性能问题,同时也提升了界面的响应速度和用户体验。

2.用户数据tab
其次,在"用户数据"Tab中,系统汇总展示了所有已注册用户的信息,是一个用于用户管理与审计的重要视图。页面同样采用表格形式,列出了数据库ID、用户名、用户角色以及最后登录日期时间等核心字段。通过这些信息,管理员可以快速了解系统用户的基本情况及活跃状态,例如判断某些用户是否长期未登录,从而进行进一步管理操作。该部分数据覆盖范围全面,确保系统管理者能够掌握整体用户分布与使用情况。

6.系统设置界面
我们的系统是支持简单的参数设置的,具体可以设置目标检测模型、置信度阈值(Conf)、交并比阈值(IOU)、还有一些检测结果控制参数,比如检测框展示、目标类别展示、目标置信度展示,用户可以点击绿色的刷新按钮刷新可用模型,亦可通过点击退出按钮退出系统或者退出登录,本设置页面实现了目标检测参数的灵活配置!

7.关于软件界面
我们使用富文本html的形式展示了软件相关的信息,包括系统用到的相关技术,对于二维的数据使用二维表进行了展示,最底部放置了四个按钮,分别是:关于YOLO、关于软件、关于作者、关于QT,点击之后都会弹出对应的信息提示框,这个页面的作用是让用户更多的了解软件和创作者信息,跨过技术的鸿沟!

四.数据集
本系统为"一款基于PyQt+YOLO+DeepSeek的海上船只系统",用以检测输入数据源是否存在海上船只。
在开发基于PyQt+YOLO+DeepSeek的海上船只检测系统时,数据集的收集是核心环节,需确保多样性和高质量。目标是覆盖夜间海上环境中各种船只类型,包括渔船、货船、油轮和快艇等,同时考虑不同尺寸、姿态、航速和光照条件。采集数据时应使用高分辨率红外、低照度可见光和多光谱相机,从静态图像、录像到实时视频流均需涵盖,以模拟实际监控场景。采集地点应选择海港、沿海航道及远海区域,确保背景复杂多变,如海浪、灯光反射及天气干扰。标注时需精准标记船只边界框、类别及夜间特征信息,以支持YOLO的目标检测训练,并为DeepSeek提供检索和匹配特征。同时,应保证数据集的平衡性和隐私合规,排除无关船只或非海上物体,以增强模型在夜间低光环境下的鲁棒性和检出精度,为系统在实战环境下的准确识别提供坚实基础。
1.数据准备
本系统附带4267张不同图像和4267个数据标注文件,大家可以根据自己的情况自行训练数据自己的模型!


上图是数据标注文件,格式为txt,下面我们提供了相关脚本支持将xml转为YOLO的txt格式
我们使用TXT的格式存储数据标注文件,单数据标注文件内容如下:
bash
0 0.185156 0.463281 0.037500 0.029687
2.数据集处理
1.数据集标注文件类型转换
直接使用VOC格式的数据标注文件进行训练是不行的,需要我们将xml转成txt文件,
这段代码是一个**COCO格式标注转YOLO格式标注**的转换脚本,核心功能是将JSON中的目标检测标注数据转换为YOLO训练所需的txt标签文件。它首先读取COCO风格的JSON文件,构建类别映射(将原始类别ID压缩为0开始的连续索引)和图片文件名映射;然后遍历每张图片的标注信息,对于每个标注框,将COCO的左上角坐标(x,y,宽,高)转换为YOLO所需的归一化中心点坐标(x_center,y_center,宽,高);最后为每张图片生成同名的txt文件,每行记录一个目标的类别索引和归一化边界框参数。代码考虑了图片文件可能使用不同扩展名的情况,并通过容错处理跳过无法读取的图片,最终在指定目录输出可直接用于YOLO系列模型训练的标签文件。
大家首先执行step1_voc_to_txt.py
python
import os
import json
from PIL import Image
from train_conf import BASE_DIR
json_file = BASE_DIR + r"Annotations\coco_info" + ".json"
img_dir = BASE_DIR + r"Images"
label_dir = BASE_DIR + r"labels"
os.makedirs(label_dir, exist_ok=True)
with open(json_file, "r", encoding="utf-8") as f:
data = json.load(f)
annotations = data["annotations"]
categories = data["categories"]
category_map = {}
for cat in categories:
category_map[cat["id"]] = cat["name"]
class_map = {}
for idx, cat_id in enumerate(sorted(category_map.keys())):
class_map[cat_id] = idx
print("类别映射:")
for k, v in class_map.items():
print(k, "=>", v, category_map[k])
image_map = {}
if "images" in data:
for img in data["images"]:
image_map[img["id"]] = img["file_name"]
else:
print("JSON没有images字段,需要根据image_id匹配图片")
img_annotations = {}
for ann in annotations:
img_id = ann["image_id"]
if img_id not in img_annotations:
img_annotations[img_id] = []
img_annotations[img_id].append(ann)
img_exts = [
".jpg",
".jpeg",
".png",
".bmp"
]
for img_id, anns in img_annotations.items():
img_path = None
if img_id in image_map:
filename = image_map[img_id]
tmp = os.path.join(img_dir, filename)
if os.path.exists(tmp):
img_path = tmp
if img_path is None:
for ext in img_exts:
tmp = os.path.join(
img_dir,
str(img_id) + ext
)
if os.path.exists(tmp):
img_path = tmp
break
if img_path is None:
print("找不到图片:", img_id)
continue
try:
with Image.open(img_path) as img:
img_w, img_h = img.size
except:
print("图片读取失败:", img_path)
continue
txt_lines = []
for ann in anns:
bbox = ann["bbox"]
x = float(bbox[0])
y = float(bbox[1])
w = float(bbox[2])
h = float(bbox[3])
x_center = (x + w / 2) / img_w
y_center = (y + h / 2) / img_h
box_w = w / img_w
box_h = h / img_h
category_id = ann["category_id"]
cls_id = class_map[category_id]
txt_lines.append(
f"{cls_id} "
f"{x_center:.6f} "
f"{y_center:.6f} "
f"{box_w:.6f} "
f"{box_h:.6f}"
)
img_name = os.path.splitext(
os.path.basename(img_path)
)[0]
txt_path = os.path.join(
label_dir,
img_name + ".txt"
)
with open(
txt_path,
"w",
encoding="utf-8"
) as f:
f.write("\n".join(txt_lines))
print("\n转换完成")
print("YOLO标签目录:")
print(label_dir)
2.数据集拆分
YOLO 推荐训练集和测试集按 8:2 划分,主要是因为目标检测对样本量非常依赖,需要尽可能多的训练数据来学习特征,同时又必须保留足够的独立测试数据来评估模型的真实泛化能力。8:2 被证明在"训练数据够多"与"测试评估足够稳定"之间取得了较好平衡,因此成为默认且通用的实践比例。
这个脚本的作用是从已有的图片和 YOLO 标注文件中随机抽取 300 张图片,并将它们按照训练集和验证集的比例进行划分,然后将对应的图片和 TXT 标注文件复制到新的数据集目录中,方便直接用于训练 YOLO 模型。脚本会先创建训练集和验证集的图片、标签子目录,然后随机选择 指定数量的张图片,其中 五分之一作为验证集,其余 五分之四作为训练集,复制过程中会保证每张图片对应的标注文件也被同步复制,如果标注文件不存在,会生成一个空的 TXT 文件,以保持文件结构完整。运行完成后,新的数据集就整理好了,可以直接用于训练和验证。。最终会在目标目录下生成:

执行脚本step2_auto_part.py
bash
import os
import random
import shutil
from train_conf import BASE_DIR
# 原始数据路径
img_dir = BASE_DIR + "Images"
label_dir = BASE_DIR + "labels"
# 新数据集路径
dataset_dir = BASE_DIR + "dataset"
MAX_IMAGE_COUNT = 200
SP_COUNT = int(MAX_IMAGE_COUNT * 0.2)
train_img_dir = os.path.join(dataset_dir, "train", "images")
train_label_dir = os.path.join(dataset_dir, "train", "labels")
val_img_dir = os.path.join(dataset_dir, "val", "images")
val_label_dir = os.path.join(dataset_dir, "val", "labels")
# 创建目录
for dir_path in [train_img_dir, train_label_dir, val_img_dir, val_label_dir]:
os.makedirs(dir_path, exist_ok=True)
# 获取所有图片文件
all_images = [f for f in os.listdir(img_dir) if f.lower().endswith((".jpg", ".png", ".jpeg"))]
# 随机抽取MAX_IMAGE_COUNT张
if len(all_images) < MAX_IMAGE_COUNT:
raise ValueError(f"图片数量不足MAX_IMAGE_COUNT张,当前数量: {len(all_images)}")
selected_images = random.sample(all_images, MAX_IMAGE_COUNT)
# 分割训练集和验证集
random.shuffle(selected_images)
val_images = selected_images[:SP_COUNT]
train_images = selected_images[SP_COUNT:]
def copy_files(image_list, target_img_dir, target_label_dir):
for img_file in image_list:
# 复制图片
src_img_path = os.path.join(img_dir, img_file)
dst_img_path = os.path.join(target_img_dir, img_file)
shutil.copy(src_img_path, dst_img_path)
# 对应的txt
label_file = os.path.splitext(img_file)[0] + ".txt"
src_label_path = os.path.join(label_dir, label_file)
if os.path.exists(src_label_path):
dst_label_path = os.path.join(target_label_dir, label_file)
shutil.copy(src_label_path, dst_label_path)
else:
# 如果没有对应txt文件,创建一个空文件
open(os.path.join(target_label_dir, label_file), "w").close()
# 复制训练集
copy_files(train_images, train_img_dir, train_label_dir)
# 复制验证集
copy_files(val_images, val_img_dir, val_label_dir)
print(f"随机抽取完成!训练集: {len(train_images)} 张,验证集: {len(val_images)} 张")
print(f"数据集路径: {dataset_dir}")
3.模型训练
数据集准备好之后就可以开始模型训练了,我们首先准备一个训练的配置文件,比如说是data.yaml

然后就可以开始模型训练了,直接执行我们准备好的train.bat文件,内容就是下面的内容
bash
yolo task=detect mode=train model=../data/model/yolov8n.pt data=./data.yaml epochs=30 imgsz=640 batch=16 lr0=0.01
用户亦可执行step3_train_model.py脚本进行模型训练
python
from ultralytics import YOLO
def main():
# 加载模型
model = YOLO("../data/model/yolov8n.pt")
# 开始训练
model.train(
data="./data.yaml", # 数据集配置
epochs=50, # 训练轮数
imgsz=640, # 输入尺寸
batch=16, # batch size
lr0=0.01, # 初始学习率
task="detect" # 任务类型
)
if __name__ == "__main__":
main()
然后模型就开始训练了
这里我贴一些训练验证结果截图




最后的results.png见下图,训练效果还是可以的!

bash
# ✅ YOLO模型训练效果评价
本次模型训练共进行 **50 Epoch**,训练时间约:
> **2019.95 秒(约33.7分钟)**
整体来看,模型训练过程稳定,Loss持续下降,检测指标逐渐提升,并在 **Epoch35~50进入收敛阶段**。
最终模型性能:
| 指标 | Epoch50结果 |
| --------- | ---------: |
| Precision | **0.7168** |
| Recall | **0.7499** |
| mAP50 | **0.3479** |
| mAP50-95 | **0.3409** |
最佳综合性能:
> **Epoch35**
对应:
| 指标 | 数值 |
| --------- | ---------: |
| Precision | **0.8539** |
| Recall | **0.7239** |
| mAP50 | **0.7821** |
| mAP50-95 | **0.3503** |
说明:
> 模型在Epoch35达到最高检测性能,继续训练后指标出现轻微波动,没有继续提升。
---
# 📉 一、训练Loss收敛分析
## 1. Train Loss变化
| Loss | Epoch1 | Epoch50 | 变化 |
| -------------- | -----: | ------: | -----: |
| train/box_loss | 2.2253 | 1.2692 | ↓42.9% |
| train/cls_loss | 4.2591 | 0.8422 | ↓80.2% |
| train/dfl_loss | 1.2102 | 0.9048 | ↓25.2% |
### 分析
训练损失整体下降明显:
### (1)分类损失下降最明显
`train/cls_loss`
从:
4.2591 → 0.8422
下降约:
> **80.2%**
说明:
* 模型快速学习船只类别特征;
* 分类能力提升明显;
* 网络特征提取有效。
---
### (2)边界框回归持续改善
`train/box_loss`
从:
2.2253 → 1.2692
下降:
> **42.9%**
说明:
* 目标定位能力逐步增强;
* 边界框预测更加准确。
---
### (3)DFL下降较慢
`train/dfl_loss`
下降:
> **25.2%**
说明:
* 高精度定位优化速度较慢;
* 对小目标、复杂背景目标仍有优化空间。
---
# 📊 二、验证集Loss分析
| Loss | Epoch1 | Epoch50 | 变化 |
| ------------ | -----: | ------: | -----: |
| val/box_loss | 2.0430 | 1.5771 | ↓22.8% |
| val/cls_loss | 3.9587 | 1.0417 | ↓73.7% |
| val/dfl_loss | 0.9926 | 1.0230 | ↑3.1% |
分析:
## 分类泛化能力良好
验证分类Loss:
3.9587 → 1.0417
下降:
> **73.7%**
说明:
模型没有明显过拟合,分类特征具有较好的泛化能力。
## 定位能力提升有限
val box loss:
2.043 →1.577
虽然下降,但幅度小于训练集。
说明:
模型:
* 能识别船只;
* 但精确框选能力仍受数据质量影响。
## DFL基本稳定
变化:
0.9926 →1.0230
基本保持稳定。
说明:
后期模型定位能力进入平台期。
---
# 🚀 三、检测指标变化分析
## Epoch1~10:快速学习阶段
初期:
Epoch1:
| 指标 | 值 |
| --------- | ----: |
| Precision | 0.006 |
| Recall | 0.637 |
| mAP50 | 0.068 |
| mAP50-95 | 0.020 |
Epoch10:
| 指标 | 值 |
| --------- | ----: |
| Precision | 0.712 |
| Recall | 0.469 |
| mAP50 | 0.500 |
| mAP50-95 | 0.205 |
说明:
模型快速建立目标检测能力:
* Precision快速提升;
* mAP50增长明显;
* 网络开始有效识别船只。
---
# Epoch11~30:性能提升阶段
代表节点:
## Epoch20
| 指标 | 结果 |
| --------- | ----: |
| Precision | 0.834 |
| Recall | 0.619 |
| mAP50 | 0.691 |
| mAP50-95 | 0.296 |
## Epoch30
| 指标 | 结果 |
| --------- | ----: |
| Precision | 0.859 |
| Recall | 0.742 |
| mAP50 | 0.360 |
| mAP50-95 | 0.360 |
分析:
这一阶段:
* Precision保持较高水平;
* Recall持续增加;
* 模型检测稳定性增强。
---
# Epoch31~50:收敛阶段
最佳:
## Epoch35
| 指标 | 值 |
| --------- | ----: |
| Precision | 0.854 |
| Recall | 0.724 |
| mAP50 | 0.782 |
| mAP50-95 | 0.350 |
之后:
Epoch50:
| 指标 | 值 |
| --------- | ----: |
| Precision | 0.717 |
| Recall | 0.750 |
| mAP50 | 0.348 |
| mAP50-95 | 0.341 |
分析:
后期出现:
* Precision下降;
* Recall提升;
* mAP50下降。
说明:
模型已经达到最佳状态,继续训练导致性能波动。
---
# 🏆 四、最佳模型选择
综合考虑:
| Epoch | Precision | Recall | mAP50 | mAP50-95 |
| ----- | --------: | -----: | --------: | -------: |
| 35 | 0.854 | 0.724 | **0.782** | 0.350 |
| 36 | 0.812 | 0.735 | 0.780 | 0.359 |
| 40 | 0.834 | 0.717 | 0.759 | 0.341 |
| 50 | 0.717 | 0.750 | 0.348 | 0.341 |
推荐:
> 使用 Epoch35~36 的 best.pt
原因:
* mAP50最高;
* Precision较高;
* 综合检测能力最佳。
---
# 📈 五、Precision / Recall分析
最终:
Precision:
> **71.7%**
Recall:
> **75.0%**
说明:
### Precision较高
代表:
* 误检数量较少;
* 检测结果可信。
### Recall较高
代表:
* 大部分船只能够检测出来;
* 漏检情况较少。
综合:
> 模型偏向较强的目标发现能力,适合海上目标监测场景。
---
# 📌 六、学习率策略分析
学习率:
最高:
0.001627
最终:
0.0000596
变化:
* 前10 Epoch升高;
* 中后期逐渐下降。
符合:
> Warmup + Cosine decay策略
训练过程:
* 没有明显震荡;
* Loss下降稳定;
* 优化过程正常。
---
# 🎯 七、模型综合评价
| 能力 | 评价 |
| ------ | ----- |
| 训练稳定性 | ⭐⭐⭐⭐⭐ |
| 分类能力 | ⭐⭐⭐⭐⭐ |
| 目标发现能力 | ⭐⭐⭐⭐ |
| 定位精度 | ⭐⭐⭐⭐ |
| 泛化能力 | ⭐⭐⭐⭐ |
| 小目标检测 | ⭐⭐⭐ |
---
# 🏁 最终结论
> 本次YOLO模型经过50轮训练后实现稳定收敛,训练Loss持续下降,其中分类损失下降超过80%,说明模型能够有效学习海上船只目标特征。模型最佳性能出现在Epoch35,达到Precision=85.4%、Recall=72.4%、mAP50=78.2%、mAP50-95=35.0%。最终Epoch50仍保持Precision=71.7%、Recall=75.0%的检测能力。整体来看,该模型具备较好的海上船只目标检测能力,可以作为实际部署基础模型。后续若进一步提升性能,可重点优化目标定位能力,通过增加高质量标注数据、增强小目标样本、多尺度训练以及优化检测头结构提升mAP50-95指标。
---
# 一句话总结
> **模型在Epoch35达到最佳效果(mAP50=78.2%,Precision=85.4%),50轮训练后保持稳定检测能力,具备较好的海上船只识别能力,但高IoU定位精度仍有进一步优化空间。**
---
# 📌 一句话总结
> **模型经过50轮训练后稳定收敛,最佳性能出现在Epoch49(mAP50=71.4%,mAP50-95=50.2%),最终达到Precision=68.7%、Recall=64.9%,具备较好的海上船只检测能力,可作为当前任务部署基线模型。**
五.问题统一回答
在这个章节我将统一回答朋友们比较关心的问题
1.数据库
我们使用sqlite3作为数据存储数据库,数据库中包含两个数据表,用于存储我们的核心数据
1.users用户信息表
数据表结构
sql
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL UNIQUE,
password TEXT NOT NULL,
last_login TEXT,
role TEXT NOT NULL
)
| 字段名 | 类型 | 作用 |
|---|---|---|
| id | INTEGER | 用户唯一ID(自增主键) |
| username | TEXT | 用户名(唯一) |
| password | TEXT | 用户密码 |
| last_login | TEXT | 最后登录时间 |
| role | TEXT | 用户角色(如:admin/user) |
users 表用途
这个表主要用于:
用户注册
用户登录认证
用户权限管理
登录时间记录
2.detect_history 检测历史表
表结构
sql
CREATE TABLE IF NOT EXISTS detect_history (
id INTEGER PRIMARY KEY AUTOINCREMENT,
type VARCHAR(50),
path TEXT,
total VARCHAR(50),
detail TEXT,
detect_date VARCHAR(50)
)
| 函数名 | 作用 | 操作对象 |
|---|---|---|
__init__() |
初始化数据库对象 | 整体系统 |
check_check_and_create() |
创建数据库目录 | 文件系统 |
execute_sql() |
执行SQL语句 | 所有表 |
create_tables() |
创建数据库表 | users / detect_history |
register_user() |
用户注册 | users |
get_user_by_credentials() |
用户登录验证 | users |
init_default_user() |
初始化默认账号 | users |
insert_detect_history() |
插入检测历史 | detect_history |
query_users() |
分页查询用户 | users |
query_detect_history() |
分页查询检测记录 | detect_history |
clear_detect_history() |
清空检测历史 | detect_history |
这个表用于保存:
AI检测结果
图像检测历史
视频分析结果
文件识别记录
2.如何修改文案
全局搜索目标文案,如果搜不到就删减关键字直到搜索到目标关键字
这里以主界面右上角的作者信息来演示,去掉此文案

在线免直接进行字符串替换即可

3.如何修改图片资源
用户可能需要更换背景图或者登录界面logo图,这里以修改背景图为例:在src/resource/images找到对应文件,找到自己准备好的图片(最好是同样扩展名),最后执行script/create_qrc.py脚本,完成资源替换。

4.如何更换API Key
我们的系统是支持AI分析的,用户要更换API Key的话,可以找到src/conf/system_conf.py的deepseek_api_key ,替换此变量的值即可。

5.运行最佳分辨率
软件是在python3.8的windows环境下开发的,推荐的分辨率为1920X1080

6.如何隐藏部分功能
我们的软件包含多个界面,通过左侧导航栏控制右侧内容页面展示,用户如果需要隐藏功能,可以这样操作:
找到src/conf/system_conf.py的page_config_items 变量,按照情况注释或者删除,即可隐藏指定的页面

7.软件系统架构图
我们绘制了软件架构图,详细地展示了软件系统层级架构以及数据流转,拿到项目代码的朋友,可以免费获取无水印版本系统架构图哦~

下图为本系统的功能模块图,直观地展示了系统的每个功能模块

下图为用户操作流程图,用户能够直观地看到系统每个具体的操作流程

六.关于项目
1.开发环境
本系统是在 Windows 11 操作系统上进行开发的,Python 环境采用的是 Python 3.8 版本,硬件方面使用的是 AMD 处理器 ,未配备独立显卡,开发工具为 *PyCharm 2021.3
- 版本。在整个开发与测试过程中,我们严格遵循了上述环境配置,确保了系统的稳定运行。在此特别建议所有使用者:为了避免出现因版本过新而导致的"不兼容"情况,请大家尽量不要使用过高的 Python 版本(如 Python 3.11 及以上),也不要使用最新的 PyCharm 或操作系统版本。因为较新的环境可能对部分依赖库或语法特性支持不佳,容易引发意外的报错或功能异常。遵循本项目所推荐的版本配置,能够最大程度地保证系统的顺利部署与稳定运行。
2.项目部署
1.项目依赖
博主是在Windows电脑上使用Python3.8开发的本系统,建议大家使用的Python版本别太高。
其中项目依赖为:
bash
PyQt5==5.15.11
QtAwesome==1.3.1
torch==2.4.1
torchvision==0.19.1
Pillow==9.3.0
pyqtgraph===0.13.3
PyQtWebEngine==5.15.5
opencv-python==4.10.0.82
ultralytics==8.3.234
Requests==2.32.5
pandas==2.0.3
numpy==1.24.4
Markdown==3.4.4
我已经整理到了requirements.txt,大家直接使用命令
pip install -r requirements.txt
即可一键安装项目依赖,其中的torch和torchvision只要匹配即可,不一定非要和博主开发环境的版本一致。
2.项目结构
很多小伙伴担心拿到代码后项目看不懂,这个大家不必担心,我们采用文件+类名对相关功能进行了模块化定义,大家见名知意。
下图博主采用tree命令生成了文件、目录树
bash
tree "D:\projects\gitee\2026\yolo_projects\yolov8-floating-garbage-detect" /f /a
bash
D:\PROJECTS\GITEE\2026\YOLO_PROJECTS\yolov8-floating-garbage-detect
| main.py
| record.txt
| requirements.txt
|
+---data
| +---database
| | data.db
| |
| +---db
| | db.csv
| |
| +---font
| | hanyi_yahei.ttf
| |
| |
| \---model
| best.pt
| yolov8n.pt
+---script
| create_qrc.py
|
\---src
+---conf
| style_conf.py
| system_conf.py
| test_data.py
| __init__.py
|
+---engine
| engines.py
| __init__.py
|
+---resource
| | resource.qrc
| | resource_rc.py
| | __init__.py
| |
| +---imgs
| | ai.gif
| | ai.svg
| | bg.jpeg
| | login_gif.gif
| |
| \---js
| echarts.min.js
|
+---threads
| main_threads.py
| signal_bus.py
| __init__.py
|
+---utils
| custom_utils.py
| __init__.py
|
\---widgets
base_widgets.py
custom_pages.py
custom_widgets.py
main_page.py
unique_widgets.py
__init__.py

3.项目启动
本系统的项目启动十分简单:在安装好所有相关依赖之后,直接执行 main.py 文件,即可自动打开系统的登录注册页面。用户进入该页面后,通过输入匹配的用户名和密码完成登录操作。为方便初次体验,系统内置了一个默认账号,用户名为 admin,密码也为 admin,用户可以直接使用这组账号进行快速登录。当用户成功登录后,系统主界面会完整展示出来,而之前的登录注册页面则会自动隐藏,从而为用户提供清晰、流畅的操作体验。
4.往期优秀作品
七.总结
基于PyQt+YOLO+DeepSeek的水面垃圾检测系统是一套融合人工智能、计算机视觉与智能交互技术的环保监测平台。该系统利用YOLO深度学习目标检测算法,实现对图像、视频以及实时视频流中水面漂浮垃圾的自动识别、定位与分类,并通过PyQt构建直观友好的可视化操作界面,方便用户进行实时监控和检测结果管理。同时,结合DeepSeek智能分析能力,系统能够进一步提升数据处理与智能决策水平,为水环境治理提供辅助支持。该项目有效解决了传统人工巡检效率低、实时性不足以及覆盖范围有限等问题,可广泛应用于城市河道、湖泊、水库、港口、无人机巡检以及智能清洁设备等场景。通过人工智能技术赋能生态环境保护,系统提高了水面垃圾发现与处理效率,推动水域管理向自动化、智能化和数字化方向发展,对智慧环保建设和水生态保护具有重要应用价值。
本次给大家介绍了我使用PyQt5+YOLOv8+DeepSeek的船只检测系统,本系统功能强大,支持多种数据源输入,包含多种用户交互按钮以及模式,内置数据可视化方案、大模型AI加持,是您学习、工作使用的不错选择!
需要代码的朋友可以点击箭头下方的二维码加我好友,欢迎您了解!
如需帮助请私聊博主!






