首页/新闻资讯/正文详情

海底垃圾检测数据集:1000张真实图像与YOLO11训练全攻略

发布时间:2026/9/23 16:43:24 来源:云帆数科 栏目:资讯中心
海底垃圾检测数据集:1000张真实图像与YOLO11训练全攻略
简介这份资源面向从事水下视觉与目标检测的开发者、科研人员及学生提供一套真实拍摄的海洋海底垃圾检测数据集可用于海底监控场景下的垃圾识别项目也可作为通用水下垃圾检测数据的补充。数据集共1000张高质量图像覆盖海底塑料、铁罐、纸张等垃圾以及海洋生物、水下探测器与垃圾同框、打光拍摄等多种场景标注包含plastic、bio、rov、metal、paper、wood、rubber、timestamp、unknown九个类别采用labelimg标注质量较高。资源以PDF形式交付文件总数1个大小约2.77MB内附数据集基本情况介绍与获取方式并同步提供VOC、COCO、YOLO三种标签格式可直接用于YOLO等算法训练。此外还附赠YOLO11一键训练脚本支持GPU、CPU及Mac芯片多平台方案并给出博主训练结果日志供参考。目前已有540人学习适合希望快速开展水下垃圾检测实验的读者。1. 海底垃圾检测数据集1000 张真实图像与三格式标签的落地价值做水下目标检测的同行大多有过这种体验公开数据集里找海底塑料、金属罐、ROV 同框的样本翻遍 COCO、VOC 也凑不齐几百张最后只能自己扛着相机下水或者去视频里抽帧。这份海洋垃圾检测数据集就是冲着这个缺口来的——1000 张真实拍摄的海底场景图像覆盖塑料、生物、水下探测器、金属制品、纸张、木头、手套、时间条、未知共九个类别并且一次性给出 VOC(xml)、COCO(json)、YOLO(txt) 三种标签格式。它解决的不是有没有数据的问题而是拿到就能直接喂给 YOLO 训练的问题。适合做海底监控垃圾识别、水下机器人视觉、以及需要小目标检测补充样本的团队。下面按数据本身、格式转换、训练脚本、踩坑、进阶验证的顺序拆开讲。2. 数据构成与标签体系九个类别怎么用才不浪费2.1 场景分布与类别定义这批数据的采集场景比想象中杂。除了常规的海底塑料垃圾还有铁制品罐状垃圾、纸张、木头、橡胶手套以及容易被忽略的两类非垃圾目标bio海洋生物和 rov水下探测器。另外 timestamp时间条和 unknown未知这两个标签是很多人在训练时直接删掉、结果模型在真实视频里频繁误检的根源。先把九个类别的实际含义对齐一下类别名含义训练建议plastic塑料垃圾主目标保留bio海洋生物保留避免误检为垃圾rov水下探测器保留同框干扰项metal金属制品主目标保留paper纸张主目标保留wood木头主目标保留rubber手套主目标保留timestamp时间条建议保留或单独成类unknown未知视项目决定是否合并为什么建议保留 bio 和 rov因为海底监控的真实画面里鱼群和探测器出现的频率极高。如果训练集里没有这些负样本模型会把游动的鱼当成塑料垃圾把 ROV 的机械臂当成金属罐。这是水下检测最常见的翻车点不是模型不行是类别体系没设计好。timestamp 这个类别比较特殊。它是视频抽帧时叠在画面上的时间戳文字标注出来是为了让模型学会忽略它。如果你的推理场景是单张图片而非视频帧可以把它合并进 unknown 或者直接删除但如果是视频流检测保留它反而能降低误报。2.2 三种格式的目录结构与选用逻辑数据集同时提供 VOC、COCO、YOLO 三种格式不是让你三个都用而是对应不同的训练框架和验证需求。常见做法是YOLO 系列训练直接用 txt 格式做 benchmark 对比或者跑 MMDetection、Detectron2 时用 COCO json需要和旧项目对接或者用 labelImg 复查标注时用 VOC xml。三种格式的典型目录长这样# YOLO 格式 dataset_yolo/ ├── images/ │ ├── train/ │ └── val/ ├── labels/ │ ├── train/ │ └── val/ └── data.yaml # VOC 格式 dataset_voc/ ├── JPEGImages/ ├── Annotations/ └── ImageSets/Main/ # COCO 格式 dataset_coco/ ├── images/ └── annotations/ ├── instances_train.json └── instances_val.jsonYOLO 的 txt 每行是class_id x_center y_center width height坐标全部归一化到 0~1。VOC 的 xml 存的是绝对像素坐标的 xmin/ymin/xmax/ymax。COCO 的 json 里 bbox 是[x, y, width, height]绝对像素同时还有 segmentation 和 area 字段。这三种格式之间转换时最容易出错的就是归一化和绝对坐标的混用以及类别 id 从 0 还是 1 开始。提示YOLO 的类别 id 从 0 开始VOC 和 COCO 的类别 id 通常从 1 开始。转换脚本里如果没做偏移训练时会出现类别整体错位loss 降不下去但也不报错属于典型的玄学问题。2.3 标注质量与 labelImg 复查方法数据用 labelImg 标注质量整体在线但 1000 张里难免有个别框偏移或者漏标。拿到数据后建议先做一轮可视化抽查不用全看随机抽 50 张就够。用下面这段脚本把 YOLO 格式的标签画回图上import cv2 import os import random img_dir dataset_yolo/images/train lbl_dir dataset_yolo/labels/train names [plastic, bio, rov, metal, paper, wood, rubber, timestamp, unknown] samples random.sample(os.listdir(img_dir), 50) for img_name in samples: img cv2.imread(os.path.join(img_dir, img_name)) h, w img.shape[:2] lbl_path os.path.join(lbl_dir, img_name.rsplit(., 1)[0] .txt) if not os.path.exists(lbl_path): continue with open(lbl_path) as f: for line in f: cid, xc, yc, bw, bh map(float, line.split()) # 归一化坐标还原为像素坐标 x1 int((xc - bw / 2) * w) y1 int((yc - bh / 2) * h) x2 int((xc bw / 2) * w) y2 int((yc bh / 2) * h) cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2) cv2.putText(img, names[int(cid)], (x1, y1 - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1) cv2.imwrite(fcheck_{img_name}, img)这段脚本的逻辑很直接读图、读对应 txt、把归一化坐标乘回宽高得到像素框、画框写类别名。参数上唯一要注意的是names列表的顺序必须和data.yaml里的names完全一致否则画出来的类别名会张冠李戴。跑完看check_开头的图如果发现框明显偏了或者类别标错就回到 labelImg 里改对应的 xml 或 txt。3. YOLO11 一键训练脚本三平台参数怎么设3.1 脚本结构与平台判断逻辑附赠的训练脚本核心目标是一套代码跑通 GPU、CPU、Mac 三种环境。它的思路不是写三份脚本而是在入口处做设备探测然后动态调整 batch size、workers 和 AMP 开关。常见做法是用torch.cuda.is_available()判断 GPU用platform.processor()或torch.backends.mps.is_available()判断 Mac 的 M 芯片。一个典型的入口逻辑如下import torch import platform from ultralytics import YOLO def pick_device(): if torch.cuda.is_available(): return cuda, 16, 8, True # GPU: batch16, workers8, AMP开 elif torch.backends.mps.is_available(): return mps, 8, 4, False # Mac M芯片: batch8, workers4 else: return cpu, 4, 2, False # CPU: batch4, workers2 device, batch, workers, amp pick_device() print(fdevice{device}, batch{batch}, workers{workers}, amp{amp}) model YOLO(yolo11n.pt) model.train( datadataset_yolo/data.yaml, epochs100, imgsz640, batchbatch, workersworkers, devicedevice, ampamp, patience20, projectruns_ocean, nameexp1 )逻辑说明pick_device()返回四个值设备字符串直接传给 ultralytics 的device参数batch 和 workers 按平台降级GPU 给最大Mac 次之CPU 最小AMP 自动混合精度只在 CUDA 上开因为 MPS 和 CPU 对 AMP 的支持不稳定开了反而可能报错或者掉精度。patience20是早停100 轮里如果 20 轮 mAP 没提升就停省时间。参数怎么改如果你的 GPU 显存小于 8G把 batch 降到 8 或 4如果数据集小、过拟合快把 epochs 降到 50~80imgsz640是默认海底小目标多的话可以试 800 或 1024但显存占用会翻倍。3.2 data.yaml 的写法与路径坑YOLO11 训练最容易被路径坑到。data.yaml里写的是相对路径还是绝对路径直接决定脚本能不能找到图。推荐用绝对路径省得因为工作目录不同而翻车path: /home/user/dataset_yolo train: images/train val: images/val nc: 9 names: 0: plastic 1: bio 2: rov 3: metal 4: paper 5: wood 6: rubber 7: timestamp 8: unknownpath是数据集根目录train和val是相对于path的子路径。nc必须等于names的长度多一个少一个都会在训练启动时报错。names的顺序必须和 txt 里的 class_id 严格对应这个顺序错了模型学到的就是错位的类别mAP 会低得莫名其妙。注意Windows 下路径用反斜杠时yaml 里要写成D:/data/dataset_yolo或者用双反斜杠单反斜杠会被当成转义字符。3.3 三平台实测差异与日志解读GPU 平台是最顺的CUDA AMP 开着1000 张图 100 轮大概几十分钟到一两小时取决于卡。CPU 平台要有心理准备同样配置可能要跑十几个小时甚至更久建议先把 epochs 设成 10 跑通流程确认没问题再放大。Mac M 芯片用 MPS 后端速度介于两者之间但 MPS 对某些算子支持不全如果报NotImplementedError就退回 CPU 跑那部分。博主提供的训练日志主要看三个指标box_loss、cls_loss、mAP50。正常情况 box_loss 和 cls_loss 应该在前 10 轮快速下降然后趋于平缓。如果 loss 一直不降先查 data.yaml 路径和类别数如果 mAP50 卡在很低的值不动大概率是标签格式或者类别 id 错位。日志里还会打印每个类别的 AP如果某个类别 AP 一直是 0说明这个类别的样本太少或者标注有问题需要回去补数据。4. 避坑与排查五个真实踩过的坑4.1 现象训练启动就报 No labels found原因YOLO 找标签的路径逻辑是images替换成labels如果你的目录结构不是标准的images/train和labels/train对应它就找不到。或者 txt 文件和图片没有同名。解决确认图片和标签文件名除了扩展名外完全一致比如001.jpg对应001.txt。目录结构严格按images/train、labels/train来不要自己改成train/images。4.2 现象mAP 一直是 0 或者极低原因最常见的是类别 id 从 1 开始而不是从 0 开始。VOC 转 YOLO 时如果没做 id 偏移所有标签的 class_id 都大了一位而 data.yaml 里 nc9第 9 类直接越界被忽略。解决写个脚本扫一遍所有 txt看 class_id 的最大值是不是等于 nc-1。如果最大值是 9 而 nc9说明 id 从 1 开始了全部减 1。4.3 现象Mac 上训练报 MPS 相关错误原因MPS 后端对某些算子比如某些池化或插值支持不完整ultralytics 在 MPS 上跑时会遇到未实现的算子。解决在训练参数里加devicecpu强制走 CPU或者升级 PyTorch 到较新版本MPS 支持会好一些。速度慢总比跑不起来强。4.4 现象显存溢出 OOM原因batch 设太大或者 imgsz 设太大。1000 张图里如果有高分辨率原图YOLO 会按 imgsz 缩放但 batch 大了一样爆。解决先把 batch 降到 4 或 2跑通再往上加。imgsz 从 640 起步不要一上来就 1280。另外workers设太大也会占内存CPU 平台设 2 就够。4.5 现象验证集 mAP 高但实际推理效果差原因训练集和验证集如果来自同一段视频的相邻帧两边的画面几乎一样验证集 mAP 会虚高。这是数据划分的坑不是模型的锅。解决按视频来源或者场景划分 train/val不要随机按帧划分。如果数据集没提供视频来源信息至少按图像亮度、拍摄角度做分层抽样让验证集覆盖不同场景。5. 进阶验证用置信度门限和混淆矩阵定位真实短板训练跑完不是终点拿到best.pt之后要做两件事调置信度门限、看混淆矩阵。这两步能告诉你模型在真实海底监控里到底能不能用。先看混淆矩阵。YOLO11 训练完会在runs_ocean/exp1/下生成confusion_matrix.png。重点看 bio 和 plastic 之间有没有互相误判以及 rov 有没有被当成 metal。如果 bio 被大量判成 plastic说明负样本不够需要补海洋生物的图像。如果 timestamp 被误判成其他类考虑把它单独拎出来或者直接删掉这个类重新训。再调置信度门限。默认推理是conf0.25但海底场景里小目标多0.25 可能漏检也可能误检。用下面这段脚本在验证集上扫一遍不同门限下的 precision 和 recallfrom ultralytics import YOLO model YOLO(runs_ocean/exp1/weights/best.pt) for conf in [0.1, 0.2, 0.25, 0.3, 0.4, 0.5]: metrics model.val(datadataset_yolo/data.yaml, confconf, iou0.5) print(fconf{conf}, mAP50{metrics.box.map50:.4f}, fprecision{metrics.box.mp:.4f}, recall{metrics.box.mr:.4f})逻辑是固定 iou0.5只变 conf看 mAP50、precision、recall 怎么变。参数上conf越低 recall 越高但 precision 越低实际部署时按业务需求选宁可误报不可漏报就选 0.1~0.2要求准确率高就选 0.3~0.4。iou0.5是 COCO 的标准门限想更严格可以试 0.75。我自己的习惯是每次训完新模型先把混淆矩阵和门限扫描跑一遍再决定要不要补数据或者调参。有次偷懒跳过这步直接拿默认门限去跑海底视频结果塑料垃圾漏检了一大半回头一看 recall 在 0.25 门限下只有 0.4调到 0.15 才拉到 0.7。从那以后我每次拿到新权重都强制走一遍混淆矩阵加门限扫描不省这一步。希望帮到你。本文还有配套的精品资源点击获取

