简介这份PPT课件面向农业信息化、智慧农业及计算机应用方向的学习者与科研人员系统梳理机器学习、大数据与图像处理技术在农业病虫害预测预报中的落地路径。内容以随机森林算法为主线从Bagging与随机子空间原理讲到决策树构建、袋外数据估计并结合棉蚜等级预测、小麦病害图像识别等真实科研案例展开同时覆盖Hadoop与Spark平台下的支持向量机、深度学习短期预测等前沿方向。资源包内含1个pptx文件大小约1.38MB结构完整、图文并茂适合课堂讲授、自学研读或作为课题汇报的参考素材。目前已有199人学习下载可帮助读者快速建立从算法原理到农业场景应用的完整认知框架理解特征选择、参数设置与模型评估的关键思路为后续科研实践与项目落地提供可借鉴的技术路线。1. 从一份 PPT 标题说起机器学习、大数据与图像处理在农业里到底怎么落地如果你手头也有一份叫《机器学习、大数据技术和图像处理技术在农业中的应用》的汇报材料大概率会卡在同一个地方三个技术名词都认识但真到田间地头谁负责采集、谁负责算、谁负责把结果送到农户手机上说不清楚。我最早接触智慧农业项目时也这样PPT 上画三层架构很漂亮真去大棚里装设备才发现摄像头拍出来的叶片照片一半是逆光废片传感器数据断断续续模型在实验室 95% 的准确率到了地里直接掉到 60% 出头。这篇笔记不聊虚的就把这三样技术拆成一条能跑通的链路图像处理负责把「看见」变成干净输入机器学习负责把输入变成判断大数据技术负责让判断在几十个大棚、几万条记录的量级上不崩。适合正在做农业病虫害识别、智能农业监测、农业航空遥感这类方向的工程师也适合刚入门机器学习、想找一个真实场景练手的人。读完你应该能自己搭一个最小可用的病虫害识别 环境监测闭环知道每一步参数怎么调、哪里最容易翻车。2. 图像处理先立住把田间的脏图变成模型能吃的输入农业场景里图像处理不是调个滤镜那么简单。田间光照从清晨的 2000 lux 到正午的 100000 lux叶片有露水反光、有虫洞、有泥土遮挡还有风吹造成的运动模糊。直接把这些图丢给模型等于让模型学噪声。所以第一步必须做的是「图像预处理流水线」而不是急着上网络结构。2.1 农业图像预处理的四个必做步骤与参数我一般按「去噪 → 光照归一化 → 分割 → 尺寸统一」的顺序走。去噪用双边滤波而不是高斯因为高斯会把虫洞边缘一起糊掉光照归一化用 CLAHE限制对比度自适应直方图均衡clipLimit 设 2.03.0tileGridSize 设 8×8这个参数在叶片图像上比全局直方图均衡稳得多分割用 HSV 色彩空间的绿色通道阈值先把叶片从背景里抠出来再统一缩放到 224×224 或 256×256。下面是一段可以直接抄的 OpenCV 预处理代码。import cv2 import numpy as np def preprocess_leaf(img_path, clip_limit2.5, tile_size8, target_size(224, 224)): # 读取图像统一转成 BGR 三通道 img cv2.imread(img_path) if img is None: raise ValueError(f无法读取图像: {img_path}) # 1. 双边滤波去噪保留虫洞和病斑边缘 # d9 表示邻域直径sigmaColor/sigmaSpace 控制颜色和空间相似度 denoised cv2.bilateralFilter(img, d9, sigmaColor75, sigmaSpace75) # 2. 转 LAB 空间只对 L 通道做 CLAHE避免颜色失真 lab cv2.cvtColor(denoised, cv2.COLOR_BGR2LAB) l, a, b cv2.split(lab) clahe cv2.createCLAHE(clipLimitclip_limit, tileGridSize(tile_size, tile_size)) l_eq clahe.apply(l) lab_eq cv2.merge((l_eq, a, b)) normalized cv2.cvtColor(lab_eq, cv2.COLOR_LAB2BGR) # 3. HSV 绿色阈值分割叶片去除土壤和天空背景 hsv cv2.cvtColor(normalized, cv2.COLOR_BGR2HSV) lower_green np.array([25, 40, 40]) upper_green np.array([95, 255, 255]) mask cv2.inRange(hsv, lower_green, upper_green) # 形态学闭运算填补叶片内部小孔 kernel np.ones((5, 5), np.uint8) mask cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel) # 4. 用掩膜抠出叶片区域并统一尺寸 segmented cv2.bitwise_and(normalized, normalized, maskmask) resized cv2.resize(segmented, target_size, interpolationcv2.INTER_AREA) return resized, mask if __name__ __main__: out, m preprocess_leaf(leaf_sample.jpg) cv2.imwrite(leaf_preprocessed.jpg, out) cv2.imwrite(leaf_mask.jpg, m)这段代码的逻辑是双边滤波在平滑噪声的同时保住高频边缘CLAHE 只作用在亮度通道所以不会把病斑颜色改掉HSV 阈值把非叶片像素清零最后统一尺寸方便批量进模型。参数上最容易翻车的是lower_green和upper_green不同作物、不同相机白平衡下差别很大建议先跑一张图用cv2.imshow看掩膜效果再定。clipLimit超过 4.0 会把噪点也放大低于 1.5 等于没做2.03.0 是农业叶片图的经验区间。2.2 数据增强农业数据集小不增强根本训不动农业病虫害公开数据集通常只有几千张而且类别极不平衡——健康叶片一大堆某种罕见病只有几十张。这时候数据增强不是可选项是必选项。我一般用 albumentations 做在线增强而不是离线扩图因为在线增强每个 epoch 看到的图都不一样相当于免费扩充了数据分布。import albumentations as A from albumentations.pytorch import ToTensorV2 train_transform A.Compose([ # 随机旋转 ±30 度模拟拍摄角度变化 A.Rotate(limit30, p0.7), # 水平翻转叶片左右对称翻转不改变类别 A.HorizontalFlip(p0.5), # 随机亮度对比度模拟田间光照波动 A.RandomBrightnessContrast(brightness_limit0.2, contrast_limit0.2, p0.6), # 高斯模糊模拟风动或对焦不准 A.GaussianBlur(blur_limit(3, 5), p0.3), # 归一化到 ImageNet 均值方差方便用预训练权重 A.Normalize(mean(0.485, 0.456, 0.406), std(0.229, 0.224, 0.225)), ToTensorV2() ])这里每个增强的概率p都别设 1.0全开会让模型学到「所有图都是旋转过的」这种假规律。旋转限制 30 度以内是因为叶片方向本身有语义转 180 度可能把病斑位置关系搞乱。归一化用 ImageNet 的均值方差是为了后面能直接加载预训练模型这一步如果漏了迁移学习效果会差一大截。3. 机器学习模型选型从传统分类器到轻量卷积网络怎么选图像处理把输入弄干净之后下一步是选模型。农业场景有个硬约束推理设备往往是边缘盒子或者手机算力有限所以不能无脑上大模型。我一般分两条路走——数据量小于 5000 张、类别少于 10 类时先用传统特征 SVM 或随机森林打底数据量上万或者类别复杂时再上轻量卷积网络做迁移学习。3.1 传统特征 SVM 的最小可用方案传统方案的好处是可解释、训练快、对硬件几乎没要求。特征我一般提取三类颜色矩HSV 三通道的均值、方差、偏度、纹理特征灰度共生矩阵的对比度、能量、熵、形状特征病斑面积占比、圆形度。下面是用 scikit-learn 跑通的最小示例。import numpy as np from skimage.feature import graycomatrix, graycoprops from sklearn.svm import SVC from sklearn.preprocessing import StandardScaler from sklearn.pipeline import Pipeline from sklearn.model_selection import train_test_split from sklearn.metrics import classification_report def extract_features(gray_img, mask): # 颜色矩在 HSV 空间算均值和方差 hsv cv2.cvtColor(gray_img, cv2.COLOR_BGR2HSV) color_feat [] for ch in cv2.split(hsv): color_feat.extend([np.mean(ch), np.std(ch)]) # 纹理特征灰度共生矩阵距离 1角度 0/45/90/135 glcm graycomatrix(gray_img, distances[1], angles[0, np.pi/4, np.pi/2, 3*np.pi/4], levels256, symmetricTrue, normedTrue) texture_feat [ graycoprops(glcm, contrast).mean(), graycoprops(glcm, energy).mean(), graycoprops(glcm, homogeneity).mean() ] # 形状特征病斑面积占叶片面积比例 leaf_area np.sum(mask 0) lesion_area np.sum((mask 0) (gray_img[:, :, 1] 80)) shape_feat [lesion_area / (leaf_area 1e-6)] return np.array(color_feat texture_feat shape_feat) # 假设 X 是特征矩阵y 是标签 # X np.array([extract_features(img, m) for img, m in dataset]) # y np.array(labels) pipeline Pipeline([ (scaler, StandardScaler()), # 特征量纲差异大必须标准化 (svm, SVC(kernelrbf, C10, gammascale, probabilityTrue)) ]) # X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, stratifyy) # pipeline.fit(X_train, y_train) # print(classification_report(y_test, pipeline.predict(X_test)))这段代码里C10是惩罚系数农业特征噪声大C 太小会欠拟合太大会过拟合10 左右是比较稳的起点。gammascale让 scikit-learn 自动按特征数缩放比手动调省事。stratifyy在划分时保持类别比例类别不平衡时一定要加否则测试集可能全是健康叶片指标虚高。3.2 迁移学习用 MobileNetV3 在农业数据集上微调当类别超过 10 类或者数据量上来之后传统特征就不够用了。这时候我一般用 MobileNetV3-Small 做迁移学习因为它参数量只有 2.5M 左右推理速度快适合边缘部署。关键操作是冻结主干前几层只训练后面的分类头等 loss 稳定后再解冻全部做小学习率微调。import torch import torch.nn as nn from torchvision import models def build_model(num_classes10, freeze_backboneTrue): # 加载 ImageNet 预训练权重 model models.mobilenet_v3_small(weightsmodels.MobileNet_V3_Small_Weights.IMAGENET1K_V1) # 冻结特征提取部分只训练分类头 if freeze_backbone: for param in model.features.parameters(): param.requires_grad False # 替换最后的分类层输出类别数改成农业病害类别数 in_features model.classifier[3].in_features model.classifier[3] nn.Linear(in_features, num_classes) return model # 训练配置 # model build_model(num_classes15) # criterion nn.CrossEntropyLoss(label_smoothing0.1) # 标签平滑缓解过拟合 # optimizer torch.optim.AdamW(filter(lambda p: p.requires_grad, model.parameters()), lr1e-3) # scheduler torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max20)label_smoothing0.1是我强烈建议加的农业数据集标注难免有错标签平滑能降低模型对错误标注的敏感度。学习率 1e-3 只适用于冻结阶段解冻微调时要降到 1e-4 甚至 1e-5否则预训练权重会被冲掉。CosineAnnealingLR让学习率按余弦曲线下降比阶梯下降更平滑训练后期不容易震荡。4. 大数据技术兜底从单张推理到多棚监测的数据链路模型训好只是开始真正难的是让它在几十个大棚、几百个传感器、每天几万条记录的量级上稳定跑。这时候大数据技术不是拿来炫技的是解决三个具体问题数据怎么收、怎么存、怎么算。4.1 数据采集与消息队列用 MQTT Kafka 接住传感器洪峰大棚里的温湿度、光照、土壤墒情传感器通常是秒级上报几十个大棚加起来每秒上千条消息。如果直接写数据库数据库连接池瞬间打满。常见做法是传感器走 MQTT 协议上报到 EMQX 或 Mosquitto再用桥接把消息转发到 Kafka后端消费者慢慢落库。# Mosquitto 配置桥接到 Kafka 的示例mosquitto.conf # 监听本地 MQTT 端口 listener 1883 allow_anonymous true # 桥接配置把 farm/# 主题转发到 Kafka connection farm-bridge address kafka-broker:9092 topic farm/# out 1 Kafka 这边建议按farm.{greenhouse_id}.{sensor_type}建主题分区数按大棚数量设一般 612 个分区就够。消费者用 Python 的confluent-kafka或者 Java 的 Spring Kafka 都行关键是做批量写入每 500 条或每 2 秒 flush 一次别一条一条写 ClickHouse。4.2 存储选型时序数据进 ClickHouse图像元数据进 PostgreSQL农业数据分两类传感器时序数据和图像元数据。时序数据我一般用 ClickHouse写入快、压缩率高、按时间范围查询快。建表时用ReplacingMergeTree引擎按(greenhouse_id, sensor_type, timestamp)排序这样重复上报的数据可以自动去重。CREATE TABLE sensor_readings ( greenhouse_id UInt32, sensor_type LowCardinality(String), ts DateTime, value Float32 ) ENGINE ReplacingMergeTree() PARTITION BY toYYYYMM(ts) ORDER BY (greenhouse_id, sensor_type, ts) TTL ts INTERVAL 2 YEAR;图像元数据图片路径、拍摄时间、大棚编号、模型推理结果放 PostgreSQL 更合适因为要做关联查询和事务。图片本身别存数据库存对象存储数据库只存 URL。TTL ts INTERVAL 2 YEAR是自动清理两年以上的老数据农业场景一般不需要保留太久除非做长期趋势分析。4.3 批量推理与流处理用 Spark 做离线特征用 Flink 做实时告警模型推理分两条线离线批量推理和实时流推理。离线用 Spark 读 ClickHouse 的历史数据批量跑模型生成病害趋势报告实时用 Flink 消费 Kafka对每条传感器数据做规则判断超过阈值就推告警。下面是一个 Flink 规则告警的伪代码结构。# Flink 实时告警逻辑PyFlink 风格伪代码 # 消费 Kafka 中的传感器数据流 sensor_stream env.add_source(KafkaSource( topics[farm.sensor], properties{bootstrap.servers: kafka-broker:9092} )) # 按大棚分组计算 5 分钟滑动窗口的平均温湿度 windowed sensor_stream \ .key_by(lambda x: x[greenhouse_id]) \ .window(SlidingEventTimeWindows.of(Time.minutes(5), Time.minutes(1))) \ .aggregate(AvgAggregator()) # 规则判断温度超过 35 度或湿度低于 30% 触发告警 alerts windowed.filter(lambda x: x[avg_temp] 35 or x[avg_humidity] 30) alerts.add_sink(AlertSink())窗口大小 5 分钟、滑动 1 分钟是农业场景的经验值太短会频繁误报太长会漏掉突发情况。规则阈值别写死在代码里放配置中心不同作物、不同生长期阈值不一样写死了改一次要重新部署。5. 避坑与排查农业 AI 项目里最容易翻车的五件事5.1 模型在实验室准到地里就废现象验证集准确率 95%部署到大棚后实际识别率不到 60%。原因训练集和现场图像分布不一致训练集多是晴天正午拍的现场有逆光、有露水、有阴影。解决训练时加入现场采集的「脏图」至少占训练集 30%部署前用现场图做一次测试集评估别只看实验室指标。5.2 传感器数据时间戳对不齐现象图像推理结果和传感器数据关联时发现同一时刻的数据对不上。原因不同设备时钟不同步有的用本地时间有的用 UTC。解决所有设备统一用 NTP 对时上报时间戳统一用 UTC 毫秒级入库时再转本地时区。这个坑我踩过排查了一整天才发现是摄像头时区设错了。5.3 Kafka 消费者积压导致告警延迟现象传感器数据实时性越来越差告警延迟从秒级变成分钟级。原因消费者处理速度跟不上生产速度或者某个分区数据倾斜。解决先看 consumer lag如果持续增长就加消费者实例但消费者数不能超过分区数如果是数据倾斜检查 key 设计别用大棚编号做 key 导致某个大棚数据特别多。5.4 图像预处理参数在不同相机上不通用现象A 相机拍的图预处理效果很好B 相机拍的图分割出来全是噪声。原因不同相机的白平衡、伽马曲线不同HSV 阈值不通用。解决每换一批相机就重新标定一次阈值或者改用自适应阈值方法如 Otsu 分割绿色通道减少对固定阈值的依赖。5.5 模型版本更新后旧数据无法复现现象模型升级后想复现三个月前的推理结果发现对不上。原因预处理代码、模型权重、依赖库版本都没做版本管理。解决每次训练把预处理参数、模型权重、requirements.txt 一起打包存档推理服务记录使用的模型版本号。这个习惯能省掉无数扯皮。6. 进阶技巧用模型蒸馏把大模型塞进边缘盒子前面说的 MobileNetV3-Small 已经算轻量了但如果你要在 RK3399 或者树莓派上跑还是嫌慢。这时候可以用知识蒸馏先用一个大模型比如 ResNet50 或者 EfficientNet-B3在农业数据集上训到高准确率再让它当「教师」指导一个小模型比如 MobileNetV3-Small 或者 ShuffleNetV2学习。小模型不仅学真实标签还学大模型输出的软标签分布泛化能力会明显好于直接训小模型。import torch.nn.functional as F def distillation_loss(student_logits, teacher_logits, true_labels, T4.0, alpha0.7): # 软标签损失学生模仿教师的输出分布 soft_loss F.kl_div( F.log_softmax(student_logits / T, dim1), F.softmax(teacher_logits / T, dim1), reductionbatchmean ) * (T * T) # 硬标签损失学生也要学真实标签 hard_loss F.cross_entropy(student_logits, true_labels) # 加权组合alpha 控制软标签权重 return alpha * soft_loss (1 - alpha) * hard_loss温度T4.0是蒸馏里的经典值T 越大软标签分布越平滑学生能学到更多类间关系alpha0.7表示更依赖教师指导如果教师模型本身不够准就把 alpha 降到 0.5 以下。蒸馏完的小模型在农业病害数据集上通常能比直接训的小模型高 35 个百分点而推理速度不变。验证蒸馏效果别只看准确率还要看混淆矩阵。农业场景里把「健康」误判成「病害」和把「病害 A」误判成「病害 B」代价完全不同前者会导致不必要的喷药后者只是用药种类错了。我一般会单独统计「健康 vs 病害」的二分类指标确保这个维度的召回率不低于 95%。最后说个我自己的习惯每次做完一个农业 AI 项目我都会把现场采集的「翻车图」单独存一个文件夹标注清楚失败原因——逆光、遮挡、模糊、标注错误。下次训模型时把这些图按比例混进训练集比任何数据增强都管用。农业场景没有银弹只有一轮一轮拿真实数据喂出来的鲁棒性。希望帮到你。本文还有配套的精品资源点击获取
企业数字化 ERP 产品动态
相关推荐
FMEA第五版怎么学?七步法核心变化与培训版资料选择指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 20:43:03
词达人答题脚本技术解析:DOM解析与混合路线实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 20:43:03
EPLAN端子图表实操:从数据准备到报表生成与排查 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 20:43:03
Oracle 删除指定用户下的表与 Sequence:一份可直接执行的清理脚本与验证清单 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 21:11:35
图解 React 源码系列:react-illustration-series 原理学习路线与源码导读 教程前端 【免费下载链接】react-illustration-series 图解react源码, 用大量配图的方式, 致力于将react原理表述清楚. 项目地址: https://gitcode.com/gh_mirrors/re/react-illustration-series 点击查看 免费下载 本文以 react-illustration-series 的系列总览文… · 2026/9/27 21:11:35
highlight-io Python SDK 版本演进深度解析:从 CHANGELOG 看全栈可观测能力的落地之路 可观测性后端 【免费下载链接】highlight highlight.io: The open source, full-stack monitoring platform. Error monitoring, session replay, logging, distributed tracing, and more. 项目地址: https://gitcode.com/gh_mirrors/hi/highlight 点击查看 免费下… · 2026/9/27 21:11:35
2026最新企业网站开发的公司怎么选?防黑挂马实战指南 2026最新企业网站开发的公司怎么选?防黑挂马实战指南 网站被黑挂马,后台密码全失效,页面跳出赌博广告,这时候你慌不慌?很多老板第一反应是删库重装,但这往往治标不治本。2026年最新的网络攻击手段已经进化到利用AI批量生成漏洞利用代码,传统… · 2026/9/27 21:11:10
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01