7100+张实拍柑橘图:带新鲜/腐烂双标签的YOLO-ready数据集,含可视化检查脚本 📅 2026/7/15 2:13:07 本文还有配套的精品资源点击获取简介7100张训练图、1200张验证图、600张测试图全部为真实场景下拍摄的柑橘图像每张图配有标准YOLO格式txt标注文件类别仅两个——新鲜、腐烂坐标已归一化x_center, y_center, width, heightclass.names文件直接可用。目录结构严格遵循YOLOv5/v8/v10通用规范train/、valid/、test/三级文件夹图片与标签一一对应无缺失、无错位开箱即导入训练。附赠show.py脚本一键运行即可在原图上叠加显示标注框快速核验标注准确性或用于教学演示。所有图像已完成统一尺寸适配与基础预处理兼容主流目标检测框架适合部署在产线分拣设备、智能仓储系统或田间质检终端中支撑柑橘表观品质的自动化判别任务。1. 这不是“又一个水果数据集”而是一套能直接跑通产线的柑橘品质判别基建我做农业AI落地项目快八年了从最早在果园里扛着单反拍样本到后来带团队搭边缘推理盒子踩过最多的坑不是模型不准而是——数据根本没法用。你拿到的所谓“公开数据集”90%以上是手机随手拍、背景杂乱、光照不均、标注错位、类别模糊更别说YOLO格式是否规范、train/valid/test是否真正独立、图像和标签是否一一对应这种基础问题。去年帮一家赣南脐橙加工厂做分拣系统升级光是清洗和重标他们自己攒的3万张图就花了两个算法工程师整整六周最后还因为腐烂边界标注不一致导致模型在产线上频繁误判整条线停了两次。所以当我看到这个7100张实拍柑橘图数据包时第一反应不是“哇好多图”而是立刻打开目录树、检查文件名哈希、抽样验证txt坐标、运行show.py看叠加效果——结果是它真的省掉了我过去三年里最耗时的三件事数据清洗、格式转换、标注质检。它不是为论文刷指标准备的是为凌晨三点还在产线调试的工程师、为没时间写脚本的农技员、为预算有限只能买一台Jetson Orin的合作社准备的。关键词里写的“柑橘检测”“新鲜腐烂分类”“YOLO数据集”“农业AI数据”每一个都不是虚词7100张训练图全部来自江西、广西、湖南三地合作果园的真实采摘场景不是实验室打光棚拍“新鲜/腐烂”双标签严格按农业品控标准定义——腐烂指果皮出现明显褐变、软化、霉斑或渗液面积≥5mm²即标为腐烂类而非肉眼模糊判断YOLO-ready意味着你把整个文件夹拖进ultralytics/yolov8/train.py的data参数路径里改两行配置就能开始训练连“convert_to_yolo.py”这种脚本都不用写而那个看似简单的show.py其实是我在三个项目里反复迭代出来的可视化核验工具——它不仅能画框还能标出每张图的标注置信度模拟值、自动统计每类目标数量分布、甚至导出标注异常图谱比如框超出图像边界、宽高为负等硬伤。如果你正被柑橘分拣的准确率卡在82%上不去或者刚接手一个农业AI项目却卡在数据准备阶段这个包就是你该先下载、先跑通、再谈模型优化的第一块真实砖头。2. 数据设计背后的农业逻辑为什么是71001200600而不是“越多越好”2.1 样本量分配不是拍脑袋而是产线验证倒推的结果很多人一上来就想堆数据量觉得“10万张肯定比1万张好”。但在农业场景里盲目堆量反而会害死模型。我们做过对照实验用同一套YOLOv8s模型在纯实验室白底图1.2万张上mAP能达到0.92但一放到果园流水线实拍视频里准确率直接掉到63%——因为模型学到了“白背景新鲜”的虚假相关性。而这个数据包的7100/1200/600划分是基于真实产线部署需求反向计算出来的7100张训练图覆盖了柑橘在不同成熟度青绿/转色/全黄、不同品种脐橙/砂糖橘/蜜柚/椪柑、不同损伤类型机械磕碰/冻伤/日灼/真菌腐烂/细菌溃烂下的表观特征。我们按果园采收节奏采集每个合作基地连续7天、每天早中晚各采样200张确保光照角度、湿度、背景干扰枝叶、筐体、传送带的自然变化被充分捕获。抽样统计显示7100张中新鲜样本占比68.3%腐烂样本31.7%这个比例接近实际分拣线上的缺陷率行业平均25%-35%避免模型因类别严重不平衡而偏向预测“新鲜”。1200张验证图不是从训练集里随机切出来的。它们全部来自独立果园、独立采收批次、独立拍摄设备三台不同型号手机一台工业相机且拍摄时间比训练集晚两周。这样做的目的是模拟模型上线后的“域偏移”——新果园的土壤颜色、新批次的果皮蜡质层厚度、新设备的白平衡偏差。验证集不参与训练只用于早停early stopping和超参调优确保模型泛化能力经得起产线真实波动。600张测试图这才是真正的“考试卷”。它们由第三方农科院专家盲测标注标注规则比训练集更严腐烂区域必须由两名农艺师共同确认且需标注腐烂类型霉变/溃烂/干疤。测试集图像全部来自未参与数据采集的产区如云南宾川完全隔离。我们要求所有模型必须在这个集上达到新鲜类召回率≥94%、腐烂类精确率≥91%才算达标——这两个指标直接对应产线的漏检率坏果混入好果箱和误杀率好果被当坏果剔除是客户签验收单的核心KPI。提示别急着把test/文件夹删掉去“扩充训练集”。农业AI最怕的就是测试集污染。我见过太多团队为了提升报告里的mAP偷偷把测试图混进训练结果模型在客户现场一跑就崩。这600张就是你的底线留着定期用它测真实性能。2.2 “双标签”不是简单二分类而是农业品控的决策锚点“新鲜/腐烂”看起来只是两个词但在实际分拣中它背后是一套完整的品控逻辑链。这个数据集的标注规则直接映射了《NY/T 1778-2018 鲜柑橘分级》国标里的关键判定项新鲜类必须同时满足——果形端正、果皮光滑无裂口、无明显病斑或虫蛀孔、无汁液渗出、无软化塌陷区。哪怕一个微小磕碰直径3mm且无变色也仍属新鲜但若磕碰处已发褐则划入腐烂。腐烂类只要出现以下任一情形即标注——① 果皮褐变/黑斑面积≥5mm²② 局部软化手指轻压凹陷不可复原③ 表面霉层白毛/绿毛/黑毛④ 渗液果皮表面有湿润反光区⑤ 溃烂孔洞穿透果皮。特别注意日灼伤果皮发白硬化不归为腐烂因不影响食用安全但数据集中单独标记了“日灼”标签未公开仅内部质检用说明采集团队对农业知识的理解深度。这种标注逻辑直接影响模型输出的设计。比如模型最终部署时不是简单输出“fresh/rotten”而是输出-fresh置信度≥0.95 → 直接进入精品装箱线-fresh置信度0.8~0.95 → 进入二级果通道人工复检-rotten置信度≥0.9 → 触发气吹剔除装置-rotten置信度0.7~0.9 → 进入待复检区避免误杀高价值果。你看从数据标注的粒度就已经决定了后续工程落地的精度天花板。这个数据包的双标签不是为学术benchmark服务的是为产线PLC控制器的输入信号服务的。2.3 YOLO-ready的“ready”到底ready在哪很多人以为“YOLO-ready”就是把图片转成jpg、坐标转成归一化txt就行。其实远不止。这个数据包的ready体现在三个被90%开源数据集忽略的细节上第一目录结构零兼容成本。它严格遵循Ultralytics官方推荐的v8/v10结构data/ ├── train/ │ ├── images/ # 7100张jpg │ └── labels/ # 7100个txt同名匹配 ├── valid/ │ ├── images/ # 1200张jpg │ └── labels/ # 1200个txt └── test/ ├── images/ # 600张jpg └── labels/ # 600个txt注意没有trainval/这种非标准混合集没有JPEGImages/这种Pascal VOC遗留命名没有Annotations/这种需要额外映射的文件夹。你只需要在yaml里写train: ../data/train/images val: ../data/valid/images test: ../data/test/images nc: 2 names: [fresh, rotten]然后yolo train datadata.yaml modelyolov8s.pt全程无需修改任何代码。相比之下我处理过某高校发布的“柑橘数据集”目录里混着img/、IMG/、images/三个文件夹标签文件名大小写混乱IMG_001.jpg 对应 img_001.txt光是写脚本统一重命名就花了两天。第二坐标归一化经得起数学检验。所有txt文件里的坐标都是严格按公式计算的x_center (bbox_x_min bbox_width/2) / image_width y_center (bbox_y_min bbox_height/2) / image_height width bbox_width / image_width height bbox_height / image_height我们抽样检查了全部8900个txt文件发现归一化误差全部≤1e-6浮点精度极限无一张图存在坐标溢出x_center1或0或宽高为负。这是用OpenCV读取图像后实时计算的不是用Photoshop手动标完再粗略估算的。这意味着你在训练时不会遇到loss becomes NaN这种玄学报错——那往往是坐标错误导致梯度爆炸。第三class.names文件是活的不是摆设。它只有两行fresh rotten但这两行直接决定了模型输出层的神经元顺序。YOLOv8默认按文件行序索引类别所以pred[0]永远是fresh概率pred[1]永远是rotten概率。很多团队自己生成names文件时习惯写[rotten,fresh]结果部署时把好坏果搞反产线直接报废一车货。这个包的names文件是经过三次交叉验证确认的用它训练的模型在测试集上输出的pred[:,1]rotten概率与人工标注的腐烂标签完全一致。3. 实操核心show.py不只是“看看框”它是你的标注质检中枢3.1 脚本功能拆解从“能用”到“真懂数据”show.py表面看只有83行代码但它解决的是农业AI项目中最耗神的环节——标注质量核验。我把它拆成四个层级的功能你不用全用但得知道每一层的价值Level 1基础可视化3分钟上手命令行直接运行python show.py --source data/train/images --labels data/train/labels --save-dir viz_train它会遍历指定文件夹下所有jpg读取同名txt用红色框画fresh、绿色框画rotten保存到viz_train里。这是最常用场景给农技员看“你们标的数据长这样”或者给客户演示“模型学到了什么”。Level 2异常检测省下2天人工抽检加参数--checkpython show.py --source data/train/images --labels data/train/labels --check它会自动扫描所有txt报告三类硬伤-Invalid box: 框坐标超出图像边界x_center±width/2 1 或 0-Zero area: 宽或高≤0标注软件导出bug-Duplicate: 同一张图出现多个相同类别框标注员重复框选我们用这个功能扫了7100张训练图发现17处Invalid box全是早期用某款安卓标注APP导出的bug全部修复。没有这个检查模型训练时会随机崩溃你得花半天时间定位是哪张图的问题。Level 3分布分析发现数据盲区加参数--statspython show.py --source data/train/images --labels data/train/labels --stats它生成一份stats_summary.csv包含- 每类目标总数fresh: 12,438个框rotten: 5,672个框- 每张图平均目标数1.92个符合单果拍摄逻辑- 目标尺寸分布width×height中位数0.28×0.31说明多数柑橘占画面1/3左右- 尺寸离散度IQR0.12证明图像构图稳定这份统计帮你快速判断如果rotten框总数才几百个说明腐烂样本严重不足如果单图目标数中位数是8那大概率是多果混拍不适合单果品质判别任务——这个数据包的统计值全部落在合理区间证明采集策略靠谱。Level 4置信度模拟预判模型瓶颈加参数--simulate-confpython show.py --source data/train/images --labels data/train/labels --simulate-conf 0.7它会假设模型对每个框的预测置信度为0.7然后用不同透明度填充框置信度越高越不透明并统计“低置信度框占比”。我们发现在腐烂样本中低置信度框集中在两类场景① 腐烂区域被枝叶半遮挡② 日灼伤与早期褐变边界模糊。这直接提示你后续要重点增强这两类样本的augmentation比如CutMix遮挡、HSV扰动模拟光照变化而不是盲目增加腐烂图总量。注意show.py默认使用OpenCV的BGR色彩空间如果你用matplotlib显示发现颜色不对红绿颠倒只需在代码第42行把cv2.cvtColor(img, cv2.COLOR_BGR2RGB)取消注释即可。这是个隐藏彩蛋——适配不同显示环境的快速切换开关。3.2 手把手教你用show.py做一次完整质检我以data/train/为例演示如何用show.py完成从抽检到报告的全流程步骤1快速抽检建立直觉# 先看10张典型图感受标注风格 python show.py --source data/train/images --labels data/train/labels --max-images 10 --save-dir viz_sample打开viz_sample文件夹你会看到所有框都紧贴果皮边缘无过度padding腐烂框精准覆盖变色区域不包含健康果肉fresh框完整包裹整个果实无截断。这说明标注员经过专业培训不是随便画个大方框。步骤2全量扫描揪出硬伤# 扫描全部7100张生成错误报告 python show.py --source data/train/images --labels data/train/labels --check --report-file train_check_report.txt报告里显示Total invalid boxes: 17 (0.24%)全部集中在IMG_20231015_*.jpg这批图。定位到这些文件用标注工具打开发现是某款APP在导出时把坐标乘了2倍——批量除以2修复即可。17处错误5分钟搞定。步骤3分布诊断确认数据健康度# 生成统计摘要 python show.py --source data/train/images --labels data/train/labels --stats --stats-file train_stats.csv打开CSV重点关注rotten_ratio列腐烂框占总框比31.7%。再看avg_objects_per_image1.92。这两个数告诉你数据集既没刻意堆腐烂样本避免过拟合也没回避缺陷保证召回率且构图符合单果检测逻辑。如果avg_objects_per_image是5.2那你得怀疑是不是把整筐柑橘当一个目标标了。步骤4弱点定位指导后续增强# 模拟0.6置信度下的低质量框分布 python show.py --source data/train/images --labels data/train/labels --simulate-conf 0.6 --low-conf-thresh 0.6 --save-low-conf viz_lowconfviz_lowconf里会存下所有被标记为“低置信”的图。我们发现其中63%的图腐烂区域都位于果实侧面或底部光照弱且常有枝叶投影干扰。这直接指导我们在训练时加入RandomPerspective模拟侧视角度和CLAHE增强暗部对比度这两个augmentation而不是泛泛地加RandomBrightness。这套流程做完你对数据集的理解就从“有7100张图”升级到了“知道哪17张有问题、为什么腐烂样本占比31.7%最合理、哪些场景是模型当前的阿喀琉斯之踵”。这才是show.py的真正价值——它把数据质检从主观抽查变成了客观可量化的工程环节。4. 农业场景落地避坑指南从数据包到产线部署的5个血泪教训4.1 教训一别迷信“高分辨率”产线相机才是你的ground truth这个数据包的所有图像原始分辨率是4000×3000但最终统一resize到640×640输入模型。很多人第一反应是“啊这么高清的图缩到640太浪费了我要训1280”——我劝你先摸摸产线上的工业相机参数。去年合作的分拣线用的是海康MV-CH050-10GC最大输出1920×108030fps但为了保证帧率实际设置是1280×72060fps。你训1280模型推理速度直接掉到12fps产线传送带速度就得降一半客户当场翻脸。实操建议- 先确认你的部署端硬件Jetson OrinRK3588还是工控机GPU和相机参数分辨率、帧率、接口类型- 用show.py生成一批640×640的可视化图和产线实拍图并排对比——如果640图里腐烂斑点依然清晰可辨人眼能认出那就够了- 我们实测640×640下5mm²腐烂斑在图中占约12×12像素YOLOv8s的head能稳定捕捉强行上1280mAP只提升0.8%但推理延迟增加47%。这笔账产线老板比你算得清。4.2 教训二验证集必须“隔离”否则你会被自己的假阳性骗惨有个团队用这个数据包训模型在valid集上mAP做到0.89兴冲冲部署到果园结果第一天就误杀37%的好果。查原因发现他们的验证集是从train里随机切的1200张而train里有大量同一棵树、同一时段拍的图。模型记住了“这棵树的叶子纹理新鲜”而不是“果皮状态新鲜”。当换到新果园叶子纹理一变模型就懵了。正确做法- 把data/valid/当成神圣不可侵犯的禁区绝不参与任何训练、调参、augmentation测试- 如果你要做消融实验比如试不同backbone所有实验必须用同一套valid集评估而不是每次重新切- 更狠的一招在valid集里故意混入10%的“干扰样本”——比如其他水果苹果、梨的图标注为ignore类YOLO支持。模型如果对这些图也输出高置信度fresh/rotten说明它学到了虚假特征。我们就在valid里放了87张苹果图成功筛掉两个过拟合严重的模型。4.3 教训三腐烂样本不是越多越好关键是“难例”的密度数据包里腐烂样本占31.7%但如果你去看viz_lowconf文件夹会发现最难判的腐烂图其实只占腐烂总数的12%。这些“难例”包括- 早期褐变仅果皮表层微黄直径3mm- 湿腐果皮渗液反光与水珠混淆- 多病共存日灼伤局部霉变边界交织。经验技巧- 训练时对这12%的难例样本启用ClassWeightedLoss类别加权损失让模型多关注它们- 在augmentation里对难例图做针对性增强用elastic_transform模拟果皮褶皱变形用motion_blur模拟传送带高速运动模糊- 最有效的一招把show.py生成的viz_lowconf图手动挑出50张最典型的加入训练集并在yaml里单独设置weight: 2.0权重加倍。我们试过这50张带来的提升超过新增500张普通腐烂图。4.4 教训四class.names顺序错了产线会直接报废一车货这事真发生过。某团队用这个数据包训模型本地测试完美一上产线就疯狂剔除好果。查了三天发现是部署时把names文件写成了rotten fresh导致模型输出的pred[0]是腐烂概率但PLC控制器以为pred[0]是新鲜概率于是把所有高pred[0]的果都吹走了——全是好果。防错 checklist- 训练前用python -c from ultralytics import YOLO; mYOLO(yolov8s.pt); print(m.names)确认names顺序- 导出onnx时加参数--include-names确保names嵌入模型- 部署前用show.py的--simulate-conf功能对一张已知fresh的图运行确认输出的fresh概率最高- 终极保险在PLC控制逻辑里加一句if pred_fresh 0.95 and pred_rotten 0.05: accept()双重校验。4.5 教训五show.py的“保存图”功能是给客户看的不是给你调参的很多工程师喜欢用show.py生成的可视化图去手动调整NMS阈值比如把0.45改成0.3来多抓框。这是大忌。show.py画的框是gtground truth不是pred模型预测。你看到的“框太松/太紧”反映的是标注质量不是模型问题。真正该调的是训练时的iou_loss权重、cls_loss权重而不是靠可视化图“感觉”来调后处理。正确调参路径- 第一步用show.py确认gt框质量是否紧贴果皮、是否覆盖全腐烂区- 第二步训一个baseline模型yolov8sdefault aug在test集上跑yolo val datadata.yaml modelbest.pt看详细指标- 第三步如果fresh召回率低说明模型不敢预测fresh——加大cls_loss权重或减少mosaic强度避免把好果切碎- 第四步如果rotten精确率低说明模型乱标腐烂——加大iou_loss权重或增加mixup让模型学会区分相似纹理。记住show.py是你的数据显微镜不是模型调节旋钮。把它用对了你才能少走半年弯路。5. 常见问题与排查技巧实录那些让你半夜爬起来debug的瞬间5.1 问题训练loss震荡剧烈甚至NaN但show.py检查标注完全正常现象train_batch0.jpg里loss突然飙到inftensorboard里曲线像心电图。排查思路- 先排除数据python show.py --source data/train/images --labels data/train/labels --check确认无invalid box- 再查图像用identify -verbose IMG_001.jpg看是否有损坏常见于手机传输时的jpeg截断- 最后盯住batch在train.py里加一行print(fBatch {i}, max pixel value: {im.max()})发现某张图max pixel6553516位图而YOLO默认按8位0-255读取导致数值溢出。解决方案- 在dataset加载时强制转8位img cv2.cvtColor(img, cv2.COLOR_BGR2RGB); img np.clip(img, 0, 255).astype(np.uint8)- 或者用find ./data/train/images -name *.jpg -exec identify -format %wx%h %r\n {} \; | grep 16-bit批量找出16位图用ImageMagick批量转换mogrify -depth 8 *.jpg。实操心得农业图像常有16位扫描图混入这是比标注错误更隐蔽的坑。建议在数据包解压后第一时间运行find ./data -name *.jpg -exec file {} \; | grep 16-bit全局扫描。5.2 问题模型在test集上fresh召回率99%但rotten召回率只有62%现象客户说“好果全留下了但坏果漏了一半”。排查思路- 先看test集分布python show.py --source data/test/images --labels data/test/labels --stats发现rotten框总数仅892个远低于train的5672个说明test集腐烂样本不足- 再看漏检图用yolo val datadata.yaml modelbest.pt save_txt生成pred用脚本对比gt和pred发现漏检的rotten图83%都出现在IMG_20231102_*.jpg这批——正是云南宾川产区的图果皮蜡质层厚早期褐变反光弱。解决方案- 立即从train集中筛选出所有“蜡质层厚早期褐变”的图用show.py的--simulate-conf 0.5找低置信腐烂图复制50张到test集并更新test/labels/- 在训练时对这批图启用AutoAugment策略专门增强低对比度区域- 长期联系宾川基地补充200张针对性样本。注意不要用“提高rotten置信度阈值”来硬补。那样会把fresh误判为rotten客户要赔钱的。召回率低本质是数据覆盖不全得补数据不是调阈值。5.3 问题show.py运行报错“ModuleNotFoundError: No module named ‘cv2’”现象新手第一次跑环境缺OpenCV。速查表错误信息可能原因一行解决命令No module named cv2未安装opencv-pythonpip install opencv-python-headless服务器无GUIlibGL.so.1: cannot open shared object fileUbuntu缺图形库apt-get update apt-get install -y libglib2.0-0 libsm6 libxext6 libxrender-devUnicodeDecodeError: utf-8 codec cant decode byte 0xff图片路径含中文export PYTHONIOENCODINGutf-8或重命名文件夹为英文cv2.error: OpenCV(4.8.0) ... width is negative图像损坏或格式异常find ./data -name *.jpg -exec file {} \; | grep -v JPEG image data找出非jpg文件终极方案用Docker封装环境Dockerfile里写死FROM python:3.9-slim RUN pip install opencv-python-headless ultralytics numpy pandas COPY . /app WORKDIR /app CMD [python, show.py, --source, data/train/images, --labels, data/train/labels]docker build -t citrus-viz . docker run --rm -v $(pwd):/app citrus-viz彻底告别环境问题。5.4 问题训练速度慢GPU利用率只有30%现象A100上跑nvidia-smi显示GPU-Util 30%CPU占用90%。根因分析YOLO数据加载瓶颈不在GPU而在CPU的图像解码和augmentation。show.py用的是单线程cv2.imread而训练用的torch.utils.data.DataLoader默认workers0所有预处理挤在主线程。提速方案- 在train.py里把dataloader的num_workers设为CPU核心数-1如16核设15- 加pin_memoryTrue加速GPU内存拷贝- 关键把mosaic和mixup这类重计算aug移到GPU上做Ultralytics v8.1支持cuda_augTrue- 我们实测16核CPURTX4090num_workers12pin_memoryTrueGPU-Util从30%升到89%epoch time从42min降到18min。提示show.py本身不涉及GPU所以它跑得慢没关系但训练时的dataloader配置直接决定你能否在24小时内完成一轮完整训练。5.5 问题部署到Jetson Orin后推理速度只有5fps远低于宣称的25fps现象本地RTX4090跑25fpsOrin上只有5fps。排查清单检查项正确值错误表现解决方案TensorRT版本8.6.1trtexec --version显示8.2升级JetPack到5.1.2模型精度FP16trtexec --fp16未启用导出时加--half参数输入尺寸640×640用了1280×1280重训640模型或用--imgsz 640强制resize内存带宽LPDDR5 256GB/snvidia-smi -q -d MEMORY显示带宽不足关闭后台进程sudo jetson_clocks超频OpenCV后端CUDA加速cv2.getBuildInformation()无CUDA重编译OpenCV with CUDA最快见效法直接用Ultralytics官方ONNX导出TensorRT部署流程yolo export modelbest.pt formatengine imgsz640 halfTrue device0 # 生成best.engine然后用trtexec验证 trtexec --onnxbest.onnx --fp16 --workspace4096 --shapesinput:1x3x640x640我们用这个流程在Orin上实测达到23.7fps误差在1fps内。我在果园里调试分拣设备时常看到老师傅蹲在地上捏一捏柑橘闻一闻气味再凑近看看果皮——那是几十年经验沉淀的判断。而这个数据包不是要取代老师傅而是把他的经验变成机器能读懂的语言。7100张图每一张背后都是晨露未干的枝头、沾着泥土的果筐、还有农技员在烈日下举着手机拍图的影子。它不完美但足够真实它不炫技但足够落地。当你把yolo train命令敲下去看着loss曲线平稳下降那一刻你知道农业AI终于不再是PPT里的概念而是传送带上稳稳运行的齿轮。本文还有配套的精品资源点击获取简介7100张训练图、1200张验证图、600张测试图全部为真实场景下拍摄的柑橘图像每张图配有标准YOLO格式txt标注文件类别仅两个——新鲜、腐烂坐标已归一化x_center, y_center, width, heightclass.names文件直接可用。目录结构严格遵循YOLOv5/v8/v10通用规范train/、valid/、test/三级文件夹图片与标签一一对应无缺失、无错位开箱即导入训练。附赠show.py脚本一键运行即可在原图上叠加显示标注框快速核验标注准确性或用于教学演示。所有图像已完成统一尺寸适配与基础预处理兼容主流目标检测框架适合部署在产线分拣设备、智能仓储系统或田间质检终端中支撑柑橘表观品质的自动化判别任务。本文还有配套的精品资源点击获取