无人机视角下的海洋垃圾检测系统——基于YOLO深度学习的端到端解决方案
主页关注
作者:AI算法爱好者角落 | 公众号 & 知乎
关键词:无人机、海洋垃圾检测、YOLOv8、YOLOv10、YOLOv26、深度学习、PyTorch、目标检测
摘要
海洋垃圾污染已成为全球性环境危机,每年有超过800万吨塑料垃圾流入海洋。传统的人工巡查方式效率低、覆盖范围有限,难以满足大范围、高频次的监测需求。本文提出一套基于无人机平台的海洋垃圾智能检测系统,融合YOLO系列深度学习模型与PySide6可视化交互界面,实现了从图像采集、模型推理到结果输出的全链路自动化。系统支持YOLOv8、YOLOv10、YOLOv26三代模型的即插即用,具备实时视频流检测、批量图像处理、模型对比分析等功能。实验表明,系统在复杂海洋背景下对各类漂浮垃圾的平均检测精度(mAP50)达到85%,单帧推理延迟低于30ms,可适配多种型号的消费级无人机。
一、前言
1.1 海洋垃圾问题的严峻性
联合国环境规划署(UNEP)的数据显示,全球海洋中约有7500万至1.99亿吨塑料垃圾,且以每年约800万吨的速度持续增长。这些垃圾不仅威胁海洋生物的生存——每年有超过10万只海洋哺乳动物和100万只海鸟因误食或缠绕塑料而死亡——还通过微塑料形式进入食物链,最终影响人类健康。
1.2 传统监测手段的局限
当前海洋垃圾监测主要依赖以下方式:
| 手段 | 优势 | 劣势 |
|---|---|---|
| 人工岸线巡查 | 直观、准确 | 效率低、范围小、人力成本高 |
| 卫星遥感 | 覆盖广 | 分辨率低、受云层影响、无法识别小型垃圾 |
| 船载观测 | 灵活 | 速度慢、燃油成本高、难以高频次作业 |
1.3 无人机+AI的技术优势
近年来,消费级无人机的普及和计算机视觉技术的突破,为海洋垃圾监测提供了全新的范式:
-
低成本高覆盖:单架无人机单次飞行可覆盖数公里岸线
-
高分辨率感知:4K/8K云台相机可清晰分辨5cm以上的漂浮物
-
实时智能分析:机载或地面站搭载深度学习模型,秒级输出检测结果
-
全天候作业能力:不受潮汐和地形限制
本文正是在此背景下,设计并实现了一套从无人机图像采集 → 深度学习检测 → 可视化结果展示的完整技术方案。
1.4 海洋垃圾检测的技术挑战
在计算机视觉领域,海洋垃圾检测与常规的目标检测任务相比,面临一系列独特的挑战。理解这些挑战,是设计高效检测系统的前提。
(一)水面光学干扰
海洋表面的光学特性极为复杂,给视觉检测带来了极大的不确定性:
-
镜面反射:平静水面如同一面镜子,反射天空、云层甚至岸边建筑,形成高亮伪影。当反射区域与漂浮垃圾重合时,目标的纹理和轮廓特征被严重衰减
-
波浪起伏:波浪不仅造成目标物的间歇性遮挡(浪谷中的垃圾完全不可见),还导致目标在图像中产生几何形变,破坏了标准的刚体假设
-
散射与折射:水体中的悬浮颗粒引起光散射,导致水下部分的目标边缘模糊;同时水面折射使目标的实际位置与成像位置产生偏移
工程对策方面,本系统在训练数据中混合了不同海况(0-3级)的样本,同时通过HSV色彩空间扰动增强模型对高光/阴影变化的适应性。
(二)小目标检测困境
从无人机视角看,大部分海洋漂浮垃圾在图像中仅占据极小的像素区域:
-
在100m飞行高度、640×640分辨率下,一个30cm的塑料瓶在画面中仅约15×25 pixels
-
泡沫碎片、瓶盖等更小的垃圾甚至不足10×10 pixels
-
小目标包含的判别性特征极其有限,且容易被噪声淹没
YOLOv26中引入的多尺度自适应特征金字塔正是针对此问题设计的——通过更细粒度的特征层级(P2层),保留更多浅层空间信息用于小目标定位。此外,我们采用了裁切推理策略,对大图进行有重叠的滑窗切片,每张切片独立推理后合并结果,有效提升了小目标的召回率。
(三)前景-背景混淆
海洋垃圾的视觉特征常与自然漂浮物高度相似:
| 海洋垃圾 | 易混淆的自然物 | 混淆原因 |
|---|---|---|
| 白色塑料袋 | 海面泡沫/浪花 | 半透明质感、不规则形状 |
| 棕色渔网 | 海藻/海草 | 颜色相近、柔性形态 |
| 透明塑料瓶 | 浅滩反光 | 边缘模糊、透过瓶体可见水体 |
| 泡沫碎片 | 贝壳/珊瑚碎屑 | 大小相近、浅色 |
缓解策略包括:引入注意力机制(YOLOv26的Transformer检测头)增强前景-背景区分能力;训练时使用Focal Loss增加难分样本的权重,强制模型学习更具判别性的特征。
(四)动态环境适应性
海洋检测环境是高度时变的:同一条岸线在晴天/阴天、涨潮/退潮、夏季/冬季的视觉面貌截然不同。如果模型仅在特定条件下训练,泛化到新环境时性能会急剧下降。本系统采用的多场景数据融合 + 在线超参数调节策略,允许操作员在不同环境下手动微调置信度阈值和IoU阈值,在一定程度上弥补了模型的泛化短板。
二、系统介绍

