海洋垃圾检测数据集实战:1000张图+三种标签格式+YOLO11一键训练
简介这份资源面向从事水下视觉与环保监测的算法工程师、研究生及目标检测初学者提供一套真实拍摄的海洋海底垃圾检测数据集可用于海底监控场景下的垃圾识别项目也可作为通用垃圾检测数据的补充。数据集共1000张高质量图像覆盖海底塑料、铁罐、纸张等垃圾以及海洋生物、水下探测器与垃圾同框、打光拍摄等多种场景标注包含plastic、bio、rov、metal、paper、wood、rubber、timestamp、unknown九个类别。资源包为1个PDF文件大小约2.77MB内附数据集基本情况介绍与获取方式并说明提供VOC、COCO、YOLO三种标签格式可直接用于YOLO等算法训练。随附YOLO11一键训练脚本支持GPU、CPU及Mac芯片多平台方案并给出训练结果日志供参考。目前已有540人学习适合需要快速验证模型、补充水下数据或搭建训练流程的读者。1. 海洋垃圾检测数据集1000 张图、三种标签格式与 YOLO11 一键训练到底怎么落地海面漂浮物巡检、河道保洁、近岸生态监测这些场景里最耗人的不是模型结构而是数据。你拿到一个「目标检测-海洋垃圾检测数据集-1000张图-对应VOC/COCO/YOLO三种格式标签支持GPU(GPUs)/CPU/Mac三平台YOLO11一键训练脚本」的标题真正要问的是三件事这 1000 张图够不够训一个能用的检测器、三种标签格式各自什么时候用、一键脚本在 GPU、CPU、Mac 上分别会踩什么坑。这篇不聊虚的按我实际跑这类小数据集的顺序把目录结构、格式转换、训练参数、平台差异和排错一次讲透。适合手里有标注数据、想快速验证 YOLO 系列YOLOv8/YOLO11 一路到 yolov26 目标检测这类新版本能不能出结果的人也适合只想先跑通再谈调优的新手。1000 张图在目标检测里属于「小数据集」但海洋垃圾这个任务有个特点类别少常见就塑料瓶、塑料袋、渔网、泡沫、其他漂浮物几类目标形态重复度高背景以水面为主。这意味着它比通用 COCO 数据集更容易在小样本下收敛但也更容易过拟合到某几种拍摄角度。所以这套数据的价值不在「量大」而在「格式全 脚本能一键跑」让你把精力放在验证流程而不是环境上。下面从数据组织讲到三平台训练再到避坑和进阶技巧。2. 三种标签格式的取舍VOC、COCO、YOLO 各自该在什么时候用2.1 先看清三种格式的字段差异同一批 1000 张图配三套标签不是冗余是因为不同工具链吃不同格式。VOC 是 XML一个图一个文件框用xmin/ymin/xmax/ymax绝对像素坐标COCO 是单个 JSON所有图共用images/annotations/categories三个数组框用[x, y, w, h]绝对像素YOLO 是每图一个 txt每行class cx cy w h全部归一化到 0~1。搞混坐标系是新手第一大翻车点。格式存储方式坐标类型典型用途VOC每图一个 XML绝对像素 xmin/ymin/xmax/ymaxLabelImg 默认、老检测框架COCO单 JSON绝对像素 x/y/w/hpycocotools 评估、COCO 预训练微调YOLO每图一个 txt归一化 cx/cy/w/hUltralytics YOLO 系列训练选型逻辑很简单训练 YOLO11 就用 YOLO 格式要拿 pycocotools 算 mAP 或者和 COCO 预训练权重对齐就留一份 COCOVOC 主要是给标注工具和部分老代码做兼容。三份都留着转换脚本跑一次就行别到用的时候再补。2.2 目录结构要一次定死我一般把数据集组织成下面这样训练脚本只认这个结构换数据集也不用改代码marine_litter/ ├── images/ │ ├── train/ # 约 800 张 │ ├── val/ # 约 150 张 │ └── test/ # 约 50 张 ├── labels/ │ ├── train/ # 与 images/train 同名的 .txt │ ├── val/ │ └── test/ ├── annotations_voc/ # 原始 VOC XML ├── annotations_coco.json └── marine_litter.yaml划分比例 8:1.5:0.5 是小数据集的常见做法验证集别低于 100 张否则 mAP 抖动大到没法判断模型好坏。注意images/train和labels/train里的文件名必须一一对应只差扩展名YOLO 靠文件名配对配不上就静默丢样本这是最隐蔽的坑之一。2.3 从 VOC 转 YOLO 的转换脚本假设你手里是 VOC XML先转成 YOLO。下面这段是核心逻辑读 XML、取尺寸、归一化、写 txtimport os import xml.etree.ElementTree as ET # 类别名要和 yaml 里的 names 顺序完全一致 CLASSES [bottle, bag, net, foam, other] def voc_to_yolo(xml_dir, out_dir, classes): os.makedirs(out_dir, exist_okTrue) for fn in os.listdir(xml_dir): if not fn.endswith(.xml): continue tree ET.parse(os.path.join(xml_dir, fn)) root tree.getroot() size root.find(size) w int(size.find(width).text) h int(size.find(height).text) lines [] for obj in root.iter(object): name obj.find(name).text if name not in classes: continue # 未登记类别直接跳过避免索引错位 cls_id classes.index(name) bbox obj.find(bndbox) xmin float(bbox.find(xmin).text) ymin float(bbox.find(ymin).text) xmax float(bbox.find(xmax).text) ymax float(bbox.find(ymax).text) # 归一化并转中心点格式 cx (xmin xmax) / 2.0 / w cy (ymin ymax) / 2.0 / h bw (xmax - xmin) / w bh (ymax - ymin) / h lines.append(f{cls_id} {cx:.6f} {cy:.6f} {bw:.6f} {bh:.6f}) with open(os.path.join(out_dir, fn.replace(.xml, .txt)), w) as f: f.write(\n.join(lines)) voc_to_yolo(annotations_voc, labels/train, CLASSES)逻辑说明CLASSES的顺序决定 txt 里第一列的数字一旦和 yaml 的names不一致模型学到的类别就全错位而且训练不报错只是 mAP 奇低。归一化用图像真实宽高不是固定 640这点很多人写死 640 导致框整体偏移。{:.6f}保留 6 位是 YOLO 官方推荐精度位数太少小目标框会退化。参数说明xml_dir指向 VOC 目录out_dir指向对应 split 的 labels 目录转换时 train/val/test 要分别跑别把验证集 XML 混进训练集。转换完随手抽查几张用可视化脚本把框画回图上确认没偏。2.4 生成 COCO JSON 与 yaml 配置COCO 那份用pycocotools或自己拼 JSON 都行关键是images里要有id/file_name/width/heightannotations里bbox是[x, y, w, h]绝对像素、category_id从 1 开始0 通常留给背景。yaml 则是 YOLO 训练的入口# marine_litter.yaml path: ./marine_litter train: images/train val: images/val test: images/test names: 0: bottle 1: bag 2: net 3: foam 4: otherpath用相对路径方便整个数据集打包搬走names的键必须从 0 连续跳号会让部分类别永远学不到。这份 yaml 是后面一键脚本唯一需要改的文件类别数变了只改这里。3. YOLO11 一键训练脚本从环境到首轮收敛的完整命令3.1 环境准备与依赖安装一键脚本的前提是环境干净。GPU 机器上先确认驱动和 CUDA 可用再装 PyTorch 和 Ultralytics。CPU 和 Mac 走不同安装命令这是三平台差异的根源。# GPUNVIDIA机器先验证驱动 nvidia-smi # 安装带 CUDA 的 PyTorch版本按官方矩阵选别硬记 pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121 pip install ultralytics # CPU-only 机器 pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu pip install ultralytics # MacApple SiliconMPS 加速 pip install torch torchvision pip install ultralytics逻辑说明nvidia-smi能列出显卡和驱动版本说明 GPU 链路通如果这条命令就报错后面训练一定失败先解决驱动。PyTorch 的 CUDA 版本要和驱动兼容装错版本会出现在torch.cuda.is_available()返回 False 的情况。Mac 不需要单独装 CUDA 版Ultralytics 会自动尝试 MPS。参数说明--index-url指定 wheel 源cu121 对应 CUDA 12.1按你驱动支持的版本换。装完跑一句python -c import torch; print(torch.cuda.is_available())确认GPU 机器要打印 True。3.2 一键训练脚本本体把训练封装成一个脚本三平台靠一个--device参数切换这是最省心的做法from ultralytics import YOLO import argparse parser argparse.ArgumentParser() parser.add_argument(--device, default0, help0GPU, cpuCPU, mpsMac) parser.add_argument(--epochs, typeint, default100) parser.add_argument(--imgsz, typeint, default640) parser.add_argument(--batch, typeint, default16) args parser.parse_args() # 从预训练权重起步小数据集必须靠迁移学习 model YOLO(yolo11n.pt) model.train( datamarine_litter.yaml, epochsargs.epochs, imgszargs.imgsz, batchargs.batch, deviceargs.device, patience20, # 20 轮无提升就早停防过拟合 cacheTrue, # 1000 张小数据集可全缓存进内存 projectruns_litter, nameexp1, )逻辑说明yolo11n.pt是最小的 nano 权重1000 张图用 nano 或 small 足够上大模型只会过拟合。patience20是早停小数据集很容易在 30~50 轮后开始过拟合早停能省时间。cacheTrue把图片缓存进内存1000 张图完全放得下能明显加快每轮速度。参数说明--device是平台开关GPU 填0纯 CPU 填cpuMac 填mps--batch在 CPU 和 Mac 上要调小到 4~8否则内存吃紧--imgsz默认 640如果海洋垃圾里小目标多远处漂浮物可以提到 960但显存和速度代价要自己权衡。3.3 三平台启动命令与预期差异同一份脚本三个平台这样跑# GPU 服务器 python train.py --device 0 --batch 16 --epochs 100 # 纯 CPU 机器速度慢适合验证流程 python train.py --device cpu --batch 4 --epochs 30 # MacApple Silicon python train.py --device mps --batch 8 --epochs 50逻辑说明GPU 上 100 轮 nano 模型大概几十分钟到一两小时CPU 上同样规模可能要十几小时所以 CPU 只建议跑 20~30 轮验证流程通不通别指望出最终模型Mac 的 MPS 介于两者之间适合个人开发者本地调试。三平台产出的权重格式一致都能拿去做推理。参数说明CPU 和 Mac 上把workers也调小脚本里可加workers2否则多进程数据加载在部分系统上会卡死。GPU 上workers8通常没问题。3.4 训练过程该盯哪几个指标训练日志里重点看三个box_loss和cls_loss是否稳定下降、mAP50是否在涨、验证集 loss 是否开始反弹。海洋垃圾任务里mAP50到 0.6~0.8 通常就算可用具体看类别难度。如果训练 loss 一直降但验证 mAP 不涨基本是过拟合回去加数据增强或减轮数。Ultralytics 默认开了 mosaic、翻转等增强小数据集上这些增强是救命的别关。4. 避坑与排查小数据集 三平台最容易翻车的 5 个点4.1 训练不报错但 mAP 接近 0现象脚本正常跑完loss 也在降但验证 mAP 一直在 0.01 附近。原因九成是类别索引错位——txt 里的 class id 和 yaml 的names顺序对不上或者 VOC 转换时类别名大小写不一致被跳过。解决抽一张训练图用可视化脚本把 YOLO 标签画回原图确认框位置和类别都对再打印 yaml 的names和 txt 第一列的唯一值比对。4.2 GPU 上torch.cuda.is_available()返回 False现象明明有显卡训练却自动落到 CPU速度慢十倍。原因PyTorch 装成了 CPU 版或 CUDA 版本和驱动不匹配。解决pip list看 torch 版本带不带cu不带就是 CPU 版按 3.1 的命令重装对应 CUDA 版本再确认驱动版本满足该 CUDA 要求。4.3 Mac 上 MPS 报内存或算子不支持现象Mac 训练中途报MPS backend out of memory或某算子 fallback 到 CPU 导致极慢。原因MPS 对部分算子和大 batch 支持有限。解决把--batch降到 4--imgsz降到 512 先跑通如果仍报算子不支持临时切--device cpu验证流程最终训练放 GPU 机器。4.4 验证集 mAP 抖动剧烈现象每轮 mAP 上下跳 0.1 以上看不出趋势。原因验证集太小低于 100 张或类别分布不均。解决把验证集补到 150 张以上尽量让每个类别都有样本训练时开deterministicTrue减少随机性但会略降速度。4.5 图片和标签文件名对不上导致静默丢样本现象训练能跑但日志里train样本数比实际图片少。原因images/train里有图但labels/train里没有同名 txtYOLO 直接跳过不报错。解决写个校验脚本遍历 images 目录检查每个文件名在 labels 里是否存在缺的要么补标要么删图别让脏数据混进去。5. 进阶把 1000 张图的效果再往上抬一档跑通只是起点。1000 张图想榨出更好效果我一般做三件事。第一是针对性增强海洋垃圾里小目标和遮挡多把mosaic、mixup开着再手动加copy_paste把稀有类别比如渔网复制粘贴到更多背景上缓解类别不平衡。第二是分辨率策略先 640 快速迭代确认流程最终模型用 960 或 1280 训一轮小目标召回通常能涨几个点代价是显存和时间的线性增长。第三是推理阶段的置信度门限训练完别直接用默认 0.25拿验证集画一条confidence对precision/recall的曲线海洋垃圾巡检通常宁可多报也别漏报门限可以压到 0.15~0.2。验证方法上除了看 mAP我更信「拿 20 张没参与训练的实拍图跑一遍人眼数漏检和误检」。mAP 是统计量实拍图才是业务真相。下面这个推理片段可以直接复用from ultralytics import YOLO model YOLO(runs_litter/exp1/weights/best.pt) results model.predict( sourcetest_images/, conf0.2, # 压低门限减少漏检 iou0.5, # NMS 阈值密集漂浮物可调到 0.6 imgsz960, saveTrue, )逻辑说明conf控制置信度门限越低召回越高但误检增多iou是 NMS 的 IoU 阈值海面漂浮物容易挨在一起调高能减少互相抑制导致的漏检。saveTrue把画框结果存下来方便人工复核。参数说明best.pt是训练中验证集最优权重别用last.pt后者是最后一轮往往已经过拟合。imgsz推理时和训练一致或略高别低于训练分辨率。血泪经验是小数据集上数据清洗和增强的收益远大于换模型结构。我见过太多人一上来就改 backbone、加注意力结果不如老老实实把 50 张错标修掉。先保证标签干净、格式对齐、流程可复现再谈涨点。这套 1000 张图 三格式 一键脚本的组合最大的价值就是让你把「环境」和「格式」这两件破事一次性解决把时间留给真正影响效果的地方。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

