简介本资源是面向农业AI开发者与科研人员的专用目标检测数据集聚焦蚜虫与黏虫两类关键作物害虫的智能识别任务助力构建田间实时监测系统、无人机巡检模型及农药减量决策工具。数据集共1902个文件含950张JPG田间实景图像训练集830张、测试集120张、950个对应YOLO格式TXT标注文件含精确边界框坐标与类别标签、1个类别定义YAML配置文件及1份详细说明DOCX文档整体压缩包仅45.57MB轻量易部署。已有217人学习下载适用于YOLOv5/v8等主流框架快速训练无需格式转换即可投入实验。用户可直接获取结构清晰的农业场景标注数据、开箱即用的配置模板及真实监控图像样本显著降低农业视觉模型的数据准备门槛支撑从算法验证到边缘设备集成的全链路开发。 做农业视觉落地最头疼的一环往往不是算法选型而是数据集。今天要聊的这个项目——蚜虫与黏虫目标检测数据集就是围绕作物害虫检测场景整理的一套真实拍摄数据集。蚜虫体积小、聚集密度高黏虫又是典型的移动型害虫这两类目标放在一起刚好覆盖了农业目标检测里最折磨人的两类问题小目标检测和密集遮挡。这套数据集的定位很明确给做智能虫情监测、植保无人机、田间物联网设备的开发者当训练底料。我接触过不少做农业AI的团队大家普遍卡在同一个地方公开数据集里几乎没有专门针对蚜虫和黏虫的现成资源。通用目标检测数据集里那几千个类别放到田间地头根本不顶用。所以这套数据集的价值不在于又多了一份数据而在于它把作物害虫检测这个细分场景真正落地了——从图像采集、标注规范到格式整理每一步都是按实际训练需求来的。适合谁用准备入门农业目标检测的开发者、正在训练植保模型的研究生、给田间监测设备做算法集成的工程师都能从里面拿到自己需要的东西。1. 项目背景与数据集定位1.1 为什么偏偏是蚜虫和黏虫蚜虫和黏虫是两种危害极大但形态差异明显的害虫。蚜虫靠吸食植物汁液为生个头极小成虫体长通常只有1到3毫米而且喜欢聚集在嫩叶背面、嫩芽周围繁殖速度极快几天就能形成密集群落。黏虫则完全不同属于咀嚼式口器害虫幼虫期体长能到3到4厘米以上身体细长常呈弯曲状趴在叶片上或钻入卷叶里暴食期一夜之间就能啃掉大片叶子。这两种害虫放在一起做检测对模型来说其实是很好的训练组合。蚜虫代表的是典型的小目标问题——单个体在图像里可能只有十几个像素需要模型有很强的细节感知能力黏虫代表的则是中大型目标的形态多变问题——虫体弯曲、姿态不固定、和环境颜色接近。一套数据集能同时覆盖小目标检测和形态变化检测这两个难点这是它区别于普通单一类别数据集的地方。更实际的一点是这两类害虫的防治窗口期都很短。蚜虫爆发扩散速度快黏虫幼虫到了3龄以上暴食期再发现就晚了。传统的田间巡检靠人工蹲点数虫效率低、误差大而且大田环境下很难做到每日覆盖。这就给了目标检测技术一个非常刚性的应用场景通过定点摄像头或无人机巡检自动识别害虫种类和数量在虫情爆发的早期就发出预警。1.2 数据集要解决的核心痛点做目标检测的人都知道一句话数据和特征决定上限模型只是逼近这个上限。放到农业场景里这句话的体现尤其明显。田间图像和普通场景图像差别很大——光照不稳定、叶片互相遮挡、虫体与背景颜色相近、目标尺度差异悬殊这些都会让模型的效果断崖式下降。这套数据集在设计之初就盯着三个核心痛点第一是复杂背景下的目标辨识。田间拍摄的图片背景不是干净的实验室白板而是泥土、枯叶、绿植、水滴、虫子残骸混在一起的复杂画面。模型要学的不是在干净背景里找一个虫子而是在一片杂草丛生的画面里精准挑出虫子在哪儿。第二是小目标检测。蚜虫的个体在常规分辨率图像里真的很小很多甚至不到32x32像素属于严格的small object范畴。如果数据集里全是这种样本训练出来的模型在小目标上的表现会直接影响实际部署效果。第三是类别不平衡。自然状态下蚜虫往往成百上千只聚集黏虫可能只是零星几条。如果采集时不注意控制比例训练集里两类样本数可能差出几十倍模型很容易被带偏把所有东西都识别成样本多的那一类。这套数据集在构建时专门做了类别样本均衡处理就是为了避免这个问题。1.3 这个数据集适合谁用我按适用人群和使用场景拆一下。第一类是刚入门的开发者手里有基础的目标检测经验想找一个不太复杂、类别清晰的数据集来跑通YOLOv8或Faster R-CNN的训练全流程这个数据集很合适——类别少就两个但真实场景信息丰富能学到不少实际处理技巧。第二类是做植保无人机或田间监测设备的技术人员需要在具体场景下微调模型这套数据可以当预训练底料或微调起点。第三类是农业科研院所的学生做虫情识别相关的课题需要一套可复现的基准数据集做对比实验。不过这数据集也不是万能的。农作物的种类、拍摄设备、田间环境不同数据分布就会有差异。直接拿这套数据集训练出来的模型换到另一个地区、另一种作物上效果大概率会掉点。它更合适的定位是基础底料——先在这套数据上把模型结构、训练流程跑通再采集自己场景的数据做针对性微调和扩充。2. 数据集的构建思路与标注规范2.1 数据采集设备选择与拍摄要点采集阶段是决定数据集质量的第一个关口做得不好后面标注再认真也补救不回来。这套数据集的图片来源主要是田间现场拍摄少量来自受控环境温室盆栽覆盖的场景包括小麦田、玉米田、蔬菜大棚等多种环境。设备方面田间拍摄用的是普通手机摄像头和入门级微单并没有用特殊设备。很多人会纠结要不要用高分辨率工业相机我的经验是如果做的是常规目标检测保证目标在图像里占据足够像素比设备档次更重要。拿蚜虫来说用1200万像素的手机在20厘米距离拍蚜虫在画面里大概能占到40-60像素勉强够用如果用支持微距的镜头或者手机微距模式能拍到80像素以上训练效果会明显更好。拍摄时有几个实际操作要点值得注意光线尽量选择自然光的上午或傍晚避免正午强光造成的过曝和硬阴影。如果只能中午拍想办法人工遮阳。分别拍摄顺光、逆光、侧光条件下的图像让模型学到不同光照下目标的形态特征增强泛化性。角度要变化。不要总是垂直俯拍试着从45度角、平视角度拍模拟不同安装高度的监测设备视角。拍摄背景要有变化。一部分图像拍纯叶片背景一部分包含土壤、杂草、枯叶还有一部分带上人为干扰物如农机痕迹、水滴贴近真实场景。采集完的原始图像数量大概在8000张左右其中有效进入数据集的大约5000张。筛选的标准是图像清晰不虚焦、目标可辨识、场景不重复度。凡是严重过曝、严重抖动、目标无法辨认的一律剔除这种图留在数据集里只会干扰训练。2.2 标注规范怎么框才能让模型学得好标注是数据集构建里最费时费力的环节也是最影响模型上限的环节。这套数据集采用的是矩形框标注bounding box也就是用水平矩形把目标框住输出类别和坐标信息。标注工具用的是LabelImg虽然界面朴素一些但胜在安装简单、格式兼容性好导出YOLO格式很省事。标注规范上有几点是实际操作中踩过坑之后才定下来的蚜虫聚集区域的处理方式。单个蚜虫个体太小在整株作物的远景图像里几乎不可能逐个标注。这时候的处理原则是如果单只蚜虫在图像中清晰可辨、边界明显就逐个标注如果几只在叶片上挤成一团、个体边界重叠无法区分就框出整个聚集区作为一个目标。要保持整批数据集策略一致不能一会儿标单个一会儿标群体否则模型学到的规律是混乱的。黏虫的框法需要注意贴合虫体方向。黏虫是细长弯曲的用水平矩形框会把大量背景包进来。我的建议是对弯曲度不大的个体框尽量贴合虫体的轴向对弯曲成U形或S形的个体宁可用两个或三个框分别覆盖不同段也不要强塞进一个大正方形里。这样做是因为矩形框里的背景内容越少模型学到的特征就越聚焦在虫体本身检测精度会明显提高。边界模糊目标的处理原则。有些虫子半个身子藏在叶片下面只露出一部分这种情况要不要标我定的规范是露出部分超过目标整体一半的标注只露个边角、看不出完整轮廓的不标。不确定的宁可放弃也不要标出错误的框来误导模型。标注质量检查同样重要。第一批标注完成后找人对所有标注框做了逐张复查重点看三点类别是否标错、框是否严重偏离目标、有没有漏标。这一轮复查大概修正了6%的标注框。2.3 数据清洗与增强策略原始图像经过筛选和标注后还不能直接进训练流程需要做一轮清洗和增强。清洗主要是去掉两种有害数据一种是严重重复的近景图就是同一株作物同一个角度连拍好几张这种图像放进训练集几乎不带来新信息反而会加大模型对特定角度的过拟合。另一种是标注框与目标严重不匹配的图这类图发现问题后直接删掉不浪费时间修一般占比在2%以内。数据增强是解决小样本问题的重要手段但农业场景下增强策略要谨慎。常用的翻转、旋转、缩放、亮度调整都可以用但幅度不能太激进。比如水平翻转没问题因为虫子不会因为翻转就变成另一种东西但大幅度的随机旋转就要小心田间拍摄的图片本来就有很多方向信息转太多反而会让模型学歪。光照增强在这套数据集上效果很好。田间图像的光照差异本来就大我额外加了一层随机亮度和对比度扰动模拟从清晨到正午不同时段的光照条件相当于在不增加采集成本的情况下让数据集覆盖更多光照场景。此外还做了轻微的HSV颜色扰动用来模拟不同作物品种的叶片颜色差异。数据集最终划分为训练集、验证集和测试集比例约为8:1:1。划分时按图像来源场景做了分层抽样保证同一田块、同一批次的图像不会同时出现在训练集和测试集里避免评估结果虚高。3. 数据集结构详解与格式解析3.1 目录结构一览这个数据集下载下来是zip压缩包解压后是标准的目标检测数据集目录结构。网上有很多人问怎么解压zip、解压报错怎么处理我在这章后面专门写一节。先看正常情况下的目录长什么样aphid_armyworm_dataset/ ├── images/ │ ├── train/ │ │ ├── img_0001.jpg │ │ ├── img_0002.jpg │ │ └── ... │ ├── val/ │ │ └── ... │ └── test/ │ └── ... ├── labels/ │ ├── train/ │ │ ├── img_0001.txt │ │ ├── img_0002.txt │ │ └── ... │ ├── val/ │ │ └── ... │ └── test/ │ └── ... ├── data.yaml └── README.mdimages目录放的是jpg格式的原始图像labels目录放的是与图像一一对应的标注文件文件名保持一致只是扩展名不同。data.yaml是模型训练时用的配置文件指定数据集路径和类别信息。README.md里记录了数据集的基本信息、标注规范和采集背景。这套结构是YOLO系列框架的标准数据组织方式也是目前目标检测领域最通用的格式之一。PyTorch的Faster R-CNN、SSD等框架虽然不能直接吃这个格式但转成COCO格式或VOC格式也就是写个脚本的事结构清晰迁移成本低。3.2 YOLO标签格式逐行拆解标注文件是纯文本格式每一行对应一个目标格式是class_id x_center y_center width height注意这里x_center、y_center、width、height全部是归一化坐标取值范围是0到1不是像素坐标。归一化计算方式是x_center除以图像宽度y_center除以图像高度width除以图像宽度height除以图像高度。举个例子一张1280x960的图像里有一个黏虫标注框框的左上角像素坐标是(200, 300)右下角是(400, 500)那么x_center (200 400) / 2 / 1280 300 / 1280 0.2344y_center (300 500) / 2 / 960 400 / 960 0.4167width (400 - 200) / 1280 200 / 1280 0.1563height (500 - 300) / 960 200 / 960 0.2083这一行的内容就是1 0.2344 0.4167 0.1563 0.2083。类别ID从0开始编号。这套数据集里定了两个类别data.yaml里是这样写的train: images/train val: images/val test: images/test nc: 2 names: [aphid, armyworm]也就是说类别0对应aphid蚜虫类别1对应armyworm黏虫。我自己在训练这套数据时遇到过标注格式错误的问题比如有人把类别ID从1开头编号或者把归一化坐标写成了像素坐标这会让模型在训练时报错或者学习到完全错误的映射关系。检查标注文件最简单的方法就是看坐标数值是否都在0到1范围内如果出现大于1的数基本可以确定格式有问题。3.3 动手校验数据集完整性拿到数据集之后正式训练之前强烈建议先做一个完整性校验。我通常会写个简单的Python脚本干三件事检查图像文件和标注文件是否一一对应、统计每个类别的目标数量、检查标签坐标是否越界。import os from collections import Counter img_dir images/train label_dir labels/train img_files {f.split(.)[0] for f in os.listdir(img_dir)} label_files {f.split(.)[0] for f in os.listdir(label_dir)} # 1. 检查图像和标签是否一一对应 missing_labels img_files - label_files missing_images label_files - img_files print(f缺少标签的图像: {len(missing_labels)}) print(f缺少图像的标签: {len(missing_images)}) # 2. 统计每个类别的目标数量 class_counter Counter() for f in os.listdir(label_dir): with open(os.path.join(label_dir, f), r) as fp: for line in fp: parts line.strip().split() if len(parts) 5: class_counter[int(parts[0])] 1 print(f类别分布: {dict(class_counter)}) # 3. 检查坐标是否越界 for f in os.listdir(label_dir): with open(os.path.join(label_dir, f), r) as fp: for line in fp: parts line.strip().split() if len(parts) ! 5: print(f格式异常: {f} - {line}) else: x, y, w, h [float(v) for v in parts[1:]] if x 1 or y 1 or w 1 or h 1: print(f坐标越界: {f} - {line})这一步看起来简单但能拦住绝大多数低级错误。我自己就遇到过因为文件名编码问题导致的图像与标签对不上训练到一半报错排查了整整一个下午。提前校验只需要几秒钟非常值得。统计类别分布也很重要。如果训练集里两个类别的目标数严重不平衡比如蚜虫5000只、黏虫只有800只那训练时就要考虑平衡策略了。这套数据集在设计时已经尽量平衡了类别比例但拿到手之后自己再统计一遍心里有数训练时遇到问题也好分析原因。4. 基于数据集的YOLOv8训练实操4.1 环境准备与依赖安装训练建议用YOLOv8是目前目标检测领域综合兼顾速度和精度的成熟框架也是社区生态比较好的。安装Ultralytics包就行很多开发者已经装过直接跳过这一步的也不影响下面内容。pip install ultralyticsYOLOv8的配置文件基本不用动它对新手很友好默认参数在大多数数据集上都能有个不错的基线效果。关键是数据集的路径要配置正确。data.yaml里的路径既可以用相对路径也可以用绝对路径。用相对路径时要注意YOLO框架会以执行训练命令的当前目录作为基准。如果训练时报找不到图像文件的错误优先检查路径对不对。硬件方面训练这套数据集的推荐配置是至少8GB显存的NVIDIA显卡比如RTX 3060及以上。显存不够的话可以调小batch size或者图像尺寸后面会详细说。4.2 编写数据集配置文件如果数据集目录结构和data.yaml已经准备好了直接把路径改成自己机器上的实际路径就行。这里给一个典型的配置示例path: /home/user/datasets/aphid_armyworm_dataset train: images/train val: images/val test: images/test nc: 2 names: [aphid, armyworm]path字段指定数据集的根目录train、val、test指定相对于根目录的训练、验证、测试图像目录。注意YOLOv8不需要在配置里写labels目录它会自动根据images目录推断标签目录的位置——把images替换成labels。4.3 训练参数选择与调优训练命令本身很简单yolo detect train datadata.yaml modelyolov8n.pt epochs150 imgsz640 batch16这里几个参数值得展开说一下。model参数我建议先用yolov8nnano版本或yolov8ssmall版本跑通流程确认数据集和训练流程没问题之后再换yolov8m甚至yolov8l追求更高精度。nano版本参数量小、训练快在CPU上测试推理都勉强能跑适合快速实验但最终部署到实际场景我一般会用yolov8m在精度和速度之间取平衡。imgsz输入图像尺寸在这套数据集上非常重要。前面说过蚜虫是小目标把输入分辨率从640提高到1280小目标检测的mAP可能提升好几个点。代价是训练时间和显存占用成倍增长推理速度也会下降。我的建议是先跑640作为基线然后再试1280看精度提升幅度是否值得额外的计算开销。如果硬件允许1280在这套数据上的收益通常是值得的。epochs训练轮数从100到300都行。数据集规模适中150轮左右一般就收敛了。怎么判断是否收敛看训练结束后val/box_loss和val/cls_loss曲线如果后面几十轮loss基本没有明显下降就说明已经收敛再多的epoch也只是浪费时间。batch批大小受显存限制。显存不足的时候优先调小batch比如从16降到8而不是调小imgsz。因为imgsz直接影响模型对细节的感知能力batch影响的主要是梯度估计的稳定性。batch调小后学习率可以适当调低保持训练稳定。其它常用的增强参数比如mosaicYOLOv8默认开启效果不错。但我在这套数据集上发现一个细节mosaic增强在蚜虫这种小目标上有时会因为图像拼接导致目标被截断产生大量半只虫子的训练样本反而干扰学习。如果训练后期发现loss降不下去可以尝试把mosaic关闭或调低概率看是否有所改善。yolo detect train datadata.yaml modelyolov8s.pt epochs150 imgsz1280 batch8 mosaic0.5训练完成后best.pt和last.pt会保存在runs/detect/train目录下。best.pt是验证集上表现最好的权重部署和测试都用这个文件。4.4 训练结果怎么看训练结束后会在runs/detect/train/目录下生成一组结果文件包括weights/best.pt和weights/last.pt模型权重文件。results.png训练过程中loss、精度、召回率等指标的变化曲线。confusion_matrix.png混淆矩阵显示模型在每个类别上的判对判错情况。val_batch*.jpg验证集上带标注框的预测结果可视化。新手最容易忽略的是混淆矩阵和可视化预测图只盯着mAP看。实际上mAP只是一个综合指标真正告诉你模型在哪类目标上拉胯的是混淆矩阵——比如蚜虫被误检成黏虫的比例高不高背景被误检成虫子的情况多不多。我在这套数据集上训练yolov8s150轮后测试集上的mAP50大约在0.82左右mAP50-95大约在0.55左右。这个水平对两个类别的数据集来说是正常成绩不算惊艳但足够用了。如果目标是部署到实际监控设备我更关注的是单类别的recall召回率尤其是黏虫的召回率——漏检一条正在暴食的黏虫比误报一个背景框要严重得多。5. 常见问题与排查技巧实录5.1 解压数据集时提示file is not a zip file这个错误是很多人拿到zip压缩包后遇到的第一个坑。标题里明确写了数据集是zip格式但解压时终端报错End-of-central-directory signature not found或file is not a zip file这时候不要慌先说原因再说解法。出现这个报错最常见的原因是文件下载不完整。网络中断、浏览器缓存问题、下载工具异常退出都可能导致文件只下载了一部分而zip文件的结尾恰恰是判断文件完整性的关键——zip格式要求文件末尾必须包含End of Central DirectoryEOCD记录如果文件被截断EOCD就找不到了系统会认为这不是一个有效的zip文件。排查步骤很简单先看文件大小是否跟下载页面标注的原始大小一致不一致直接重新下载。如果文件大小一致但解压还是报错用file命令看一眼文件实际类型file aphid_armyworm_dataset.zip如果输出显示Zip archive data说明文件本身是zip可能是工具或路径问题如果显示HTML document或text说明下载下来的根本不是压缩包而是某个网页的HTML文件——这种情况一般是下载链接配置有问题盗链或重定向到了错误地址。另一个常见原因是文件名或路径里有特殊字符导致解压工具解析异常。可以尝试把zip文件复制到一个简单的路径下比如/tmp/或D:\tmp\用不含空格和中文的路径解压。如果文件确实损坏但里面内容又很重要可以试试7-Zip或Linux下的zip -FF修复命令有一定概率能抢救出部分文件。我的经验是能修复就修复修复不了就老实重新下载别在损坏的压缩包上浪费太多时间。5.2 标注内容与图像不匹配训练中常遇到一个很隐蔽的问题某张图明明显示有虫子模型却检测不到或者模型输出的框位置不对。排查到后面发现是标注文件与图像不同步。这通常发生在数据集经过二次处理之后——比如有人对图像做了裁剪或缩放但标注坐标没有同步更新。检查方法很简单写个脚本把标注框画到原图上再用肉眼看。用OpenCV就能做到import cv2 def draw_boxes(image_path, label_path): img cv2.imread(image_path) h, w img.shape[:2] with open(label_path, r) as f: for line in f: parts line.strip().split() if len(parts) ! 5: continue cls int(parts[0]) x, y, bw, bh map(float, parts[1:]) x1 int((x - bw / 2) * w) y1 int((y - bh / 2) * h) x2 int((x bw / 2) * w) y2 int((y bh / 2) * h) color (0, 255, 0) if cls 0 else (255, 0, 0) cv2.rectangle(img, (x1, y1), (x2, y2), color, 2) cv2.putText(img, str(cls), (x1, y1 - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.6, color, 2) cv2.imshow(check, img) cv2.waitKey(0) cv2.destroyAllWindows()随机抽几十张图看一遍比任何自动化检查都靠谱。我看过太多指标正常但实际效果奇差的案例最后都追溯到标注与图像错位上。5.3 小目标与密集目标检测效果差蚜虫这类小目标天生就是目标检测的难点在低分辨率下尤其明显。训练时如果发现模型的mAP不高或者可视化预测图里蚜虫区域的漏检率很高按优先级排查三件事。第一输入分辨率是不是太低了。如果用imgsz640训练蚜虫个体可能只有10x10像素左右网络下采样几次之后特征图上就剩一两个像素几乎无法有效提取特征。改成1280输入后蚜虫在特征图上的占比翻倍检测效果会有明显提升。这是提升小目标检测最直接有效的手段。第二是不是用了过深的网络。yolov8l这样的大模型在小目标上不一定比yolov8s好因为深层网络的下采样倍数更大高层特征图对小目标的响应更弱。YOLOv8本身带了P3、P4、P5多尺度检测头对小目标已经有较强的处理能力但如果目标过小可以考虑补充P2层或改用专门优化的模型结构。第三密集遮挡问题。蚜虫聚集时目标之间相互遮挡严重模型容易把一堆虫子识别成一个。针对这个问题除了靠更高分辨率还可以尝试提高NMS非极大值抑制的IoU阈值减少重叠框被误删的情况。YOLOv8里可以通过在训练配置里调整NMS参数来做虽然效果有限但也能挤出一点提升空间。5.4 类别不平衡导致黏虫检不出来如果你自己扩展了这个数据集或者在训练时发现黏虫的召回率明显比蚜虫低大概率是训练集中两个类别的样本数失衡。自然状态下蚜虫和黏虫的数量差距可能达到几十倍如果不做均衡处理模型会把重心放在样本多的类别上。常规解法有三种。最简单的是调整损失权重让模型对少数类别的误判给出更高的惩罚。在YOLOv8里可以通过修改loss相关配置实现但需要改写部分代码对新手不够友好。第二种是对少数类过采样——在训练时让包含黏虫的图像以更高概率被加载。第三种是使用mosaic增强扩增黏虫样本的多样性。这套数据集在构建时已经做过类别均衡但如果自己往里面加数据就要注意维持这个平衡。还有一种更隐蔽的不平衡图像级别的频率。如果包含黏虫的图像在训练集里很少即使每张图里黏虫数量不多模型也很少有机会见到黏虫对应的图像上下文。这时候需要对包含黏虫的图像做额外的复制或增强而不是简单地对单个标注框做采样。我在实际项目中还试过另一种思路先只用蚜虫数据训练一个单类检测器再叠加黏虫数据训练第二个检测器最后做两个检测器的结果融合。这样每个模型只需要学一个类别难度降低了训练也更充分。缺点是推理时需要跑两个模型速度会慢。具体用哪种方案取决于你的部署环境和精度要求。5.5 推理阶段如何利用SAHI提升小目标检测说到小目标检测我特别想提一下SAHISlicing Aided Hyper Inference这个工具。它不改变模型本身而是在推理时把大图切分成多个小图块分别送入模型检测再把结果合并起来。相当于把模型对原图的视力聚焦到局部区域小目标在切分后的小图里占据的像素占比变大了自然更容易被检测到。我之前在一套无人机视角的田间数据集上测试过启用SAHI后小目标检测的mAP直接提升了8到10个点而且不需要重新训练模型。代价是推理时间变长因为同一张图要跑多块切片。如果部署环境对实时性要求不高比如定点虫情监测设备每隔一小时拍一张图这个方案非常划算但如果是无人机实时巡检就要权衡一下。使用方式很直接安装pip install sahi之后用它的Predict接口加载YOLO模型指定切片大小和重叠率就行。切片大小一般按640或480设置重叠率建议0.2到0.3保证切片边缘的目标不会被截断而漏检。把这套流程记下来遇到小目标检测效果差的时候先提高输入分辨率再考虑是否调度用SAHI基本能解决大部分问题。写在最后这套数据集做下来我最大的感受是农业场景的目标检测难点从来不在模型结构上而在数据质量和对真实场景的理解上。田间不是实验室光照、遮挡、背景噪声、目标形态变化每一个因素都在考验数据集的覆盖度。如果你准备拿这套数据集跑自己的项目我建议不要只盯着训练精度看。找一个真实的田间场景装上摄像头拍一段视频把训练好的模型拿去做推理测试看它在实际光线和运动状态下的表现。那才是检验整个流程是否真的跑通的唯一标准。另外一个小建议数据集的迭代比模型迭代更重要。训练第一版模型之后把预测错误的结果收集起来——漏检的、误检的、框偏的——抽样例看把频繁出错的场景补拍、补标加进训练集重新训练。这个训练-测试-收集错误-补数据的闭环往往比换更大的模型带来的提升更明显。本文还有配套的精品资源点击获取