基于 Django 与深度学习的马铃薯病害识别系统

🥔 项目简介

本项目是一个基于深度学习的马铃薯叶片病害智能识别系统,专门用于识别马铃薯早疫病、马铃薯晚疫病和健康叶片三类状态。系统采用 Django 作为 Web 端入口,为用户提供直观易用的交互界面。用户在首页上传叶片图片后,后台调用 PyTorch 训练好的分类模型进行实时推理,并在页面中展示预测类别、置信度和候选类别概率。

相比传统的模板页面,本项目首页已改造成更贴近农业病害检测场景的专业工作台样式,包含以下核心模块:

  • 图片上传预览区:支持拖拽上传和预览
  • 模型选择面板:支持多种预训练模型切换
  • 诊断结果展示区:显示主预测结果和置信度
  • Top3 候选概率条:可视化展示各候选类别的置信度
  • 病害说明模块:提供病害特征和防治建议
  • 数据集概览面板:展示数据集统计信息

本系统旨在为农业技术人员和种植户提供快速、准确的病害诊断工具,助力马铃薯产业的健康发展。## 🛠️ 技术栈

后端框架

  • Django:提供稳定的 Web 服务接口和用户界面

深度学习框架

  • PyTorch:主流的深度学习框架,提供灵活的模型构建和训练接口
  • torchvision:提供图像预处理、数据增强和预训练模型

模型架构

  • Vision Transformer (ViT):基于注意力机制的视觉 Transformer 模型
  • ResNet 系列:深度残差网络,包括 ResNet18、ResNet34、ResNet50
  • MobileNet 系列:轻量级卷积网络,适合移动端部署
  • 其他模型:AlexNet、VGG、DenseNet、Swin Transformer 等分类模型脚本

数据处理与增强

  • ImageFolder:按目录结构自动加载数据集
  • 数据预处理:Resize、CenterCrop、Normalize
  • 数据增强:随机裁剪、水平翻转、颜色抖动等

结果记录与分析

  • pandas:读取/写入训练指标 Excel 文件
  • matplotlib:生成类别分布图和训练曲线图
  • scikit-learn:计算 precision、recall、f1-score 等评估指标

前端技术

  • HTML/CSS/JavaScript:构建响应式用户界面
  • Bootstrap:提供现代化的 UI 组件和布局## 🖥️ 系统首页展示

下图展示了系统首页的工作台界面,该截图基于项目本地首页模板和数据集样例图片生成。图中的预测值为页面展示用样例,主要用于说明系统前端布局和识别结果展示方式。

界面布局说明

  1. 左侧功能区

    • 图片上传区域:支持拖拽或点击上传
    • 模型选择下拉框:支持切换不同预训练模型
    • 识别按钮:触发病害识别流程
  2. 中间预览区

    • 实时显示上传的叶片图片
    • 支持图片缩放和旋转查看
  3. 右侧结果区

    • 主预测结果:显示最高置信度的病害类别
    • 置信度进度条:直观展示模型置信度
    • Top3 候选结果:展示其他可能的病害类别及概率
    • 病害说明:提供病害特征和防治建议
  4. 底部数据集概览

    • 显示当前数据集统计信息
    • 各类别样本数量分布## 📊 数据集介绍

数据集结构

项目数据集位于 djangoProject/data_set/potato 目录下,采用标准的 Train/Test 目录结构组织。当前本地数据统计如下:

类别 训练集数量 测试集数量 合计
马铃薯早疫病 300 张 100 张 400 张
马铃薯晚疫病 300 张 100 张 400 张
健康叶片 300 张 100 张 400 张
总计 900 张 300 张 1200 张

类别说明

  • Potato___Early_blight:马铃薯早疫病

    • 特征:叶片出现褐色斑点,边缘有黄色晕圈
    • 发病部位:主要在中下部叶片
    • 危害程度:中等,影响光合作用
  • Potato___Late_blight:马铃薯晚疫病

    • 特征:叶片出现水渍状暗绿色病斑,边缘有白色霉层
    • 发病部位:全株叶片均可发生
    • 危害程度:严重,可导致整株死亡
  • Potato___healthy:健康叶片

    • 特征:叶片颜色鲜绿,无病斑
    • 生长状态:正常生长

数据预处理

所有图像在训练前会进行以下预处理:

  1. 尺寸统一:调整为 224×224 像素
  2. 数据增强 (仅训练集):
    • 随机水平翻转
    • 随机旋转(±15°)
    • 颜色抖动
    • 随机裁剪
  3. 归一化:使用 ImageNet 的均值和标准差进行归一化