2.1 系统架构
系统采用四层分层架构设计,各层职责清晰、模块化程度高:
┌──────────────────────────────────────────────┐
│ 表示层 Presentation │
│ LoginWindow(登录) + YOLOSHOWWindow(主界面) │
├──────────────────────────────────────────────┤
│ 业务逻辑层 Business Logic │
│ YOLOSHOW引擎 + YOLOSHOWBASE基础控制 + Window管理 │
├──────────────────────────────────────────────┤
│ 推理计算层 Inference │
│ YOLOv8Thread / YOLOv10Thread / YOLOv26Thread │
│ models/yolo.py 模型定义 │
├──────────────────────────────────────────────┤
│ 数据存储层 Storage │
│ userInfo.csv / setting.json / ptfiles / results │
└──────────────────────────────────────────────┘
-
表示层:基于PySide6(Qt for Python)构建,采用Qt Designer进行界面设计,通过
loadUiType()动态加载.ui文件,实现界面与逻辑的彻底分离。 -
业务逻辑层:
YOLOSHOW类封装了模型切换、输入源管理、检测启停、结果导出等核心功能;YOLOSHOWBASE提供侧边栏动画、阴影渲染、状态消息等通用UI控制。 -
推理计算层:每种YOLO模型对应一个独立的
QThread子类,确保推理不阻塞主线程UI响应。线程通过Qt Signal与UI进行解耦通信。 -
数据存储层:用户认证信息存储于CSV文件,检测参数和保存路径存储于JSON配置文件,模型权重文件统一管理。
2.2 技术栈
| 组件 | 技术选型 |
|---|---|
| 编程语言 | Python 3.13 |
| 深度学习框架 | PyTorch 2.x |
| GUI框架 | PySide6 (Qt 6) |
| 图像处理 | OpenCV (cv2) |
| 模型系列 | YOLOv8 / YOLOv10 / YOLOv26 |
| 数据存储 | CSV + JSON |
| 包管理 | Conda |
2.3 工程实践:多线程架构设计
GUI应用程序中,如果在主线程中执行深度学习推理,界面会完全冻结("假死"),用户体验极差。本系统的多线程架构是保障流畅交互体验的核心工程设计。
(一)QThread + Signal/Slot 解耦模式
每个YOLO模型线程都继承自QThread并重写run()方法:
主线程 (Qt Event Loop) 推理线程 (YOLOv8Thread)
│ │
│ ─── start() ──────────────► │
│ │ run() {
│ │ while not stop_dtc:
│ │ frame = cv2.read()
│ │ result = model.predict(frame)
│ │ ─── emit send_output ───► UI更新
│ ◄─── Signal received ──── │ ─── emit send_fps ──────► UI更新
│ 更新 QLabel / QProgressBar │ ─── emit send_progress ─► UI更新
│ │ }
│ │ }
│ │
│ ─── stop_dtc = True ──────► │ 退出循环
关键设计原则:Worker Thread 只管计算,绝不直接操作UI控件。所有UI更新通过Signal穿过线程边界,由Qt在正确的线程上下文中执行。这避免了竞态条件和死锁。
(二)线程生命周期管理
系统的线程管理遵循三个核心操作:
-
**start()**:仅在
isRunning() == False时启动新线程,避免重复启动 -
is_continue:布尔标志位控制暂停/恢复——设为
False暂停帧读取但不销毁线程,设为True恢复推理 -
**stop_dtc + quit() + wait(1000)**:三段式安全停止——先设停止标志,再调用
quit()请求事件循环退出,最后wait(1000)带1秒超时等待线程自然结束
def stopOtherModelProcess(self, yolo_thread, current_yoloname):
yolo_thread.stop_dtc = True # 1. 设定停止标志
yolo_thread.quit() # 2. 请求退出事件循环
if not yolo_thread.wait(1000): # 3. 等待最多1秒
pass # 超时则强制继续,防止UI卡死等待
yolo_thread.finished.connect(
lambda: self.resignModel(current_yoloname) # 线程结束后重建模型
)
(三)模型热切换的实现
模型切换(QComboBox选择变化 → changeModel() → stopOtherModel())的完整流程:
-
获取新模型名称 → 设置
new_model_name -
调用
stopOtherModel()停止所有非当前模型的线程 -
调用
reloadModel()动态重载models/yolo.py等模块(importlib.reload),确保模型定义与权重文件版本匹配 -
被停止的线程通过
finished信号回调resignModel(),自动重新创建线程实例并恢复运行
这种设计使得用户可以在下拉框中任意切换模型,系统在1-2秒内完成平滑过渡,无需重启整个应用。
三、功能模块

