前言

🎓 写在前面
每年毕业季,无数计算机/人工智能专业的同学都在为毕设发愁:

  • 环境配置难:CUDA、CUDNN 版本不匹配,装环境就花了一周。
  • 代码跑不通:网上下载的开源代码报错连篇,缺少权重文件。
  • 缺乏可视化:只有黑乎乎的终端输出,答辩时没有视觉冲击力。

今天给大家带来的是一个 “开箱即用” 的深度学习实战项目——基于 ShuffleNetV2 的番茄叶片病害检测系统

🔥 项目优势:

  • 纯 Python 开发:基于 Python 3.8 + PyTorch,生态成熟,易于维护。
  • 轻量级模型:采用 ShuffleNetV2 网络,在普通笔记本 CPU 上也能流畅运行(FPS > 30)。
  • 图形化界面:基于 PyQt5 打造的现代化 UI,支持图片上传、一键检测。
  • 完整数据集:包含 二斑蛛螨病、叶霉病、斑点病等 10 类 常见番茄病害数据,可以直接用于训练!

系统演示

本项目配备了完整的图形化交互界面(GUI),操作简单直观。

1. 主界面展示

界面设计简洁大方,包含“加载图像”、“开始识别”、“结果显示”等核心功能区。
在这里插入图片描述

2. 识别效果展示

系统能够精准识别图像中的病害类型,并给出置信度(Confidence)。
在这里插入图片描述

📝 效果实测
在测试集上,模型对于健康叶、叶霉病、早疫病等常见类别的识别准确率达到了 95% 以上。检测单张图片仅需 0.1秒,完全满足实时性要求。


核心技术栈

本项目选型经过深思熟虑,兼顾了易用性性能

  • Python 3.8:语法简洁,人工智能领域的标准语言。
  • PyTorch 1.8+:Facebook 开源的深度学习框架,调试方便,动态图机制非常适合初学者。
  • ShuffleNetV2:一种高效的轻量级卷积神经网络(CNN)。相比于 VGG 或 ResNet,它在保持高精度的同时,大大减少了参数量和计算量,非常适合部署在算力有限的设备上。
  • PyQt5:Python 中最强大的 GUI 库之一,用于构建桌面应用程序。
  • Pillow (PIL):用于图像的读取、缩放和预处理。

项目目录结构

好的项目结构是成功的开始。本项目代码规范,模块清晰:

mobile_net_tomato_01/
├── all_data/                # 📂 数据集目录(包含10类病害图片,按文件夹分类)
├── models/                  # 🧠 模型定义目录
│   └── shufflenetv2.py      #    └─ ShuffleNetV2 网络结构代码
├── weights/                 # 💾 权重文件目录
│   └── tomato-best-epoch.pth #   └─ 训练好的最优模型权重(直接加载即可用)
├── ui/                      # 🎨 UI资源目录(图标、背景图等)
├── train.py                 # 🚀 模型训练脚本(包含训练循环、损失函数定义)
├── predict.py               # 🔍 单张图片预测脚本(核心推理逻辑)
├── 主界面.py                # 🖥️ 图形化界面主程序(入口文件)
├── my_dataset.py            # 📄 数据集加载类(继承自 Dataset)
├── utils.py                 # 🛠️ 工具函数(训练过程可视化等)
├── requirements.txt         # 📦 依赖包列表
└── 环境配置命令.txt          # 📖 详细的环境搭建指南

核心代码展示

为了让大家更好地理解项目运行原理,这里展示部分代码片段。

1. 图形界面初始化与模型加载

主界面.py 中,我们通过 PyQt5 初始化窗口,并自动加载预训练好的 PyTorch 模型。

# 代码位置:主界面.py
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)

        # 1. 自动检测运行设备 (CPU 或 GPU)
        self.device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
        
        # 2. 读取类别索引文件 (class_indices.json)
        json_path = './class_indices.json'
        json_file = open(json_path, "r")
        self.class_indict = json.load(json_file)

        # 3. 创建模型并加载权重 (核心步骤)
        self.model = create_model().to(self.device)
        model_weight_path = "weights/tomato-best-epoch.pth"
        # 加载训练好的参数,map_location 确保在无 GPU 环境下也能运行
        self.model.load_state_dict(torch.load(model_weight_path, map_location=self.device))
        self.model.eval() # 开启验证模式

2. 图像预处理与推理

深度学习模型对输入图片有严格要求(如尺寸、归一化)。以下代码展示了如何处理用户上传的图片并进行预测。

# 代码位置:predict.py
def main(img_path):
    # 定义预处理流程:缩放 -> 裁剪 -> 转Tensor -> 归一化
    data_transform = transforms.Compose([
        transforms.Resize(int(224 * 1.143)),
        transforms.CenterCrop(224),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ])

    # 加载图片
    img = Image.open(img_path)
    img = data_transform(img)
    # 增加 Batch 维度 [C, H, W] -> [1, C, H, W]
    img = torch.unsqueeze(img, dim=0)

    # 模型推理 (No Grad 模式加速)
    with torch.no_grad():
        output = torch.squeeze(model(img.to(device))).cpu()
        predict = torch.softmax(output, dim=0)
        # 获取概率最大的类别索引
        predict_cla = torch.argmax(predict).numpy()
    
    print(f"识别结果: {class_indict[str(predict_cla)]}")

如何使用与运行

本项目经过深度优化,环境配置极其简单。

第一步:安装依赖

建议使用 Anaconda 创建独立的虚拟环境,避免污染本机环境。

conda create -n tomato python=3.8
conda activate tomato
# 安装项目所需的第三方库
pip install -r requirements.txt
# 或者参考 '环境配置命令.txt' 手动安装 PyQt5, torch 等

第二步:运行系统

直接运行主程序文件即可启动图形界面。

python 主界面.py

第三步:开始检测

  1. 点击界面上的 “选择图像” 按钮,从 test/ 文件夹中选择一张番茄叶片图片。
  2. 点击 “开始识别”
  3. 系统将在 1 秒内显示识别结果(如:二斑蛛螨病)和置信度。

获取源码方式

由于篇幅限制,完整的源代码(包含训练脚本)、训练好的 .pth 模型权重、32534张标注好的数据集以及万字实验报告 无法在此全部展示。

📥 获取方式
点击下方链接卡片,即可获取完整项目资源包!

项目代码链接:https://my.feishu.cn/wiki/CLZPwiMBriJDVnkTMJMc37q2nsf?from=from_copylink

博主寄语
毕设不只是一个任务,更是对大学四年所学知识的综合运用。希望这个项目能为你提供灵感,助你顺利通过答辩!如果你觉得文章对你有帮助,欢迎 点赞、收藏、关注 三连支持! ❤️

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