数据集示例

## 🚀 系统功能

1. 叶片图片上传

  • 支持格式:JPG、PNG、JPEG 等常见图片格式
  • 上传方式:支持拖拽上传和文件选择器上传
  • 大小限制:最大支持 10MB 的图片文件
  • 格式验证:自动检测图片格式和完整性

2. 图片预览与处理

  • 实时预览:前端在用户选择图片后立即展示待识别叶片
  • 图片调整:支持缩放、旋转等基本操作
  • 格式转换:自动将图片转换为模型输入格式
  • 质量检查:验证图片是否包含有效叶片区域

3. 模型选择与切换

  • 多模型支持:Vision Transformer、ResNet、MobileNet 等
  • 权重管理:自动加载对应模型的预训练权重
  • 性能对比:支持不同模型在相同图片上的识别结果对比
  • 默认模型:系统默认使用 Vision Transformer 模型

4. 病害识别与推理

  • 实时推理:后台调用 PyTorch 模型进行快速预测
  • 类别映射:读取类别映射文件,将数字标签转换为可读名称
  • 置信度计算:输出预测类别及对应的置信度分数
  • Top3 结果:展示前三个最可能的病害类别及概率

5. 结果可视化展示

  • 主预测结果:突出显示最高置信度的病害类别
  • 置信度进度条:直观展示模型对预测结果的把握程度
  • 候选结果列表:展示其他可能的病害类别及概率
  • 病害说明卡片:提供病害特征、防治方法和注意事项

6. 数据集适配性

  • 目录结构兼容 :自动识别 Train/Testtrain/val 等常见目录命名
  • 类别自动检测:根据目录名称自动生成类别索引
  • 数据统计:实时显示数据集各类别样本数量
  • 格式验证 :检查数据集结构的完整性和正确性## 模型与核心流程说明
    训练阶段首先通过 ImageFolder 按目录读取叶片图片,并根据目录名称自动生成类别索引。训练集使用随机裁剪、水平翻转等增强方式提高泛化能力;验证或测试阶段使用固定尺寸缩放与归一化,保证输入格式稳定。
    模型部分保留了多个经典网络和 Transformer 网络的训练脚本,例如 AlexNet、VGG、ResNet、MobileNet、DenseNet、Swin Transformer 和 Vision Transformer。当前系统默认训练入口为 python main_train.py --model vit --data_set potato,训练后会保存 weights/best_model.pth 作为页面推理权重。
    预测阶段会读取上传图片,完成 Resize、CenterCrop、ToTensor 和 Normalize 处理,然后加载对应模型权重进行前向推理,最后将 softmax 概率最大的类别作为主要识别结果返回给前端。

训练与运行流程

  • 准备数据集:将马铃薯叶片数据按 Train/Test/类别名 放入 data_set/potato
  • 启动训练:执行 python main_train.py --model vit --data_set potato --epoch 10
  • 查看结果:训练过程会输出 loss、accuracy、precision、recall、f1 等指标,并保存 Excel 结果文件。
  • 启动 Web:安装 Django 等依赖后执行 python manage.py runserver
  • 页面识别:打开首页,上传叶片图片,查看预测类别和置信度。

效果展示与分析

下图从项目已有的部分 *_results.xlsx 文件中抽取前若干轮训练记录生成,用于展示训练记录可视化方式。由于本报告是快速生成版,如果后续重新训练马铃薯数据集,可以直接替换为新的训练日志和曲线。

从展示曲线可以看出,训练结果文件能够记录每轮验证准确率变化,便于对不同模型的收敛速度和稳定性进行比较。实际项目中可以进一步补充混淆矩阵、错误样本可视化和单类别召回率分析,用来判断早疫病与晚疫病之间是否存在误判。

项目总结与优化方向

本项目完成了从数据集加载、模型训练、预测推理到 Django 前端展示的完整流程,适合作为农作物病害识别类项目的基础版本。页面部分已经从通用模板改造成马铃薯病害识别场景,报告中的首页图、数据集样例和可视化图均来自本地项目内容。

后续可以继续优化的方向包括:增加真实训练后的最佳权重文件、加入混淆矩阵分析、扩展更多病害类别、增加历史识别记录、支持批量检测,以及在移动端进一步优化拍照上传体验。