乐于分享
好东西不私藏

从零训练一个植物医生:数据集下载→模型训练→手机部署

从零训练一个植物医生:数据集下载→模型训练→手机部署

手把手教你30分钟搞定一个能装进口袋的AI植物医生

这篇文章能帮你什么?

你有没有想过:手机拍张叶子照片,AI立刻告诉你“这是早疫病,用代森锰锌”?

这不是科幻。今天,我就带你从零开始,亲手做一个能装进口袋的“植物医生”。

全程分三步:

1. 下载数据集:拿来就能用的高质量病害数据

2. 训练模型:用YOLOv8,几行代码搞定

3. 部署到手机:让AI真正跑在你的手机上

不需要AI博士学历,不需要昂贵的服务器,一个普通电脑、一部安卓手机就够了。

开始

第一步:下载数据集(5分钟)

先找一套“教材”给AI学。推荐三个经过预处理的现成数据集,开箱即用:

选项1:番茄叶片病害数据集(最推荐)

这个数据集是PlantVillage的“精修版”,已经帮你洗好了:

· 6个类别:细菌性斑点病、早疫病、晚疫病、叶霉病、斑枯病、健康

· 已划分:训练集70%、验证集15%、测试集15%

· 大小:98.2 MB

· 格式:按文件夹分类,无需额外处理

下载地址:Mendeley Data搜索“Processed Tomato Leaf Disease”(DOI: 10.17632/3zwdw6y4pn.1)

选项2:玉米病害增强数据集

如果你对玉米感兴趣,这个数据集用“强化学习+风格迁移”技术做了增强:

· 5个类别:锈病、叶枯病、叶斑病、条纹病毒、健康

· 大小:4,776张增强图像

· 格式:JPEG格式,标准化分辨率

下载地址:Zenodo搜索“RL-NST Corn Leaf Disease”

选项3:茄子叶片病害数据集(真实田间)

想要更“野”的数据?这个是斯里兰卡田间用手机拍的:

· 8个类别:细菌性枯萎病、细菌性叶斑病、白粉病等

· 大小:8,987张真实田间图像

· 特点:自然光照、无控制背景,超接地气

下载地址:Mendeley Data搜索“SLIF-Brinjal”(DOI: 10.17632/6yg6vktrc2.1)

第二步:训练模型(15分钟)

2.1 安装YOLOv8

YOLOv8是目前最“亲民”的目标检测模型,几行代码就能训练:

bash

# 安装ultralytics包

pip install ultralytics

2.2 准备数据

把下载的数据集整理成YOLO格式:

Text

dataset/

├── images/

│   ├── train/      # 训练图片

│   └── val/         # 验证图片

├── labels/

│   ├── train/      # 训练标注(txt文件)

│   └── val/         # 验证标注

└── data.yaml      # 数据集配置文件

如果下载的是Mendeley上的番茄数据集,它已经是按文件夹分类好的格式,可以直接使用。

2.3 写一个配置文件 data.yaml

yaml

path:./dataset            # 数据集根目录

train:images/train      # 训练图片文件夹

val:images/val            # 验证图片文件夹

nc: 6                             # 类别数量

names: ['Bacterial_spot', 'Early_blight', 'Late_blight', 

  'Leaf_Mold', 'Septoria_leaf_spot', 'healthy']

2.4 一行命令开始训练

bash

yolo detect train data=data.yaml model=yolov8n.pt epochs=50 imgsz=640

参数说明:

· model=yolov8n.pt:用预训练模型,不用从零学(迁移学习)

· epochs=50:训练50轮,一般够用了

· imgsz=640:输入图片尺寸

训练完会在 runs/detect/train/weights/ 下生成两个文件:

· best.pt:效果最好的模型(部署用这个)

· last.pt:最后一轮的模型

2.5 看一眼效果

python

from ultralytics import YOLO

model = YOLO('runs/detect/train/weights/best.pt')

results = model('test_leaf.jpg', save=True)

如果能正确标出病斑位置和类别,恭喜你,AI医生“毕业”了!

第三步:部署到手机(10分钟)

模型训好了,怎么装进手机?核心思路是:把PyTorch模型转成手机能跑的格式。

3.1 模型转换(PyTorch → ONNX → NCNN/TFLite)

python

from ultralytics import YOLO

# 加载训练好的模型

model = YOLO('best.pt')

# 导出为ONNX格式

model.export(format='onnx', imgsz=640)

会生成 best.onnx 文件。然后可以用 ONNX Runtime 的工具进一步转换成手机端格式(NCNN或TFLite)。

3.2 在Android Studio中集成

1. 添加依赖:在 build.gradle 中加入ONNX Runtime

2. 放模型文件:把转换后的模型放进 assets 文件夹

3. 写推理代码:

kotlin

// 加载模型

val session = OrtSession.createSession(loadModelFile(context, "best.onnx"), env)

// 处理摄像头画面

funprocessImage(bitmap: Bitmap): List<Detection> {

    // 1. 预处理:缩放、归一化

val inputTensor = preprocess(bitmap)

    // 2. 运行推理

val output = session.run(mapOf("images" to inputTensor))

    // 3. 解析结果:提取边界框、类别、置信度

return parseOutput(output)

}

完整代码可以参考ONNX Runtime官方示例,有现成的Android工程可以拿来改。

3.3 测试一下

装到手机上,对准一片叶子拍一张——如果能识别出病害类型并标出位置,你就成功了!

小提示:如果嫌从零配置太麻烦,阿里云开发者社区有打包好的完整项目,包含YOLOv8训练代码+数据集+PyQt5界面,下载即用。开源的YOLOv8水稻病害检测项目也提供了完整的数据集和部署教程。

写在最后:你可以做得更好

今天你走完了“数据→模型→手机”的完整链路。但真正的“植物医生”,还需要在这些方向打磨:

1. 用真实田间数据

实验室拍的数据太“干净”了。去田里拍一些逆光、手抖、被挡住的照片加进去,模型会更皮实。SLIF-Brinjal茄子数据集就是真实田间拍摄的典范。

2. 加知识库

光认病不够,还要告诉农民怎么治。可以参考AgriPestDatabase的做法,构建“病害名称→防治方法”的问答对。

3. 持续迭代

模型不是一次性的。把农民误判的图片收集起来,定期重新训练,模型会越来越聪明。

现在,你已经有了让AI当“植物医生”的全部工具。选一个你最关心的作物,动手试试吧。

有问题?欢迎留言交流。

相关学习资料