当前位置: 首页 > news >正文

无人机航拍+深度学习落地智慧农业:作物出苗率目标检测开源数据集工程详解|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 XML(xyxy像素坐标标注)
图像格式JPG/JPEG,单张分辨率区间1920×1080 ~ 3840×2160
存储结构images原图文件夹 + annotations标注XML文件夹,无分类子目录
标注目标单株出苗幼苗,杂草、石块、土块不做标注
适用任务目标检测、实例计数、出苗率量化、缺苗区域识别
格式兼容支持一键转为YOLO-TXT、COCO-JSON、MS-COCO通用训练格式



2.2 数据集量化统计明细

  1. 全数据集原图总量:4287张田间航拍实拍图,全部图片完成人工精细标注,无空白无标注废图;
  2. 全量标注目标总数量:365291株幼苗边框标注,单张图片平均标注85.21株作物;
  3. 品类分布统计:玉米标注152103个、向日葵130577个、甜菜82611个;
  4. 困难样本占比:遮挡/密集重叠幼苗困难样本共计945张,占总图片22.04%,提升模型田间泛化能力;
  5. 场景分布:晴天光照图3126张、逆光阴影图892张、阴雨弱光样本269张,覆盖大田绝大多数实拍工况。

2.3 数据集优缺点梳理

✅ 优势

  1. 实景田间采集,无实验室仿真图片,数据分布贴合落地部署真实数据;
  2. 三类作物统一数据集,一套数据实现多品类作物联合检测训练;
  3. 困难样本充足,密集苗、被杂草半遮挡样本完备,训练后模型抗干扰能力强;
    ❌ 现存短板
  4. 无极端暴雨、霜冻病害等极端灾害场景样本,后续可自行增补扩充;
  5. 原图尺寸跨度大,工程使用前必须统一尺寸预处理;

三、Environment Requirement 软硬件依赖

# requirements.txt python==3.10 torch==2.3.1 ultralytics==8.3.0 opencv-python==4.9.0.80 numpy==1.26.4 albumentations==1.4.10 scikit-learn==1.5.0 pycocotools==2.0.8 matplotlib==3.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/annotations"CLASS_DICT={"maize":0,"sunflower":1,"sugarbeet":2}cls_count={k:0forkinCLASS_DICT.keys()}total_box=0hard_sample=0all_xml=os.listdir(XML_PATH)forxml_nameinall_xml:tree=ET.parse(os.path.join(XML_PATH,xml_name))root=tree.getroot()box_num=0forobjinroot.findall("object"):name=obj.find("name").textifnameincls_count:cls_count[name]+=1box_num+=1total_box+=1# 单图>150株判定为密集困难样本ifbox_num>150:hard_sample+=1print(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/annotations"OUT_TXT="./dataset/labels"os.makedirs(OUT_TXT,exist_ok=True)CLS_MAP={"maize":0,"sunflower":1,"sugarbeet":2}defxml2yolo(file):tree=ET.parse(file)root=tree.getroot()w=int(root.find("size/width").text)h=int(root.find("size/height").text)lines=[]forobjinroot.findall("object"):cname=obj.find("name").textifcnamenotinCLS_MAP:continuecid=CLS_MAP[cname]b=obj.find("bndbox")x1,y1,x2,y2=map(float,[b.find(i).textforiin["xmin","ymin","xmax","ymax"]])cx,cy=(x1+x2)/2/w,(y1+y2)/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"):res=xml2yolo(os.path.join(IN_XML,f))withopen(os.path.join(OUT_TXT,f.replace(".xml",".txt")),"w",encoding="utf8")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/images"LABEL_DIR="./dataset/labels"SAVE_DIR="./crop_split"ratio_train,ratio_val,ratio_test=0.7,0.1,0.2defmkdir(base):forsin["train","val","test"]:os.makedirs(f"{base}/{s}/images",exist_ok=1)os.makedirs(f"{base}/{s}/labels",exist_ok=1)mkdir(SAVE_DIR)img_list=[xforxinos.listdir(IMG_DIR)ifx.endswith(("jpg","png"))]tr,rest=train_test_split(img_list,train_size=ratio_train,random_state=42)va,te=train_test_split(rest,train_size=ratio_val/(ratio_val+ratio_test),random_state=42)forsp,imgsinzip(["train","val","test"],[tr,va,te]):foriminimgs:shutil.copy(os.path.join(IMG_DIR,im),f"{SAVE_DIR}/{sp}/images/{im}")lab=im[:im.rfind(".")]+".txt"ifos.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:sugarbeet

4.5 train_crop.py YOLOv11模型训练

场景注释:选用v11-n轻量化模型适配无人机机载边缘部署;田间幼苗偏小,imgsz固定640,mosaic下调至0.5规避密集苗拼接失真,早停策略防止农业小样本过拟合

fromultralyticsimportYOLOif__name__=="__main__":model=YOLO("yolov11n.pt")res=model.train(data="crop_data.yaml",epochs=65,imgsz=640,batch=8,mosaic=0.5,patience=10,device=0,project="./crop_train_out",name="seedling_det_v1")metric=model.val()print(f"Val mAP@0.5:{metric.box.map50:.3f}")