相关推荐

中国黑客联盟官网性能优化:3个源码技巧让项目起飞
中国黑客联盟官网性能优化:3个源码技巧让项目起飞

中国黑客联盟官网性能优化:3个源码技巧让项目起飞 很多开发者学完 Python 或 Java 语法,对着空白的 IDE 发呆。知道 for 循环怎么转,却不知道怎么搭建一个高可用的后端项目。更头疼的是,代码跑通了,一上生产环境就卡成… · 2026/9/23 16:43:24

什么是网络推广?5分钟搞懂核心逻辑与高频面试题
什么是网络推广?5分钟搞懂核心逻辑与高频面试题

什么是网络推广?5分钟搞懂核心逻辑与高频面试题 官方文档翻了三遍还是觉得云里雾里?别急,这种“概念太多、重点难抓”的困境,几乎是每个刚接触新领域的开发者或从业者的通病。很多人把“什么是网络推广”简单理解为发发帖子、投投广告,但这在技术面试或… · 2026/9/23 16:43:24

Java+Vue+Milvus语义文档查重系统:从架构到工程避坑
Java+Vue+Milvus语义文档查重系统:从架构到工程避坑

简介:一个基于Java与Vue的向量数据库语义检索与相似文档查重系统完整设计实例,面向具备Java和Vue基础的后端工程师、架构师及NLP方向技术人员。该方案融合BERT文本向量化、Milvus向量数据库近邻检索及前后端分离架构,覆盖文档上传、语义索引、… · 2026/9/23 16:43:17

