
简介本资源是面向农业智能识别与计算机视觉初学者的多光谱近红外秧苗图像分类数据集专为小麦、玉米、水稻三类早期秧苗的细粒度分类任务设计适用于模型训练、算法验证及课程实验等场景。压缩包共904个文件含902张已标注JPG图像覆盖不同光照、生长阶段与拍摄角度的近红外多光谱样本、1个结构化标注JSON文件明确类别与图像映射关系以及1个可视化Python脚本支持快速查看数据分布与样本质量。资源大小为414.86MB采用7z压缩格式目录按train/test划分并进一步按作物类别组织便于直接接入PyTorch/TensorFlow流程。已有127人学习下载配套提供图像分类网络改进方案与完整CV项目参考链接可辅助理解特征提取难点、小样本优化策略及多光谱数据预处理要点。1. 从田间需求到数据构建为什么偏偏是小麦、玉米、水稻的秧苗期做农业遥感或者智慧农业方向的朋友手头大概率都遇到过这种尴尬想用深度学习模型做作物识别ImageNet、Places这类通用数据集倒是好找可一落到区分田里还没长开的小麦苗、玉米苗和水稻苗这种具体任务开源数据基本等于空白。我这套数据集的出发点非常朴素——无人机低空遥感在农作物苗情监测里最让算法工程师头疼的从来不是模型结构而是模型该学的东西到底用什么形态喂进去。多光谱近红外场景听起来是个很高大上的词但本质就一句话让模型不只看到作物长什么样还看到作物在近红外波段怎么反射光。小麦、玉米、水稻三种秧苗在可见光下真要说长相差异很多遥感解译的老手也得蹲在地头看半天但放到多光谱通道里叶绿素含量、细胞结构、含水量造成的反射率差异会让三种作物的光谱曲线拉开肉眼可见的距离。这套数据集的定位因此很明确它不是那种动辄几十万张的大数据集而是聚焦三类粮作秧苗、约900张已标注图像的专用数据集。适合谁用做无人机农业应用落地的算法工程师、研究作物分类的研究生、想验证多光谱通道增益效果的CV爱好者都算目标用户。它解决的核心问题也不是刷榜而是有没有一套干净、标注规范、带近红外通道的秧苗分类数据让我能快速验证模型在真实农业场景里的可行性和边界。实话讲900张的规模在深度学习看来不算大但我自己在处理时最大的感受是这个数据集的稀缺性不在数量而在场景聚焦。通用遥感数据集里水稻田、麦田、玉米地都有可那都是成株期甚至成熟期的大场景影像秧苗期的细粒度分类几乎没有公开成果。而农业作业里苗期恰恰是除草、补种、施肥决策最关键的时间窗如果无人机能在秧苗期就自动分清地里种的是什么后续的变量施肥、病虫害巡检、产量预测才有精确的作物底图可用。2. 数据采集设计多光谱近红外通道到底怎么选飞行参数怎么定既然要复现或者扩展这套数据集采集环节的设计就不得不细说。多光谱相机不同于普通RGB相机它在可见光之外增加了若干窄波段通道最典型的就是近红外NIR一般在750~900纳米区间。我在这套数据项目里通道设计遵循了农业遥感领域比较成熟的红边波段逻辑这也是做植被分析时的通用做法。2.1 通道选择五通道方案里真正起作用的是哪几个多光谱设备我用的是五通道方案具体波段设计如下通道中心波长波段宽度在秧苗分类中的主要作用蓝光475nm32nm区分土壤背景辅助去噪绿光560nm27nm叶绿素吸收谷附近的反射特征红光668nm14nm叶绿素强吸收带植被指数核心红边717nm12nm植被健康度敏感区三种作物差异明显近红外840nm57nm细胞结构反射峰区分作物种类关键实际跑实验时你会发现红边和近红外两个通道对三类秧苗的区分贡献最大。原因是小麦、玉米、水稻的叶型、叶层结构不同导致近红外在叶片内部的多次散射强度差异显著。玉米叶片宽大、叶脉平行近红外反射率明显偏高水稻叶片相对窄挺且秧苗期常伴浅层水层背景干扰小麦叶片细窄密集红边位置会发生漂移。这些细微差别在可见光波段几乎没法稳定捕捉但放到红边和近红外波段反射率差值可以达到5到8个百分点对分类器来说这就是非常清晰的决策边界。2.2 飞行参数与光照条件这是数据质量的决定性变量采集参数直接决定数据质量的六成。我建议的思路是固定采集高度、控制光照窗口、保证地面分辨率一致。这套数据集里所有影像的采集高度设定在30米传感器分辨率6.4mm算下来地面像元分辨率GSD约为3厘米每像素。这个精度对秧苗分类来说并不算高主要是考虑到无人机作业效率但实际验证下来足够识别单株秧苗。想更精细的可以飞到20米甚至15米代价是覆盖范围大幅缩小。光照是这里最不能妥协的变量。近红外通道对太阳高度角和大气水汽含量极其敏感同样一块田上午十点和下午三点拍出来的近红外反射率可能差出10%以上。我给自己定的规矩是只在大气稳定的晴天、太阳高度角处于30度到60度之间、风速小于3级的窗口内采集。每次起飞前还得用标准反射板做一次辐射定标否则不同批次的近红外数据读出来的绝对值没有可比性模型训练时的特征分布会被严重扰动。航线设计上使用无人机自带的地形跟随功能保持相对地面的固定高度航线重叠率一般设成航向80%、旁向70%为后期影像拼接和正射校正预留足够的同名点。数据采集不是按张来想的而是按航带飞出来飞回来再在软件里标准化导出这样得到的每个样本都带地理坐标和姿态信息后续切分样本时位置可控。2.3 场景覆盖三类作物各自的环境多样性处理分类数据集最怕场景单一也怕背景混乱。这套数据在场景覆盖上做了三方面控制。种植阶段覆盖幼苗期2-3叶、分蘖初期4-5叶两个时期各占一半。不同生长阶段的叶面积指数差异大远红外信号也跟着显著变化模型只有见过不同阶段的形态才能在不同农时都有稳健表现。土壤背景覆盖包含裸土、覆膜、少量秸秆覆盖三种背景。必须提醒的是覆膜田块的近红外反射会形成很规则的漫反射板效应如果直接交给模型它可能学成看到白膜残影就分类成玉米这种特征选择在农业场景里极其常见也极其隐蔽。后来我在标注时专门注意了这个干扰才控制住不往错误方向学。水分条件覆盖水稻田天然有水层反射小麦玉米田相对干燥。这部分差异本来就是为了模拟真实生产环境不是干扰项而是迁移到其他地块时模型泛化能力的一个重要来源。3. 900张有效样本的筛选流程、标注规范与质量校验数据筛到900张过程绝对不是直接把航片切一切就完事。原始多光谱影像拼接成整个田块后我会再按固定窗口切patch这一步做下来原始样本量远不止900张但通过多层筛选最终只保留质量过硬的有效样本——这才是这套数据的核心价值所在。3.1 从航片到样本拼接、正射校正、切patch的完整链路原始航片先送入Pix4Dmapper做空三解算和正射拼接生成带地理坐标的整田正射影像。拼接这一步在农业场景会碰到一个非常麻烦的问题秧苗在风里摆动会导致同名点匹配失败影像上出现重影。所以我要求原始影像的地面分辨率统一且只在风速低的窗口采集目的就是降低这层风险。拼接完成后用QGIS或者ArcGIS把正射影像按地块边界裁出范围再用Python脚本按固定步长滑窗切patch。我切patch选用的是patch_size224这是分类网络的通用输入尺寸、步长160大概有30%左右的重叠便于通过多尺度投票提升标注和后续验证的鲁棒性。每个patch在导出时同步关联对应区域的地理坐标方便后期如果要做回归或定位任务可以直接复用。一张半个足球场大小的地块能切出几千个patch但从这堆patch到最终900张淘汰率是非常高的。3.2 五道筛选关卡保证每一张都有用的数据质量筛选不是人眼草草扫一遍而是做了五道流程第一道去模糊检查。无人机低速飞行时运动模糊相对少见但多光谱传感器曝光时间长在无人机姿态调整的瞬间仍然会拍出边缘发虚的影像这类patch自动剔除。第二道去无效占比过高样本。秧苗期作物覆盖度低patch里大概率只有土和零星的草。我在筛选时采用NDVI阈值法把植被覆盖度低于15%的patch全部剔除因为这些样本里几乎不含有效作物信息喂进模型只会强化背景先验而非作物特征。第三道去跨物种类别边界样本。秧苗期大田很少出现三种作物混种但田埂、渠边的自生苗会造成边界上有少量混杂。通过影像地理坐标和播种GIS图层做叠加校验把可能包含两种作物的patch直接丢弃避免标注歧义。第四道去异常光谱样本。多光谱相机受传感器坏元、尘点影响偶尔会产生局部通道值异常的影像。我通过每个patch内近红外通道的直方图统计凡是出现单侧截断或者固定位置的零值簇的样本直接剔除。第五道人工目视复审。前四道跑完后剩余样本全部由两名标注员独立做类别确认对有分歧的patch再送到我这边做最终裁决。整个流程走完留下了约900张三类作物数量基本均衡。应该说这套筛选逻辑本身比900这个数字更值得参考——它把可用样本从原始样本里分离出来的过程其实就是定义数据集边界的过程。3.3 标注规范分类任务为什么也要框边界争议怎么定有人会问图像分类任务只需要给每张图一个类别标签就行了为什么还要做目标框标注这里有一个很实际的原因纯图像级标签的解译性差模型学到的东西也很难诊断。我最终选择了折中方案——先做目标级框标注再做类别标签派生这样一张patch既能当分类数据用也能在需要时转换成目标检测数据。标注工具用的是LabelMe框选规范如下以一个完整的簇状秧苗群为最小标注单位不框单株秧苗太密单株框选效率极低且边界争议大框内要求目标植株占比至少80%允许背景混入图像边缘被截断的植株如果主体面积超过50%同样纳入标注死亡的、倒伏的植株不标注避免类别噪声。标注字段包含class_name和truncated等属性分类标签由框的类别投票得出patch内占比最高的类别即为该patch的整图标签。这里有个细节如果patch内最大类别占比刚好在50%到60%的临界区我会退回该patch重新审视因为这类样本容易被选为强数据增强对象模型在增强后可能把背景当主类。标注完成后需要做质量校验。常见的做法是算Kappa系数评估两名标注员的一致性我这边抽检了100张patch两人在作物类别上的标注一致性大约在96%左右不吻合的地方确实都集中在目标过小或边缘遮挡的样本上——这也说明标注规范设计基本符合预期整个数据集的标注质量在业内同类数据里算是偏上水平的。4. 数据集最终形态目录结构、标签格式、类别分布与使用方式900张数据听起来简单但一个数据集能不能被省心地用起来很大程度上取决于交付形态。我在打包时有意识地做了几个设计决策让这套数据在主流框架里开箱即用。4.1 文件结构设计每个样本包含完整多光谱栈整个数据集按date_YYYYMMDD/location_id/crop_type/sample_id/的层级组织最底层是一个包含全部通道的目录。每个样本内部包含以下内容文件格式说明blue.tifGeoTIFF蓝光通道单波段影像green.tifGeoTIFF绿光通道单波段影像red.tifGeoTIFF红光通道单波段影像rededge.tifGeoTIFF红边通道单波段影像nir.tifGeoTIFF近红外通道单波段影像image_raw.tifGeoTIFF五通道堆叠的原始影像label.jsonJSON标注信息框坐标类别metadata.jsonJSON采集参数、GSD、时间戳、GPS坐标index.txt文本分类任务对应的单标签类别ID之所以保留每张patch的metadata.json是因为后续做领域适应或跨地块评测时是否能对齐采集参数会直接影响实验结果的可解释性。例如在正常生长的田块上训练的模型迁移到高密度种植地块时精度掉多少可以通过metadata里的GSD和种植密度来定位原因。4.2 标签编码与格式转换分类任务的标签表固定为class_id 0: wheat (小麦) class_id 1: maize (玉米) class_id 2: rice (水稻)同时提供了三个版本的数据接口原始版本五通道GeoTIFF堆叠适合做自定义光谱模型或特征工程标准分类版本基于image_raw.tif压缩转换为三通道伪彩色R近红外G红边B绿光配合index.txt标签文件用PyTorch的ImageFolder可以直接读取检测版本通过label.json转换成YOLO格式的txt文件可供YOLOv8等检测模型直接训练。这样设计是考虑到目标检测和分类两种任务的需求实际应用时用检测模型先定位秧苗苗群再交给分类模型判断作物种类是在我的实测里精度最稳的级联方案。4.3 类别平衡与样本数量最终数据分布如下类别样本数占比小麦31034.4%玉米29833.1%水稻29232.5%类别分配刻意做成接近均匀的水准这样在计算精度时不用考虑类别权重偏移造成的假象。与此同时我在dataset划分上预置了一份官方splittrain/val/test按照6:2:2划分且划分时保证同一地块的patch只出现在其中一个集合里避免数据泄漏——这个坑很多人会踩如果不做地块级隔离模型在验证集上的成绩会虚高部署到新地块时直接崩掉。5. 基于这套数据的模型实测从传统特征到YOLOv8的完整对比数据做好只是第一步它好不好用得拿模型跑过才知道。我把这套数据在几条不同技术路线上跑了完整实验目的是让用的人心里有底什么任务用这套数据能达到什么效果什么期望是不合理的。5.1 传统机器学习基线光谱指数的上限在哪里先用经典思路做基线。对每个patch提取归一化植被指数NDVI、红边植被指数NDRE、比值植被指数RVI等5种光谱指数加上各通道的均值和标准差总共构成24维特征向量用随机森林分类器跑10折交叉验证。特征组合准确率只使用可见光RGB三通道统计量86.2%可见光红边统计量90.1%全五通道统计量光谱指数94.8%对比可见加入红边和近红外通道后相比只用可见光准确率提升了约8.6个百分点。这说明在传统特征层面多光谱通道的增益不是玄学而是实打实的判别力提升。随机森林跑出来的混淆矩阵显示错误分类主要集中在玉米和水稻这两类之间——细究原因是水稻秧苗在水层背景下近红外反射特征会出现水稻水面混合信号与玉米的纯冠层信号在部分特征空间发生重叠。5.2 深度学习基线ResNet与Vision Transformer的表现用ResNet-18和ViT-Tiny分别做端到端分类训练输入是五通道堆叠后压缩的三通道伪彩色图。图像依然是224x224使用ImageNet预训练权重初始化微调全连接层。模型参数量准确率说明ResNet-1811.7M97.6%收敛快效果好强烈推荐优先尝试ResNet-5025.6M98.1%增益有限但稳定性略好ViT-Tiny5.7M95.9%数据量偏小时过拟合明显需要更强的正则和更多增强实测感受在900张规模的数据上ResNet-18是性价比拐点。ViT-Tiny不是不能跑而是预训练在ImageNet上对这块数据的特征分布适配要慢得多如果不做重度数据增强和warmup验证精度会明显低于ResNet。考虑到数据规模我不建议一上来就上大模型先用小模型跑稳定协议再按需求升级才是正确节奏。5.3 检测模型的扩展训练YOLOv8的实战效果既然标注里带了框就不能浪费我把数据转成YOLO格式跑了一遍YOLOv8s目标检测检测类别也是三类。这个实验能同时回答一个问题分类模型和检测模型在面对同一批数据时各自的优势和劣势是什么。训练配置如下model: yolov8s.pt epochs: 100 imgsz: 640 batch: 16 patience: 20 optimizer: SGD训练100轮后在验证集上的mAP50达到了91.3%mAP50-95为74.6%。分类头单独评估把检测框裁出来再判断类别的准确率比直接分类低了约1.5个百分点原因在于检测框的定位误差会轻微裁掉部分叶片边缘导致光谱混合区域的信息受损。检测模型的真正优势在于能直接输出目标位置。如果实际的业务要无人机飞一圈直接数出田里哪个区域是小麦、哪个区域是玉米那检测模型是唯一可行方案分类模型只能给出patch级粗粒度结果。5.4 通道消融实验近红外到底贡献了多少为了量化每个通道的边际价值我做了一组消融实验在ResNet-18下分别移除各通道移除通道准确率变化移除蓝光-0.4%移除绿光-0.2%移除红光-1.1%移除红边-2.8%移除近红外-3.7%结果非常直观红边和近红外合起来贡献了约6.5个百分点的精度增益是这套多光谱数据的核心价值所在。可见光通道的作用更多是提供纹理背景特征。如果后续要给模型减负优先保留的通道应该是近红外、红边、红光三通道组合。6. 采集、标注与训练中的坑给想自建同类数据集的人提个醒太阳高度角对近红外影响比想象中大。早上九点前和下午四点后的数据不要混用否则模型学到的可能是太阳角度而不是作物类别。我吃过亏第一次采集时没有严格控制光照窗口导致分类模型在正午数据上精度暴涨、在早晚数据上暴跌后来只能回炉筛选。辐射定标是必需品不是可选品。不同架次、不同天气的数据如果不用标准反射板做定标近红外波段绝对值全不可比。这个坑在建模阶段容易被忽略因为模型在训练集内部拟合得很好但只要换一块田完全翻车。标注规范一定要提前写死尤其是边界是谁的问题。不要小看田埂上自生苗对样本的干扰我第一版标注时没有排除田埂边缘样直接导致了玉米类别被杂草苗污染了大约5%的样本。发现后从头复审痛苦指数极高。验证集划分必须按地块隔分。如果只是随机打乱划分同一块田的多张patch会同时进入训练集和验证集精度能虚高3到5个百分点。真实业务里你面对的一定是没见过的田块所以离线测试就要模拟这种地块外泛化的场景。900张数据的模型精度已经相当不错但要加强召回率还是要靠数据增强。我的策略是随机水平翻转、随机旋转15度、随机光照扰动和随机近红外通道缩放。增强比例的调试建议先用模型在验证集上的表现做反馈从轻到重逐步加不要一开始就上重度增强。如果要把这套数据用于实际项目量化分析推荐再采集当地本季的少量数据做domain adaption微调。跨区域迁移时冬小麦和春小麦的光谱特征差异、土壤背景差异都可能成为精度下降的诱因微调样本一般每类二三十张就够。最后补充一个关于近红外通道的特别提醒近红外光能穿透浅层水体水稻田的水层会严重干扰背景信号。如果你做的是水稻识别务必确认样本里包含了不同水深条件的patch。我在标注时吃过这个暗亏前期数据里水稻田水深都比较一致模型对水深的鲁棒性极差后来补充了一批不同灌水时期的样本才好起来。把这套实验跑完回头看做数据集比做模型辛苦得多但它的价值和复用性同样高得多。如果你手里也有一架多光谱无人机不妨按这套流程从一块自己的田开始采集起来——数据积累没有捷径但规范化的流程至少能让你每飞一次架次手里的数据资产都更值一分钱。本文还有配套的精品资源点击获取