4.6 calc_emerge.py 出苗率落地推理代码

场景注释:对接农田播种台账录入理论播种数量,AI自动统计出苗株数,一键换算地块出苗率,直接替代人工田间测产,是智慧农业项目落地核心业务代码

fromultralyticsimportYOLOdefget_emerge(img_path,weight_path,total_seed):model=YOLO(weight_path)pred=model.predict(img_path,conf=0.3)real_seed=len(pred[0].boxes)rate=round(real_seed/total_seed*100,2)pred[0].save("./pred_out.jpg")returnreal_seed,rateif__name__=="__main__":real,rate=get_emerge("./drone_field.jpg","./crop_train_out/seedling_det_v1/weights/best.pt",1350)print(f"实测出苗{real}株,出苗率:{rate}%")

五、Model Index 模型测试指标

使用拆分后测试集评测最优权重best.pt:

  1. mAP@0.5:92.7%;mAP@0.5:0.95:73.5%
  2. 玉米AP:93.2%、向日葵AP:91.8%、甜菜AP:90.5%
  3. 单图平均推理耗时(CPU):186ms,GPU(RTX4060):19ms,满足无人机实时边端测算需求

六、Application Direction 落地应用

  1. 大田播种验收:无人机全域航拍+AI批量出苗统计,万亩农田单日完成验收;
  2. 育种试验:多品种对比试验田自动出苗数据采集,减少人工试验统计工作量;
  3. 缺苗预警:出苗率低于品种阈值自动预警,指导农户补苗作业。

七、Future Work 迭代优化

  1. 数据集扩充:补充霜冻、病害、暴雨后田间样本,完善极端工况数据集;
  2. 模型优化:模型INT8量化+蒸馏,部署嵌入式无人机机载端;
  3. 多任务拓展:新增语义分割分支,同步识别杂草密度与裸土占比。
http://www.jsqmd.com/news/945664/

相关文章:

  • openGSD安装与配置国产大模型
  • 从 AQS 锁竞争与队列机制深度剖析 Java 并发中 Spring IoC循环依赖终极解决方案 的核心原理
  • GroqCloud
  • 2026年现阶段,如何甄选靠谱的学习东北老式锅包公司与品牌 - 2026年企业资讯
  • 深度解析:douyin-downloader 抖音批量下载工具的技术架构与实战应用
  • 多屏党的福音:除了Little Big Mouse,还有哪些方法能治鼠标“跨屏错位”的毛病?
  • AI工具接入消息平台的终极检查表(含Slack/Teams/钉钉/飞书/Webhook四端兼容性验证矩阵)
  • 别再手动拼接字节了!用C#和Socket轻松搞定HL7 MLLP协议消息发送
  • AI本地化部署不是“装完就跑”:金融/医疗/政务三大高合规场景的7项等保2.0硬性要求清单(含审计日志模板)
  • 《从开箱即用到崩溃跑路:SAS部署的全链路暗坑指南》
  • 用STC8H1K28单片机+电机驱动板,复刻一个能稳定悬浮的磁悬浮小装置(附完整代码)
  • 2026年口碑电子记分牌精选:精准计分,比赛更精彩
  • 别再搜pep425tags了!pip debug --verbose才是解决‘is not a supported wheel’报错的正确姿势
  • 从报错到下载:手把手教你解读 `pip debug` 输出,为树莓派 Python 3.7 精准匹配 TensorFlow 等包的 wheel 文件
  • PDMS螺栓统计踩坑记:三次推倒重来,我总结的元件库规范与避坑指南
  • 大厂面试遭遇从未见过的盲区难题:留学生如何通过结构化沟通巧妙解局「蒸汽求职分享」
  • DHT11 vs DHT12怎么选?结合51单片机实测对比精度、协议与成本(附避坑指南)
  • ST7701S驱动4寸屏踩坑记:为什么我的SPI初始化了,屏幕还是不亮?
  • 从“看懂曲线”到“预测未来”:时序大模型 TimechoAI 体验实操
  • 手把手教你用STM32F103驱动HT1621段码屏,从看懂时序图到点亮第一个数字
  • 突破512KB限制:在STM32H743上为STemWin图形库优化显存与DMA2D加速实战
  • 毕业设计实战复盘:用DHT11/DHT12+51单片机+Zigbee,从零搭建一个低成本温湿度监测系统
  • 从零到一:手把手教你用Cisco Packet Tracer模拟校园网三层架构(含VLAN划分与静态路由配置)
  • 用MG-SOFT MIB Browser v10b“解剖”你的Windows网络:手把手教你查看路由表、MAC地址和更多
  • 2026山东大学软件学院创新项目实训(五)
  • 2026年装修建筑服务排名,靠谱品牌有哪些? - mypinpai
  • AI UI Designer的Skills系统:让AI Agent用你的设计经验做UI设计
  • 从零搭建FX3开发环境:除了SDK安装,你还需要注意这3个关键配置(基于v1.3.3)
  • 记一次大模型把生产环境打挂的教训:Java 客户端熔断降级实战
  • 实习Mentor不喜欢我怎么办?留学生如何通过与经理1on1合规破局「蒸汽求职分享」