笔记本电脑电池使用最佳实践
笔记本电脑电池使用最佳实践

3个致命误区毁掉笔记本电池:附完整示例与修复代码 看了一堆教程还是不会写项目?别怪你笨,是那些文章只教你怎么“用”,没教你怎么“养”。很多开发者买新电脑图个性能,结果用了两年电池撑不过两小时,出门写代码还得背着个砖头电源。今天不聊虚的,直接… · 2026/9/23 17:28:34

计算机机房装修避坑指南:面试必问的3大性能陷阱与优化实战
计算机机房装修避坑指南:面试必问的3大性能陷阱与优化实战

计算机机房装修避坑指南:面试必问的3大性能陷阱与优化实战 刚入职的小王拿着从网上抄来的机房布线代码,跑测试直接报错,日志里全是超时警告。他抓耳挠腮,根本不知道是逻辑错了还是环境没配好。这种“复制粘贴即翻车”的场景,在机房建设与运维圈子里太常… · 2026/9/23 17:28:28

从LeNet-5到MobileFaceNet:CNN人脸识别门禁系统设计与实践
从LeNet-5到MobileFaceNet:CNN人脸识别门禁系统设计与实践

简介:这是一份围绕卷积神经网络人脸识别门禁系统设计的PDF资料,定位为深度学习与计算机视觉交叉方向的技术参考,适合高校学生、科研入门者及门禁系统开发人员阅读。资料先从卷积层、池化层等基础讲起,再梳理人脸检测、人脸对齐、人… · 2026/9/23 17:28:28

