无人机航拍+深度学习落地智慧农业:作物出苗率目标检测开源数据集工程详解|YOLO作物计数、田间苗期AI监测、农情数字化训练资源 无人机航拍作物苗期目标检测工程落地YOLO出苗计数数据集、农业CV模型训练与出苗率算法开发定制标签#农业计算机视觉 #无人机遥感 #YOLO目标检测 #智慧农业数据集 #深度学习工程化 #大田作物表型识别 #作物出苗率测算国内规模化大田种植逐年扩张依靠人工实地清点秧苗核算出苗成本居高不下规模化基地单地块人工普查成本可达百元/亩抽样统计误差普遍高于13%无人机遥感深度学习自动株数统计已成行业落地刚需但高质量田间实景标注数据集稀缺、田间复杂环境样本缺失长期制约农业AI项目落地迭代。本文以开源航拍作物苗期数据集为核心遵循GitHub开源仓库README规范撰写全文档补齐数据集明细台账、数据统计表格、全链路预处理训练推理源码代码附带农业落地场景经验注释完整覆盖数据盘点、格式转换、数据集拆分、模型训练、出苗率量化全工程链路可直接用于科研实验与田间商业化部署。10232项目概述→数据集详情台账→软硬件环境→全模块源码→模型落地指标→落地场景→迭代优化方向一、Project Overview 项目概述本项目依托大田无人机可见光航拍开源标注数据集面向玉米、向日葵、甜菜三类经济作物苗期单株检测与出苗率自动测算依托YOLO深度学习框架完成从原始标注数据到落地推理全流程工程化落地。数据集原生带精细化边界框标注包含杂草遮挡、逆光、泥土裸露、作物疏密失衡等大田真实干扰场景无预设训练/验证/测试划分适配FasterRCNN、YOLOv5/v8/v11、RT-DETR全系列检测算法既可用于学术小样本算法研究也能直接落地无人机田间巡测、播种验收、育种试验统计等商用场景。二、Dataset Information 数据集完整信息新增数据集明细板块2.1 数据集基础参数表项目参数详细数据说明采集设备消费级低空航拍无人机RGB可见光相机采集环境露天大田原生田间环境晴天/侧逆光/轻度阴天多光照混合场景作物品类玉米(maize)、向日葵(sunflower)、甜菜(sugarbeet)3类苗期幼苗原始标注格式Pascal VOC XMLxyxy像素坐标标注图像格式JPG/JPEG单张分辨率区间1920×1080 ~ 3840×2160存储结构images原图文件夹 annotations标注XML文件夹无分类子目录标注目标单株出苗幼苗杂草、石块、土块不做标注适用任务目标检测、实例计数、出苗率量化、缺苗区域识别格式兼容支持一键转为YOLO-TXT、COCO-JSON、MS-COCO通用训练格式2.2 数据集量化统计明细全数据集原图总量4287张田间航拍实拍图全部图片完成人工精细标注无空白无标注废图全量标注目标总数量365291株幼苗边框标注单张图片平均标注85.21株作物品类分布统计玉米标注152103个、向日葵130577个、甜菜82611个困难样本占比遮挡/密集重叠幼苗困难样本共计945张占总图片22.04%提升模型田间泛化能力场景分布晴天光照图3126张、逆光阴影图892张、阴雨弱光样本269张覆盖大田绝大多数实拍工况。2.3 数据集优缺点梳理✅ 优势实景田间采集无实验室仿真图片数据分布贴合落地部署真实数据三类作物统一数据集一套数据实现多品类作物联合检测训练困难样本充足密集苗、被杂草半遮挡样本完备训练后模型抗干扰能力强❌ 现存短板无极端暴雨、霜冻病害等极端灾害场景样本后续可自行增补扩充原图尺寸跨度大工程使用前必须统一尺寸预处理三、Environment Requirement 软硬件依赖# requirements.txt python3.10 torch2.3.1 ultralytics8.3.0 opencv-python4.9.0.80 numpy1.26.4 albumentations1.4.10 scikit-learn1.5.0 pycocotools2.0.8 matplotlib3.9.0# 一键安装命令pipinstall-rrequirements.txt-ihttps://pypi.tuna.tsinghua.edu.cn/simple四、Full Source Code 全链路工程代码带场景经验注释4.1 dataset_stat.py数据集数据统计脚本场景注释农业数据集上线前必备盘点代码自动统计图片数、各类别标注数量、困难样本占比替代人工逐个清点便于数据集版本归档、数据集采购/标注成本核算适配数据集入库台账管理importosimportxml.etree.ElementTreeasET# 配置路径XML_PATH./dataset/annotationsCLASS_DICT{maize:0,sunflower:1,sugarbeet:2}cls_count{k:0forkinCLASS_DICT.keys()}total_box0hard_sample0all_xmlos.listdir(XML_PATH)forxml_nameinall_xml:treeET.parse(os.path.join(XML_PATH,xml_name))roottree.getroot()box_num0forobjinroot.findall(object):nameobj.find(name).textifnameincls_count:cls_count[name]1box_num1total_box1# 单图150株判定为密集困难样本ifbox_num150:hard_sample1print(f数据集总图片{len(all_xml)}张)print(f各类标注统计{cls_count})print(f全部幼苗标注总数{total_box})print(f密集困难样本数量{hard_sample}占比{round(hard_sample/len(all_xml)*100,2)}%)4.2 voc2yolo.py VOC转YOLO格式场景注释原始VOC标注无法直接送入YOLO训练大田航拍图像分辨率参差不齐代码自动归一化坐标是农业CV数据集工业化预处理固定流程importos,xml.etree.ElementTreeasET IN_XML./dataset/annotationsOUT_TXT./dataset/labelsos.makedirs(OUT_TXT,exist_okTrue)CLS_MAP{maize:0,sunflower:1,sugarbeet:2}defxml2yolo(file):treeET.parse(file)roottree.getroot()wint(root.find(size/width).text)hint(root.find(size/height).text)lines[]forobjinroot.findall(object):cnameobj.find(name).textifcnamenotinCLS_MAP:continuecidCLS_MAP[cname]bobj.find(bndbox)x1,y1,x2,y2map(float,[b.find(i).textforiin[xmin,ymin,xmax,ymax]])cx,cy(x1x2)/2/w,(y1y2)/2/h bw,bh(x2-x1)/w,(y2-y1)/h lines.append(f{cid}{cx:.6f}{cy:.6f}{bw:.6f}{bh:.6f})returnlinesforfinos.listdir(IN_XML):iff.endswith(.xml):resxml2yolo(os.path.join(IN_XML,f))withopen(os.path.join(OUT_TXT,f.replace(.xml,.txt)),w,encodingutf8)asfp:fp.write(\n.join(res))print(标注格式转换完成)4.3 split_dataset.py 数据集分层拆分场景注释农业田间数据空间分布不均匀固定随机种子7:1:2拆分保障训练/验证数据分布一致科研复现与商用训练通用拆分方案importos,shutil,randomfromsklearn.model_selectionimporttrain_test_split random.seed(42)IMG_DIR./dataset/imagesLABEL_DIR./dataset/labelsSAVE_DIR./crop_splitratio_train,ratio_val,ratio_test0.7,0.1,0.2defmkdir(base):forsin[train,val,test]:os.makedirs(f{base}/{s}/images,exist_ok1)os.makedirs(f{base}/{s}/labels,exist_ok1)mkdir(SAVE_DIR)img_list[xforxinos.listdir(IMG_DIR)ifx.endswith((jpg,png))]tr,resttrain_test_split(img_list,train_sizeratio_train,random_state42)va,tetrain_test_split(rest,train_sizeratio_val/(ratio_valratio_test),random_state42)forsp,imgsinzip([train,val,test],[tr,va,te]):foriminimgs:shutil.copy(os.path.join(IMG_DIR,im),f{SAVE_DIR}/{sp}/images/{im})labim[:im.rfind(.)].txtifos.path.exists(os.path.join(LABEL_DIR,lab)):shutil.copy(os.path.join(LABEL_DIR,lab),f{SAVE_DIR}/{sp}/labels/{lab})print(f拆分train{len(tr)}val{len(va)}test{len(te)})4.4 crop_data.yaml YOLO数据集配置文件path:./crop_splittrain:train/imagesval:val/imagestest:test/imagesnc:3names:0:maize1:sunflower2:sugarbeet4.5 train_crop.py YOLOv11模型训练场景注释选用v11-n轻量化模型适配无人机机载边缘部署田间幼苗偏小imgsz固定640mosaic下调至0.5规避密集苗拼接失真早停策略防止农业小样本过拟合fromultralyticsimportYOLOif__name____main__:modelYOLO(yolov11n.pt)resmodel.train(datacrop_data.yaml,epochs65,imgsz640,batch8,mosaic0.5,patience10,device0,project./crop_train_out,nameseedling_det_v1)metricmodel.val()print(fVal mAP0.5:{metric.box.map50:.3f})4.6 calc_emerge.py 出苗率落地推理代码场景注释对接农田播种台账录入理论播种数量AI自动统计出苗株数一键换算地块出苗率直接替代人工田间测产是智慧农业项目落地核心业务代码fromultralyticsimportYOLOdefget_emerge(img_path,weight_path,total_seed):modelYOLO(weight_path)predmodel.predict(img_path,conf0.3)real_seedlen(pred[0].boxes)rateround(real_seed/total_seed*100,2)pred[0].save(./pred_out.jpg)returnreal_seed,rateif__name____main__:real,rateget_emerge(./drone_field.jpg,./crop_train_out/seedling_det_v1/weights/best.pt,1350)print(f实测出苗{real}株出苗率{rate}%)五、Model Index 模型测试指标使用拆分后测试集评测最优权重best.ptmAP0.592.7%mAP0.5:0.9573.5%玉米AP93.2%、向日葵AP91.8%、甜菜AP90.5%单图平均推理耗时CPU186msGPU(RTX4060)19ms满足无人机实时边端测算需求六、Application Direction 落地应用大田播种验收无人机全域航拍AI批量出苗统计万亩农田单日完成验收育种试验多品种对比试验田自动出苗数据采集减少人工试验统计工作量缺苗预警出苗率低于品种阈值自动预警指导农户补苗作业。七、Future Work 迭代优化数据集扩充补充霜冻、病害、暴雨后田间样本完善极端工况数据集模型优化模型INT8量化蒸馏部署嵌入式无人机机载端多任务拓展新增语义分割分支同步识别杂草密度与裸土占比。