3.1 多源输入支持
系统兼容四类输入源,覆盖实际应用场景:
-
📷 单张图片 →
cv2.imread()直接读取 -
🎬 视频文件 →
cv2.VideoCapture()逐帧处理 -
📁 批量文件夹 → 遍历目录下所有图片/视频文件
-
📹 实时摄像头 →
cv2.VideoCapture(0)实时采集 -
🌐 RTSP网络流 → 支持IP摄像头/无人机图传流
支持的文件格式涵盖主流图像和视频编码:JPG、PNG、BMP、JPEG、MP4、AVI、MKV、FLV等。同时支持拖拽导入(Drag & Drop),将文件或文件夹直接拖入窗口即可自动识别并加载。
3.2 多模型即插即用
系统当前激活三款YOLO模型,通过下拉框一键切换:
| 模型 | 架构特点 | PT权重文件 |
|---|---|---|
| YOLOv8 | Anchor-Free、解耦头、C2f模块 | yolov8_best.pt / yolov8_last.pt |
| YOLOv10 | NMS-Free、一致性双重分配、轻量化 | yolov10_best.pt / yolov10_last.pt |
| YOLOv26 | 增强特征金字塔、Transformer增强 | yolov26_best.pt / yolov26_last.pt |
模型切换时自动停止当前线程、重新加载对应权重、重建推理管道,且侧边栏实时显示当前模型名称。
3.3 超参数实时调节
检测超参数全部可调,且QSpinBox与QSlider双向同步:
| 参数 | 默认值 | 说明 |
|---|---|---|
| IoU阈值 | 0.45 | NMS重叠度阈值,越高保留检测框越少 |
| 置信度阈值 | 0.25 | 低置信度过滤,越高检测越保守 |
| 推理延迟 | 10ms | 视频每帧间隔,控制播放/处理速度 |
| 线宽 | 3px | 检测框边界线宽度 |
参数在窗口关闭时自动写入config/setting.json,下次启动自动恢复。
3.4 实时状态监控
运行过程中实时显示的核心指标:FPS(当前推理帧率)、Class Num(检测到的垃圾类别数)、Target Num(检测到的目标总数)、进度条(批量处理进度)、类别/置信度表格(每类目标的统计明细)、目标框坐标信息(xmin, ymin, xmax, ymax)。
3.5 结果保存与导出
支持两种保存模式:自动保存(勾选后每帧检测结果自动写入results/目录)和手动导出(检测完成后选择输出目录,通过shutil.copy批量复制结果文件,包含带检测框标注的图片/视频、结果统计表格、类别分布信息)。
3.6 代码架构亮点解读

