简介这是一份面向深度学习与计算机视觉方向的芒果实例分割数据集采用YOLOv8标注格式可直接用于YOLOv8的实例分割训练与验证。资源包含453条训练数据与91条验证数据覆盖精准农业、自动化采摘、质量分级、病虫害检测及储运监控等典型场景适合从事目标检测与实例分割研究的学生、算法工程师及农业智能化开发者使用。压缩包共1088个文件以542个png图像与542个txt标注文件为主另含2个json与2个cache缓存文件整体约187.03MB图像与标注一一对应便于直接投入训练流程。目前已有761人学习下载具备一定参考热度。借助该数据集读者可快速搭建芒果实例分割实验环境完成模型训练、验证与效果评估并在此基础上探索果园管理、自动采摘与品质追溯等落地应用节省数据采集与标注成本。1. 芒果实例分割数据集与 YOLOv8544 张图能跑出什么结果手上只有几百张标注图却要做实例分割这事到底靠不靠谱我拿到「芒果实例分割数据集 yolov8 格式453 条训练、91 条验证」这个标题时第一反应不是兴奋而是先算账544 张图按 8:2 切分训练集 453、验证集 91这个比例是标准的。真正决定成败的不是图片数量而是标注质量、类别一致性和格式转换有没有出错。芒果这种目标有个特点——果实之间互相遮挡严重成熟度不同导致颜色差异大树冠背景杂乱这些都会让实例分割比普通目标检测难上一截。如果你正在做农业视觉、果园采摘机器人或者果实计数系统这套数据值得认真跑一遍。下面我按「数据长什么样 → 环境怎么搭 → 训练怎么配 → 坑在哪 → 怎么验证」的顺序把整个流程拆开讲。2. 芒果实例分割数据集的结构与 YOLOv8 格式要求2.1 实例分割标注和检测标注的本质区别很多人第一次接触实例分割会以为就是把检测框画得更细。不是的。目标检测输出的是(x, y, w, h, class)而实例分割输出的是每个目标的一圈多边形顶点坐标加上类别。YOLOv8 的分割任务用的是tasksegment标注文件里每一行格式是class-index x1 y1 x2 y2 ... xn yn所有坐标都是归一化到 0~1 之间的浮点数多边形至少 3 个点。这里有个容易翻车的地方如果你的原始标注是 LabelMe 生成的 JSON里面存的是绝对像素坐标直接转成 YOLO 格式必须除以图片宽高。我见过有人忘了归一化训练时 loss 直接飙到 nan排查半天才发现是坐标没除。芒果数据集的目录结构标准做法是这样mango_seg/ ├── images/ │ ├── train/ # 453 张 │ └── val/ # 91 张 ├── labels/ │ ├── train/ # 453 个 .txt │ └── val/ # 91 个 .txt └── data.yamldata.yaml是整个训练的入口配置文件内容必须包含path、train、val、names四个字段。names里类别的顺序必须和标注文件里的class-index严格对应错一个位置模型学到的就是错的类别映射。2.2 从 LabelMe 到 YOLOv8 分割格式的转换脚本假设你拿到的原始数据是 LabelMe 标注的 JSON下面这个脚本可以直接用import json import os import numpy as np from PIL import Image # 类别映射必须和 data.yaml 里的 names 顺序一致 class_map {mango: 0} def labelme_to_yolo_seg(json_dir, output_dir, img_dir): os.makedirs(output_dir, exist_okTrue) for fname in os.listdir(json_dir): if not fname.endswith(.json): continue with open(os.path.join(json_dir, fname), r, encodingutf-8) as f: data json.load(f) img_w data[imageWidth] img_h data[imageHeight] lines [] for shape in data[shapes]: label shape[label] if label not in class_map: continue points shape[points] # 至少 3 个点才能构成多边形 if len(points) 3: continue cls_id class_map[label] coords [] for x, y in points: # 归一化并裁剪到 [0,1]防止越界 nx min(max(x / img_w, 0.0), 1.0) ny min(max(y / img_h, 0.0), 1.0) coords.append(f{nx:.6f} {ny:.6f}) lines.append(f{cls_id} .join(coords)) out_name os.path.splitext(fname)[0] .txt with open(os.path.join(output_dir, out_name), w) as f: f.write(\n.join(lines)) labelme_to_yolo_seg(./raw_json, ./labels/train, ./images/train)这段代码的逻辑很直白读 JSON、取图片宽高、遍历每个 shape、归一化坐标、写 txt。几个关键参数说明一下。class_map决定了类别索引如果你的数据集有多个类别比如「成熟芒果」「未成熟芒果」这里要全部列出来顺序和data.yaml的names一一对应。min(max(x / img_w, 0.0), 1.0)这个裁剪操作看起来多余但实际标注中经常出现点稍微超出图片边界的情况不裁剪的话 YOLOv8 训练时会报坐标越界警告。:.6f保留六位小数是 YOLO 官方推荐的精度太少会导致小目标多边形变形。转换完成后务必抽查几个 txt 文件用下面的脚本把标注画回图片上肉眼确认import cv2 import numpy as np def visualize_seg(img_path, label_path): img cv2.imread(img_path) h, w img.shape[:2] with open(label_path) as f: for line in f: parts line.strip().split() cls_id int(parts[0]) coords np.array(list(map(float, parts[1:]))).reshape(-1, 2) coords[:, 0] * w coords[:, 1] * h pts coords.astype(np.int32) cv2.polylines(img, [pts], True, (0, 255, 0), 2) cv2.imwrite(check.jpg, img) visualize_seg(./images/train/001.jpg, ./labels/train/001.txt)提示可视化检查这一步千万别省。我踩过的坑是标注工具导出的多边形点序是逆时针YOLOv8 虽然不强制方向但某些后处理会受影响画出来一看就能发现异常。3. YOLOv8 实例分割训练环境搭建与参数配置3.1 在 Ubuntu 20.04 上搭 CPU 版和 GPU 版环境热词里有人搜「ubuntu20.04 搭建 yolov8 环境 cpu 版本」说明不是所有人都有显卡。我的建议是训练阶段尽量用 GPU哪怕是一张 GTX 1660 Ti 也比 CPU 快几十倍。但如果你只是先跑通流程验证数据格式CPU 版也能用。GPU 版环境搭建我一般这样操作conda create -n yolov8 python3.10 -y conda activate yolov8 pip install ultralytics # 确认 CUDA 可用 python -c import torch; print(torch.cuda.is_available())如果输出True说明 GPU 环境正常。如果输出False但你确实有 NVIDIA 显卡大概率是 CUDA 版本和 PyTorch 版本不匹配。这时候不要急着重装系统先跑nvidia-smi看驱动支持的 CUDA 版本再去 PyTorch 官网找对应版本的安装命令。CPU 版就简单了pip install ultralytics之后直接跑但训练时要把device参数设成cpu并且做好心理准备544 张图跑 100 轮CPU 可能要一整天。3.2 训练参数怎么设从 epochs 到 imgsz 的实操建议YOLOv8 分割训练的核心命令就一行yolo segment train \ data./mango_seg/data.yaml \ modelyolov8n-seg.pt \ epochs100 \ imgsz640 \ batch8 \ device0 \ workers4 \ patience20 \ saveTrue \ project./runs/segment \ namemango_exp1逐个参数说清楚。modelyolov8n-seg.pt选的是 nano 版本的分割模型参数量最小适合小数据集快速验证。如果你数据量上千或者对精度要求高可以换yolov8s-seg.pt或yolov8m-seg.pt但要注意显存占用会成倍增加。epochs100对 453 张图来说是个合理起点配合patience20早停机制如果 20 轮验证指标没提升就自动停省时间。imgsz640是默认值芒果图片如果分辨率很高可以试 1024但显存不够就老老实实 640。batch8在 8GB 显存上比较稳12GB 以上可以拉到 16。训练过程中损失曲线和 mAP 曲线是判断有没有跑偏的关键。YOLOv8 默认会在runs/segment/mango_exp1/下生成results.csv用下面这段代码画出来import pandas as pd import matplotlib.pyplot as plt df pd.read_csv(runs/segment/mango_exp1/results.csv) df.columns df.columns.str.strip() fig, axes plt.subplots(1, 2, figsize(12, 4)) axes[0].plot(df[epoch], df[train/seg_loss], labeltrain seg loss) axes[0].plot(df[epoch], df[val/seg_loss], labelval seg loss) axes[0].set_xlabel(epoch) axes[0].set_ylabel(loss) axes[0].legend() axes[1].plot(df[epoch], df[metrics/mAP50(B)], labelmAP50) axes[1].plot(df[epoch], df[metrics/mAP50-95(B)], labelmAP50-95) axes[1].set_xlabel(epoch) axes[1].set_ylabel(mAP) axes[1].legend() plt.tight_layout() plt.savefig(training_curve.png, dpi150)如果训练 loss 持续下降但验证 loss 从某个 epoch 开始往上走说明过拟合了。小数据集过拟合是常态解决办法有三个加数据增强YOLOv8 默认开了 mosaic、flip、scale、降低模型复杂度从 s 换回 n、或者加 dropout。我一般先看验证 mAP 有没有在涨如果 mAP 还在涨验证 loss 稍微抬头可以再观察几轮。4. 小数据集训练实例分割的避坑与排查4.1 类别不均衡导致某些芒果「消失」现象训练完发现模型对遮挡严重的芒果分割效果极差几乎不输出掩码。原因453 张图里被遮挡的芒果样本占比可能不到 10%模型在训练中逐渐偏向「只学容易的」。解决在data.yaml同级目录建一个hyp.yaml调低mosaic概率、开启copy_paste增强让遮挡样本被复制粘贴到其他图上人为增加难度样本的权重。4.2 验证集 mAP 虚高但实际推理一塌糊涂现象验证集 mAP50 跑到 0.85但拿新拍的芒果照片推理掩码乱七八糟。原因训练集和验证集如果来自同一批拍摄场景验证集不能反映真实泛化能力。解决重新划分数据确保验证集包含不同光照、不同角度、不同树冠背景的图片。如果原始数据全是同一棵树的照片那 91 张验证集的意义有限需要补拍。4.3 多边形标注自相交导致训练报错现象训练启动时报Polygon self-intersection或 loss 突然变 nan。原因LabelMe 标注时手抖多边形边线交叉了。解决用 shapely 库批量检测并修复from shapely.geometry import Polygon def check_self_intersection(label_path): with open(label_path) as f: for i, line in enumerate(f): parts line.strip().split() coords list(map(float, parts[1:])) points [(coords[j], coords[j1]) for j in range(0, len(coords), 2)] poly Polygon(points) if not poly.is_valid: print(f{label_path} line {i} invalid polygon)检测到之后要么手动重新标注要么用poly.buffer(0)修复后重新导出。4.4 图片和标签文件名不匹配现象训练时提示No labels found但明明 labels 目录里有文件。原因图片是.jpg标签是.txt但文件名前缀不一致比如图片叫mango_001.jpg标签叫001.txt。YOLOv8 是按文件名不含扩展名去匹配的。解决写个脚本批量重命名确保images/train/xxx.jpg对应labels/train/xxx.txt。4.5 显存溢出OOM的三种降级方案现象训练到一半报CUDA out of memory。原因batch或imgsz设太大或者workers太多导致数据加载占用显存。解决按优先级依次尝试——先把batch减半再把imgsz从 640 降到 512最后把workers从 8 降到 2。如果还不行换yolov8n-seg.pt并开启ampTrue自动混合精度。5. 用验证集和推理脚本确认模型真的能用训练完之后别只看 mAP 数字。我习惯做两件事一是用yolo segment val跑一遍验证集看混淆矩阵和各类别的 P/R 曲线二是写一个推理脚本拿几张验证集里的图跑预测把掩码叠回原图肉眼检查。yolo segment val \ modelruns/segment/mango_exp1/weights/best.pt \ data./mango_seg/data.yaml \ imgsz640 \ batch8推理脚本这样写from ultralytics import YOLO import cv2 model YOLO(runs/segment/mango_exp1/weights/best.pt) results model.predict( source./mango_seg/images/val, imgsz640, conf0.25, iou0.45, saveTrue, project./inference, nameval_check )conf0.25是置信度阈值低于这个值的检测框会被过滤。iou0.45是 NMS 的 IoU 阈值控制重叠框的合并程度。这两个参数对最终效果影响很大conf调高会减少误检但可能漏检iou调低会抑制重叠目标。芒果互相遮挡的场景我一般把iou设到 0.5~0.6让模型保留更多相邻目标的掩码。验证集只有 91 张跑完推理后重点看三类图单果无遮挡的、多果重叠的、背景杂乱的。如果单果图掩码边缘毛糙说明多边形标注本身不够精细如果多果图漏检说明 NMS 阈值需要调如果背景杂乱图误检说明负样本不够需要补一些没有芒果的树冠图作为背景类。最后一件事把best.pt导出成 ONNX方便后续部署到边缘设备。命令是yolo export modelbest.pt formatonnx imgsz640。导出后拿 Netron 打开看一眼输入输出节点确认输出里有output0和output1两个分支——分割任务比检测多一个掩码分支如果只有一个输出说明导出时任务类型选错了。这套流程我跑过不止一次544 张图做芒果实例分割mAP50 跑到 0.8 以上是可行的但前提是标注质量过关、验证集划分合理、训练参数不激进。小数据集训练最忌讳的就是一上来就堆 epochs 和加大模型先用 nano 版本跑通全流程看到曲线正常了再逐步升级。希望帮到你。本文还有配套的精品资源点击获取
企业数字化 ERP 产品动态
相关推荐
JSP学校教材管理系统源码解析:环境配置与增删改查实战 简介:这份资源是一套基于Java、JSP与MySQL构建的Web学校教材管理系统完整源码,面向学习Java Web开发的学生、课程设计者及需要参考实战项目的开发者,帮助解决教材信息增删改查与后台权限管理等典型业务问题。压缩包共81个文件,约3… · 2026/9/28 2:07:58
DCM+MCP:在MCU上构建可验证因果AI执行体 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/28 2:07:51
西储大学轴承数据集故障诊断仿真平台实战指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/28 2:07:51
Spingboot启动预热的实现 启动预热的适用场景启动预热适合以下情况:数据主要来自第三方接口,无法直接从本地数据库读取。第三方接口响应较慢,首次访问容易超时。一个页面需要调用多个第三方接口或逐项查询。数据读取频繁,但变化不频繁。希望服务启动后&… · 2026/9/28 3:40:12
学Java别走弯路,这5个方向最吃香 学Java的人很多,但学明白的人不多。有人学了半年还在写控制台程序,有人一年就能独当一面。差别不在天赋,而在方向。Java生态太庞大了,什么都学等于什么都没学。选对方向,事半功倍。今天盘点当前最吃香的5个Java方向&am… · 2026/9/28 3:32:15
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01
制作网页比较方便的软件怎么选?一文搞懂避坑指南 制作网页比较方便的软件怎么选?一文搞懂避坑指南 很多老板一上来就问:做个网站多少钱?但我反问他:你的域名买了吗?服务器租了吗?他一脸懵。这就是典型的“域名服务器搞不懂”。别急,今天咱们不聊虚的,直接 一文搞懂 那些让你头秃的技术名词。… · 2026/9/28 0:00:06
婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量 婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量 找婚恋网站建站公司,最怕的就是被坑高价。很多同行跟我吐槽,报价单上写得模棱两可,功能栏里全是“高级定制”、“专属UI”,结果落地全是套壳。今天不聊虚的,直接甩几个我经手的 实战案例… · 2026/9/28 0:00:19
济南做网站多少钱:3个案例拆解,防黑源码下载全攻略 济南做网站多少钱:3个案例拆解,防黑源码下载全攻略 上周济南一个做建材的老板找我,脸都绿了。他的官网首页弹出了赌博广告,后台被植入了挖矿脚本。他慌得问我:“网站被黑挂马不知道怎么办?能不能直接找之前的外包公司要源码下载,看看哪里被动了手脚?… · 2026/9/28 0:00:25