三星i9000刷机教程源码解析与速查手册

三星i9000刷机教程源码解析与速查手册

三星i9000刷机教程源码解析与速查手册 看了一堆教程还是不会写项目?这是很多转岗开发者的真实困境。你盯着那些“一键刷机”、“救砖指南”的帖子,感觉懂了,但一旦要自己动手改代码或排查底层逻辑,脑子就是一片空白。别急,今天我不讲虚的,直接拆解…

2026/9/23 17:27:46 阅读更多 →
深度学习算法原理及应用:RBM与自动编码机实战解析

深度学习算法原理及应用:RBM与自动编码机实战解析

简介:这份PDF资料面向机器学习初学者与需要梳理深度学习理论脉络的读者,系统讲解深度学习算法的基本原理与典型应用,帮助建立从神经网络基础结构到训练过程的完整认知。资源包内仅含1个PDF文件,约496KB,内容为期刊论文…

2026/9/23 17:27:46 阅读更多 →
3个坑讲透李连杰为何退出壹基金:避开高频面试题陷阱

3个坑讲透李连杰为何退出壹基金:避开高频面试题陷阱

3个坑讲透李连杰为何退出壹基金:避开高频面试题陷阱 官方文档动辄几百页,翻两页就睡,关键逻辑全在脚注里。 别急,这种“李连杰为何退出壹基金”的词条,其实是个典型的 信息检索与数据清洗 高频面试题。…

