拍一张叶片,10 秒知道是什么病、该怎么做。面向田间真实使用场景设计的移动端诊断系统。
实测性能(生产环境,CPU):识别端到端 0.35 秒(含上传 / 预处理 / ONNX 推理 / 知识库方案生成);关键区域热力图按需生成,3×3 首次 3.5 秒、同图缓存 0.34 秒、5×5 精细模式首次 8.8 秒;Top-3 置信度按四位小数输出(如 99.998% / 0.001%),模型不确定时会给出「可能不在覆盖范围内」的提示。
指标口径:以上为 PlantDoc 真实田间照片 451 张的评测结果(含水平翻转 TTA),可逐条复算复核;不是实验室干净背景数据集的成绩。类别构成:39 个识别类别 = 26 种病害 + 12 种作物健康 + 1 种无叶片背景。
我们更看重另一组数字:模型给出 ≥80% 置信度时准确率达 90.1%(223 条样本)—— 它大体知道什么时候不该硬答。配合「低置信度建议复拍」的引导,这对农户比一个虚高的总体准确率更有用。
数据来源:训练用公开数据集 PlantVillage;田间评测用 PlantDoc。混淆矩阵见 交互式混淆矩阵(当前线上模型 · 336 输入 · 逐类可查);静态 PNG 为早期蒸馏版(@288)留档,仅作新旧对比;训练曲线原始数据见 training_history.json。
模型演进全过程:6 代迭代可视化(实验室 94% → 田间 11% → 救回 10 倍,每代可复算)→
输入 336×336×3(等比缩放 + 中心裁剪) │ ▼ Patch Embedding:Conv 14×14/14(336→24×24)→ 384 维嵌入(ViT-S/14 自监督预训练) │ ▼ Transformer Encoder × 12 层(ViT-S 规模:384 宽 / 6 头 / 577 token) · Multi-Head Self-Attention(384 → 6 头,每头 64 维) · MLP 隐层 4× 升维 → GELU · Pre-Norm + 残差连接 Add(实测 LayerNorm ×25、残差 Add ×85) · cls token 取序列首位置作全局表征 │ ▼ LayerNorm → 384 维特征 │ ├─▶ Linear 384→39 + Softmax ──▶ 病名 + Top-3 置信度 ├─▶ 遮挡敏感性热力图(逐块遮挡看置信度下降)─▶ 模型关注区域 └─▶ HSV 病斑分割 ──▶ 严重度:轻 / 中 / 重(病斑占叶比)
| 层 | 实现 | 说明 |
|---|---|---|
| 前端 | 零依赖原生 JS + PWA | 首屏 < 40 KB(gzip),可安装到桌面、离线打开 |
| 接口 | FastAPI(REST + SSE 流式) | /api/predict 识别、/api/stats/* 统计、/api/atlas/* 图鉴 |
| 推理 | ONNX Runtime | CPU 单张推理,模型权重 42 MB |
| 数据 | PostgreSQL | 诊断记录、用户、反馈、历史 |
| 部署 | Nginx + systemd + 定时备份/审计 | HTTPS、gzip、强缓存、fail2ban |
| 模块 | 能力 |
|---|---|
| 识别 | 拍照 / 相册 / 文字描述三种入口;Top-3 + 热力图 + 严重度 + 防治方案;一键重拍 |
| 图鉴 | 39 个类别(26 种病害 + 12 健康 + 1 背景),按作物筛选,含症状描述与防治要点 |
| 看板 | 累计诊断、今日诊断、病种分布、作物分布、严重度结构、近 30 天趋势 |
| 答题 | 看图识病训练,成绩记录,用于农技培训与自查 |
| 报告 | 一键生成可打印/另存 PDF 的诊断报告;生成分享卡片图片 |
| 无障碍 | 深色模式、特大字(适老)、键盘焦点可见、对比度达标 |
# 1) 训练(GPU 可选,10 epoch 即可收敛) python train.py --data ./data --epochs 10 # 2) 评测(Top-1/Top-3、每类 P/R/F1、混淆矩阵) python eval.py --weights weights/best_model.pth # 3) 导出 ONNX python export_onnx.py --weights weights/best_model.pth # 4) 启动服务 uvicorn server.main:app --host 0.0.0.0 --port 8000 # 5) 前端(静态即用) # 将前端目录挂到 Nginx 站点,按需配置 HTTPS / gzip / 缓存
训练细节、增量数据与消融实验见仓库 docs/;模型权重已随仓库提供(weights/*.onnx)。
叶护卫 · 作物叶片病害诊断系统 · 本站自建部署(FastAPI + ONNX + PostgreSQL)
运维入口:挂载 / 切换 / 测活大模型上游。农技员等模块会自动优先使用健康上游, 上游全部不可用时降级为「确定性知识库兜底」,功能不中断。