《深度学习实战:手把手教你用 Python+PyTorch 搭建番茄叶病分类识别系统》
今天给大家带来的是一个 “开箱即用” 的深度学习实战项目——基于 ShuffleNetV2 的番茄叶片病害检测系统。🔥 项目优势:本项目配备了完整的图形化交互界面(GUI),操作简单直观。界面设计简洁大方,包含“加载图像”、“开始识别”、“结果显示”等核心功能区。系统能够精准识别图像中的病害类型,并给出置信度(Confidence)。本项目选型经过深思熟虑,兼顾了易用性和性能:好的项目结构是成功
前言
🎓 写在前面:
每年毕业季,无数计算机/人工智能专业的同学都在为毕设发愁:
- 环境配置难: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
第三步:开始检测
- 点击界面上的 “选择图像” 按钮,从
test/文件夹中选择一张番茄叶片图片。 - 点击 “开始识别”。
- 系统将在 1 秒内显示识别结果(如:二斑蛛螨病)和置信度。
获取源码方式
由于篇幅限制,完整的源代码(包含训练脚本)、训练好的 .pth 模型权重、32534张标注好的数据集以及万字实验报告 无法在此全部展示。
📥 获取方式:
点击下方链接卡片,即可获取完整项目资源包!
项目代码链接:https://my.feishu.cn/wiki/CLZPwiMBriJDVnkTMJMc37q2nsf?from=from_copylink
博主寄语:
毕设不只是一个任务,更是对大学四年所学知识的综合运用。希望这个项目能为你提供灵感,助你顺利通过答辩!如果你觉得文章对你有帮助,欢迎 点赞、收藏、关注 三连支持! ❤️
更多推荐
所有评论(0)