2026/9/23 17:27:46 阅读更多 →

最新新闻

图解原理:3步搞定短信接口选型,告别教程依赖

图解原理:3步搞定短信接口选型,告别教程依赖

图解原理:3步搞定短信接口选型,告别教程依赖 别再对着文档发呆,看了一堆教程还是不会写项目?这种痛苦我太懂了。 很多开发者卡在“调通接口”和“写出生产级代码”之间,因为市面上的教程大多只给结果,不讲背后的 图解原理 。…

2026/9/23 18:05:20 阅读更多 →
非赫兹轮轨接触简化模型:基于Python的虚拟贯入与条带法实现

非赫兹轮轨接触简化模型:基于Python的虚拟贯入与条带法实现

简介:面向铁路轮轨接触力学研究者的Python简化模型,专门处理超出经典赫兹理论适用范围的轮轨接触问题,覆盖非线性变形、滑动接触、黏着特性与滚动接触疲劳等非赫兹因素。模型基于Piotrowski-Kik理论实现,可模拟轮轨动态响应&#…

2026/9/23 18:05:20 阅读更多 →
C# Web Forms三合一后台系统:OA+CRM+ERP实战源码解析

C# Web Forms三合一后台系统:OA+CRM+ERP实战源码解析

简介:这是一套面向计算机专业本科生毕业设计与初学者进阶实践的C#全栈后台管理系统源码,融合OA、CRM与ERP三大企业级功能模块,适用于课程设计、毕设开发及中小型企业内部管理平台原型构建。资源共2000个文件,涵盖498个C#业务逻辑文…