tianjing原理详解
tianjing原理详解

天境框架源码拆解:3个配置坑点助你绕开部署雷区 配置环境就卡半天?别急,这不是你的问题,是文档没讲透。很多开发者在接入天境(Tianjing)框架时,往往卡在依赖冲突或初始化异常上,浪费大量时间。这篇避坑指南直接切入源码,带你从底层逻辑看懂… · 2026/9/23 17:28:28

Hive 多智能体生产运行时(Multi-Agent Harness)完整指南:Colony 集群模型、Queen/Worker 架构与零配置快速上手
Hive 多智能体生产运行时(Multi-Agent Harness)完整指南:Colony 集群模型、Queen/Worker 架构与零配置快速上手

人工智能AI Agent多智能体MCP 服务工具调用浏览器控制 【免费下载链接】hive Multi-Agent Harness for Production AI 项目地址: https://gitcode.com/gh_mirrors/hive48/hive 点击查看 免费下载 本篇技术指南以仓库内的俄语本地化 README(docs/i18n/ru… · 2026/9/23 17:28:21

MemOS 反馈记忆纠偏接口实战:深入剖析 POST /product/feedback 的记忆修正机制与配置要点
MemOS 反馈记忆纠偏接口实战:深入剖析 POST /product/feedback 的记忆修正机制与配置要点

人工智能大模型Agent 记忆AI AgentRAG知识图谱dsh-plugin 【免费下载链接】MemOS Self-evolving memory OS for LLM & AI Agents: ultra-persistent memory, hybrid-retrieval, and cross-task skill reuse, with 35.24% token savings and DeepSeek Harness support. 项目… · 2026/9/23 17:28:21

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码