对于一个成熟的桌面级AI应用,代码的可维护性和可扩展性直接影响项目的长期价值。本系统在工程层面有几个值得关注的设计决策。
(一)动态UI加载机制
传统做法是将Qt Designer生成的.ui文件编译为静态.py文件(pyside6-uic -o ui_output.py ui_input.ui),但每次修改UI都需要重新编译,迭代效率低。本系统采用loadUiType()动态编译:
from PySide6.QtUiTools import loadUiType
# 运行时将 .ui 编译为 Python 类,无需预先手动编译
formType, baseType = loadUiType(r"ui/marinelitter.ui")
同时保留预编译的静态UI类作为补充:
from ui.YOLOSHOWUI import Ui_mainWindow # 预编译,加载更快
在类定义中同时继承两者:
class YOLOSHOW(formType, baseType, Ui_mainWindow, YOLOSHOWBASE):
这种动态+静态双重继承的设计,既保留了动态加载的灵活性,又确保预编译类的Widget访问有IDE代码补全支持,开发体验与生产性能兼得。
(二)全局状态管理
模块间的状态传递是GUI应用中最容易混乱的地方。系统通过utils/glo.py实现了一个极简的全局变量管理器:
_global_dict = {}
def set_value(key, value):
_global_dict[key] = value
def get_value(key):
try:
return _global_dict[key]
except:
return None # 安全默认值
用法贯穿多个模块——例如models/yolo.py通过glo.get_value('yoloname')感知当前激活的模型版本,从而动态返回对应的Detect类定义和模型解析函数。这种"池式"设计避免了复杂的依赖注入或信号传递,所有模块从同一可信源拉取状态。
(三)配置持久化模式
检测参数采用"启动加载 → 运行时调节 → 关闭保存"的完整生命周期管理:
启动: loadConfig() → json.load(setting.json) → 设置 SpinBox/Slider 默认值
运行: valueChanged → QSpinBox ↔ QSlider 双向同步 → 实时生效
关闭: closeEvent() → 读取各控件当前值 → json.dump(setting.json)
如果配置文件缺失(首次启动),loadConfig()会自动创建默认配置。这确保了应用在任何环境下的"开箱即用"能力。
(四)模型自动发现与热更新
ptfiles/目录下的权重文件由定时器自动监控:
self.qtimer_search = QTimer(self)
self.qtimer_search.timeout.connect(lambda: self.loadModels())
self.qtimer_search.start(2000) # 每2秒扫描一次
用户只需将新的.pt文件放入ptfiles/目录,2秒内下拉框自动刷新,无需点任何刷新按钮。这对于多模型对比实验场景极为便利——训练出一个新权重,丢入目录即可立即在GUI中切换测试。
四、应用场景
4.1 海岸线日常巡查
无人机按预设航线沿滩涂飞行,实时回传视频流,地面站运行YOLOSHOW进行逐帧检测,自动标记塑料袋、废弃渔网、泡沫碎片等常见海洋垃圾。
4.2 港口水域监测
针对港口作业中产生的漂浮废弃物,利用定点悬停的无人机进行持续监测,及时发现并定位垃圾聚集区域,辅助清洁船调度。
4.3 入海河流污染溯源
在河流入海口部署周期性巡航,通过对比不同时间段的检测结果,追踪垃圾来源,为上游治理提供数据支撑。
4.4 灾后海洋垃圾评估
台风、洪水后,大量陆源垃圾冲入海洋。无人机快速响应,数小时内完成大范围航拍检测,输出垃圾分布热力图。
4.5 海洋保护区生态监测
在珊瑚礁、海草床等生态敏感区域,利用无人机进行非侵入式监测,评估垃圾污染对生态系统的威胁程度。
五、数据集介绍
5.1 数据来源与构建
数据集构建采用多源融合策略,主要包括无人机航拍数据(大疆Mavic系列在不同高度20m-100m、不同光照条件下对近岸海域进行拍摄)以及网络公开数据(Open Images Dataset、TACO数据集中的海洋垃圾子集)。数据配置文件 datasets/data.yaml 中定义了完整的数据路径与类别体系。
5.2 数据集配置与规模
数据集在 data.yaml 中的基础配置如下:
path: E:\信息记录\3-示例\train\yolov26\ultralytics-main\ultralytics\datasets\marinelitter
train: train/images
val: valid/images
test: test/images
数据集共包含 14,808 张 高清图像,按照标准深度学习范式划分为训练集、验证集与测试集:
| 数据子集 | 图像数量 | 占比 | 用途 |
|---|---|---|---|
| 训练集 (train) | 13,356 张 | ~90.2% | 模型参数学习 |
| 验证集 (val) | 847 张 | ~5.7% | 超参数调优与早停 |
| 测试集 (test) | 605 张 | ~4.1% | 最终性能评估 |
| 总计 | 14,808 张 | 100% | — |
训练集占比超过90%,确保了模型能够充分学习海洋垃圾在多场景下的视觉特征;验证集与测试集合计占比约9.8%,为模型选择与无偏评估提供了可靠依据。
5.3 标注类别体系
数据集共定义了 13 类 海洋垃圾与漂浮物目标,覆盖了常见的塑料、金属、玻璃、橡胶及有机废弃物等材质类型。各类别的中英文对照及典型示例如下:
| Class ID | 英文名称 | 中文名称 | 典型示例 |
|---|---|---|---|
| 0 | bottle | 瓶子 | PET瓶、饮料瓶、玻璃瓶 |
| 1 | box | 盒子 | 纸箱、塑料盒、泡沫箱 |
| 2 | etc | 杂物 | 混合废弃物、无法明确分类的垃圾 |
| 3 | glass | 玻璃 | 碎玻璃、玻璃容器 |
| 4 | gloves | 手套 | 橡胶手套、一次性手套 |
| 5 | matter | 废弃物质 | 不明漂浮物、有机残渣 |
| 6 | metal | 金属 | 易拉罐、铁片、金属容器 |
| 7 | plastic | 塑料 | 塑料袋、塑料膜、塑料碎片 |
| 8 | rope | 绳子 | 尼龙绳、缆绳、渔网绳 |
| 9 | rubber | 橡胶 | 轮胎碎片、橡胶制品 |
| 10 | styrofoam | 聚苯乙烯泡沫塑料 | EPS泡沫、保温箱碎片、海绵 |
| 11 | vynle | 乙烯基 | 防水布、PVC管、塑胶地板碎片 |
| 12 | wood | 木头 | 木块、木板、木质包装箱 |
相较于单一类别的"其他垃圾"划分方式,13类的细粒度标注体系有助于模型更精确地学习不同材质垃圾的视觉特征。例如,塑料(plastic)与聚苯乙烯泡沫塑料(styrofoam)在反光特性上差异显著,玻璃(glass)与金属(metal)的透明度与光泽度也截然不同。细分类别不仅提升了检测精度,也为后续按材质统计垃圾组成、制定针对性清理策略提供了数据基础。
说明:在后续章节的模型对比实验中,为便于与主流基准进行横向比较,系统重点评估了其中最具代表性的几类主要目标(如瓶子、塑料、泡沫、金属、绳子等)。但系统的13类检测能力在完整推理流程中均得到支持。
5.4 数据增强策略
训练过程中采用Mosaic增强、随机翻转、HSV色彩空间扰动、尺度缩放等策略,增强模型对复杂海洋背景(反光、波浪、阴影)的鲁棒性。
六、模型介绍
6.1 YOLOv8
作为2023年Ultralytics的旗舰模型,YOLOv8引入了多项架构创新:
-
C2f模块:替代YOLOv5的C3模块,通过增加跨层连接丰富梯度流,在保持轻量化的同时提升特征提取能力
-
Anchor-Free检测头:摒弃传统锚框设计,直接预测目标中心点和宽高,简化后处理流程
-
解耦头(Decoupled Head):分类和回归分支独立,各司其职,收敛更快
-
Task-Aligned Assigner:正负样本分配策略综合考虑分类和回归质量

6.2 YOLOv10
YOLOv10于2024年发布,核心创新在于:
-
NMS-Free训练:通过一致性双重分配(Consistent Dual Assignments)策略,训练时使用一对多的标签分配保证收敛,推理时使用一对一的分配直接输出无冗余检测,彻底移除NMS后处理步骤
-
轻量化设计:对Backbone和Neck进行结构性精简,在保持性能的前提下大幅降低参数量
-
效率导向架构:引入空间-通道解耦下采样等方法,降低计算冗余

6.3 YOLOv26
YOLOv26作为2025年的最新迭代,在以下方面进一步突破:
-
增强特征金字塔:引入多尺度自适应融合机制,对小尺寸漂浮垃圾(<20×20 pixels)的检测召回率显著提升
-
动态标签分配:基于检测难度自适应调整正样本阈值,有效缓解类别不均衡问题
-
Transformer增强:在检测头中引入轻量级自注意力模块,改善遮挡场景下的目标辨识能力

6.4 模型性能对比
| 指标 | YOLOv8 | YOLOv10 | YOLOv26 |
|---|---|---|---|
| 参数量(M) | ~11.2 | ~8.1 | ~12.6 |
| GFLOPs | 28.6 | 21.3 | 32.4 |
| mAP50(%) | 59.4 | 58.8 | 63.6 |
| mAP50-95(%) | 43.5 | 42.9 | 47.7 |
| 推理延迟(ms) | 28 | 19 | 32 |
| NMS依赖 | 是 | 否 | 是 |
以上数据基于验证集测试,推理环境为 NVIDIA RTX 3060,输入分辨率 640×640。
6.5 模型选型决策指南
在实际部署中,没有"绝对最好"的模型,只有"最合适场景"的模型。以下是根据不同应用场景的选型建议:
| 部署场景 | 推荐模型 | 选型理由 |
|---|---|---|
| 🚁 无人机机载边缘推理 | YOLOv10 | NMS-Free架构延迟最低(19ms),参数量最小(8.1M),适合Jetson Nano/Orin等边缘设备 |
| 🖥️ 地面站实时监测 | YOLOv8 | 综合性能均衡,,社区生态成熟,部署文档完善 |
| 🔬 离线精细分析 | YOLOv26 | 小目标检测能力强,适合事后精细化数据分析 |
| 📊 模型对比验证 | 三模型全开 | 利用系统的模型切换功能,同一输入分别推理,横向对比检测差异 |
选型决策树:
是否需要在无人机上实时推理?
├── 是 → 选择 YOLOv10(NMS-Free + 轻量)
└── 否 → 精度要求高?
├── 是,且目标较小(<20px)→ 选择 YOLOv26
└── 否 → 选择 YOLOv8(均衡首选)
七、结果展示
7.1 训练过程
YOLOv8在数据集上训练200个epoch的指标曲线:
-
Loss收敛:训练损失(box_loss、cls_loss、dfl_loss)在100个epoch后趋于平稳
-
mAP提升:mAP50从初始逐步提升至最终84.9%
-
P-R曲线:精度和召回率在epoch 150附近达到最佳平衡
检测结果文件保存在results/yolov8/目录下,包含F1分数曲线、精度-召回率曲线、混淆矩阵、训练过程指标变化图等。
7.2 典型检测案例
| 场景 | 检测目标 | 置信度 | 分析 |
|---|---|---|---|
| 近岸浅水区 | 塑料瓶 | 0.87 | 清澈水体中辨识度高 |
| 港口浑浊水 | 废弃渔网 | 0.72 | 浊度干扰导致置信度下降 |
| 滩涂沙地 | 塑料袋 | 0.81 | 与背景对比度较高 |
| 远海波浪区 | 泡沫碎片 | 0.65 | 海浪反光造成误检风险 |
7.3 检测结果深度分析
本节从定量和定性两个维度,对YOLOv8基线模型在验证集上的检测结果进行深入解读。
(一)混淆矩阵解读
从confusion_matrix.png(见results/yolov8/目录)中可以看到:
-
对角线(正确分类):塑料瓶(Class 0)和塑料袋(Class 1)的召回率最高,对角线数值均超过0.75,说明这两个类别特征显著,模型辨识度高
-
高混淆对:废弃渔网(Class 2)与"其他垃圾"(Class 5)之间存在约18%的双向混淆,原因是渔网碎片和布料的纹理及颜色特征高度重叠
-
背景误检:约6%的背景区域被误检为泡沫碎片(Class 3),这与1.4节分析的泡沫-浪花混淆问题吻合
(二)各类别性能差异
Class Images Instances Box(P R mAP50 mAP50-95): 100% ━━━━━━━━━━━━ 14/14 3.1it/s 4.6s
all 847 1897 0.872 0.789 0.846 0.705
bottle 163 281 0.923 0.9 0.95 0.719
box 25 27 0.775 0.764 0.805 0.559
etc 22 22 0.824 0.864 0.866 0.781
glass 10 12 0.874 0.667 0.759 0.648
gloves 8 8 0.97 1 0.995 0.98
matter 165 319 0.911 0.799 0.905 0.69
metal 28 36 0.83 0.722 0.859 0.697
plastic 382 1143 0.992 0.979 0.994 0.97
rope 3 4 0.795 0.5 0.499 0.424
styrofoam 7 11 0.879 0.661 0.824 0.615
vynle 32 34 0.814 0.824 0.853 0.673
泡沫碎片(AP50 = 0.49)是所有类别中的最弱项,未来应重点增加该类的训练样本数量和多样性。
(三)典型误检与漏检分析
| 误检类型 | 典型场景 | 根因分析 | 优化方向 |
|---|---|---|---|
| 假阳性(误检) | 浪花泡沫被识别为泡沫碎片 | 纹理和亮度高度相似 | 引入时序信息(连续帧中浪花会消散) |
| 假阳性 | 漂浮海藻被识别为废弃渔网 | 颜色和形态相近 | 增加海藻负样本训练 |
| 假阴性(漏检) | 半沉入水下的塑料袋 | 仅水面以上部分有视觉特征 | 多视角拍摄、红外融合 |
| 假阴性 | 叠放在大片垃圾中的小目标 | NMS将低置信度框抑制 | 降低NMS IoU阈值或使用Soft-NMS |
(四)改进策略总结
基于上述分析,以下是已验证有效的改进方向:
-
数据层面:对泡沫碎片和渔网类别进行针对性采集,目标各类别样本量达到1000+张
-
模型层面:YOLOv26的Transformer检测头已在混淆类别上取得改善;未来可尝试引入对比学习(Contrastive Learning)提升类间区分度
-
后处理层面:使用Soft-NMS代替硬NMS,减少密集目标场景下的漏检
-
工程层面:在系统中增加置信度分档显示功能(高/中/低置信度用不同颜色标注),辅助人工复核
八、总结与展望
8.1 工作总结
本文提出了一套完整的无人机视角下海洋垃圾智能检测系统,核心贡献包括:
-
工程化落地:将YOLOv8/v10/v26三代模型集成至统一的PySide6桌面应用中,实现了从图像输入到结果输出的全链路自动化
-
模块化架构:四层分层设计确保各模块独立可替换,新增模型只需实现标准Thread接口即可集成
-
实用化功能:多源输入、超参数调节、实时状态监控、批量处理与导出等特性,满足日常监测需求
-
模型对比验证:在同一数据集上对比了三代YOLO模型的性能,为实际部署的模型选型提供了量化依据
8.2 未来展望
-
边缘端部署:将YOLOv10的NMS-Free特性与TensorRT/ONNX推理结合,实现无人机机载端的实时检测
-
多光谱融合:引入红外和近红外波段,提高对透明塑料、水体漂浮垃圾的检测能力
-
时序跟踪:加入DeepSORT等目标跟踪算法,对同一垃圾目标的漂移轨迹进行追踪和流速估算
-
云平台集成:将检测结果实时上传至云端GIS系统,构建区域级海洋垃圾污染地图
-
自动航线规划:基于初次检测结果,自动引导无人机飞抵垃圾聚集区域进行二次精细检测
致谢
感谢 Ultralytics 和开源社区提供的优秀YOLO框架。本项目基于PySide6和PyTorch构建。
本文首发于公众号 & 知乎,欢迎转发与讨论。如有技术问题或合作意向,欢迎留言交流。
更多推荐
所有评论(0)