2026/9/23 18:05:19 阅读更多 →
Java端口扫描器教学实践:TCP/UDP协议解析与课设实现

Java端口扫描器教学实践:TCP/UDP协议解析与课设实现

简介:这是一份面向计算机网络课程学习者与初阶开发者的Java端口扫描器实践项目,聚焦TCP/UDP协议层探测能力训练,适用于课程设计、工程实训及毕设选题参考。资源包共12个文件,含2个核心Java源码(实现多线程扫描逻辑&…

2026/9/23 18:05:19 阅读更多 →
Linux signal函数详解:从入门到实战,避开信号处理常见坑

Linux signal函数详解:从入门到实战,避开信号处理常见坑

先纠正一个拼写问题:标题里的singal应该是signal,这是 Linux 下信号处理最常用的接口之一。我在不少新人的代码里见过这个拼写,编译直接报错,因为头文件里根本没有这个符号。signal函数虽然看起来只有一行声明,但背后牵…

2026/9/23 18:05:18 阅读更多 →
基于深度学习的表面缺陷检测与可视化监管系统解析

基于深度学习的表面缺陷检测与可视化监管系统解析

简介:面向计算机与人工智能专业毕业设计的Python深度学习项目,专注表面缺陷检测与可视化监管系统的全流程实现,可服务于工业质检、产线监控等场景,也为需要快速搭建完整AI毕业设计的学生提供可直接运行的代码基底。压缩包共241个文…

2026/9/23 18:04:17 阅读更多 →

日新闻

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

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

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

2026/9/23 0:00:23 阅读更多 →
2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我

2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我

2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我 刚把开发环境的显示器从1080P换到2K,跑老项目直接报错,版本升级后 API…

2026/9/23 0:01:25 阅读更多 →
3步搞定美眉图实战项目,告别官方文档抓不住重点

3步搞定美眉图实战项目,告别官方文档抓不住重点

3步搞定美眉图实战项目,告别官方文档抓不住重点 官方文档翻了三遍还是云里雾里?别急,美眉图在实战项目中常被用来做数据可视化,但它的原理比你想的简单。今天咱们直接上手,用一个完整的小项目把美眉图跑通,不再死磕那些冗长的理论说明。…

2026/9/23 0:01:25 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →