项目简介
本项目是一个基于深度学习的102种花卉识别系统,采用MobileNet V2轻量级网络架构,支持图片、视频和摄像头实时识别。系统提供友好的图形界面,支持历史记录查询和数据导出功能。
数据集介绍
数据集基本信息
- 数据集名称: Oxford 102 Flowers Dataset
- 花卉种类: 102种
- 原始图片总数: 8,189张
- 数据集存储位置 :
data/目录 - 图片命名格式 :
image_XXXXX.jpg(5位数字编号,如image_00001.jpg) - 标签文件 :
imagelabels.mat(包含每张图片对应的花卉类别标签) - 花卉名称文件 :
oxford_flower_102_name.csv(包含102种花卉的中文名称映射)
数据集文件结构
data/
├── image_00001.jpg
├── image_00002.jpg
├── ...
└── image_08189.jpg
oxford_flower_102_name.csv # 花卉类别名称映射文件(Index, Name)
imagelabels.mat # 图片标签文件(MATLAB格式)
数据增强
原始数据集包含8,189张图片,可通过数据增强技术进行扩充。支持以下18种数据增强技术:
- 旋转增强:90°、180°、270°旋转,随机角度旋转(-15°~15°)
- 翻转增强:水平翻转、垂直翻转
- 亮度调整:亮度增强、亮度减弱
- 对比度调整:对比度增强、对比度减弱
- 饱和度调整:饱和度增强、饱和度减弱
- 其他增强:锐化、模糊、裁剪缩放、噪声添加、颜色抖动
花卉类别
系统可识别102种花卉,完整的花卉类别列表存储在 oxford_flower_102_name.csv 文件中,包括:
- 粉报春花、硬叶袋兰、风铃草、香豌豆、英国金盏菊、卷丹、月光蓝、鹤望兰、乌头、蓝刺头
- 金鱼草、款冬、帝王海神花、矛蓟、黄鸢尾、金莲花、紫锥花、秘鲁百合、桔梗、巨型白海芋百合
- 火百合、针垫花、贝母花、红姜花、葡萄风信子、虞美人、威尔士亲王羽花、无茎龙胆、洋蓟、须苞石竹
- 康乃馨、园福禄考、黑种草、墨西哥紫菀、高山蓝刺头、红宝石唇卡特兰、海角花、大星芹、暹罗郁金香、圣诞玫瑰
- 巴氏雏菊、黄水仙、剑兰、一品红、深蓝菠菜罗、桂竹香、金盏菊、毛茛、大滨菊、普通蒲公英
- 矮牵牛、三色堇、报春花、向日葵、天竺葵、兰达夫主教、山桃草、老鹳草、橙色大丽花、粉黄大丽花
- 穗花姜黄、日本银莲花、黑心金光菊、银姬小蜡、花菱草、蓝目菊、春番红花、髯毛鸢尾、银莲花、树罂粟
- 勋章菊、杜鹃花、睡莲、玫瑰、曼陀罗、牵牛花、西番莲、荷花、蟾蜍百合、红掌
- 鸡蛋花、铁线莲、木槿、耧斗菜、沙漠玫瑰、树锦葵、木兰、仙客来、豆瓣菜、美人蕉
- 朱顶红、美国薄荷、球铁兰、毛地黄、三角梅、山茶花、锦葵、墨西哥矮牵牛、凤梨、天人菊
- 凌霄花、黑百合
(完整列表请参考 oxford_flower_102_name.csv 文件)
训练过程
模型架构
- 基础模型: MobileNet V2
- 预训练权重: ImageNet预训练权重
- 分类层: 102类全连接层
训练参数
- 优化器: Adam
- 初始学习率: 0.001
- 学习率调度: StepLR(每10个epoch衰减0.1倍)
- 损失函数: CrossEntropyLoss
- 批次大小: 32
- 训练轮数: 30 epochs
- 数据加载线程数: 4
数据预处理
训练集预处理:
- RandomResizedCrop(224)
- RandomHorizontalFlip()
- ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2, hue=0.1)
- 归一化:mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]
验证集预处理:
- Resize(256)
- CenterCrop(224)
- 归一化:mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]
训练结果
- 最佳验证准确率: 92.06%
- 最终训练准确率: 95.49%
- 最终验证准确率: 91.76%
可视化图表含义
1. 训练曲线图(training_curves.png)
包含两个子图:
-
Loss曲线:展示训练集和验证集的损失值随epoch的变化趋势
- 蓝色线:训练集损失(Train Loss)
- 红色线:验证集损失(Val Loss)
- 理想情况下,两条曲线应逐渐下降并趋于稳定
-
Accuracy曲线:展示训练集和验证集的准确率随epoch的变化趋势
- 蓝色线:训练集准确率(Train Acc)
- 红色线:验证集准确率(Val Acc)
- 理想情况下,两条曲线应逐渐上升并趋于稳定,且训练集准确率略高于验证集
2. 混淆矩阵(confusion_matrix.png)
-
归一化混淆矩阵:展示模型在各类别上的分类性能
- 横轴:预测标签(Predicted Label)
- 纵轴:真实标签(True Label)
- 颜色深浅:表示分类正确的比例,颜色越深表示该类别分类效果越好
- 对角线元素:表示正确分类的样本比例
- 非对角线元素:表示误分类的情况
-
绝对数值混淆矩阵(confusion_matrix_absolute.png):展示各类别的实际分类样本数量
3. 训练日志(training_log.txt)
记录每个epoch的详细训练信息:
- 训练损失和准确率
- 验证损失和准确率
- 当前学习率
- 模型保存信息
系统功能
- 单张图像识别:上传单张花卉图像进行识别,显示识别结果、置信度、类别编号等详细信息
- 视频识别:支持视频文件导入,逐帧识别花卉种类
- 摄像头实时识别:通过摄像头实时采集图像并进行识别
- 历史记录查询:自动保存所有识别记录,支持查看历史识别结果
- 数据导出:识别结果可导出为CSV文件,方便后续分析
- 花卉详细信息:展示识别花卉的详细信息和特征描述
项目技术栈
- 前端框架: PyQt6
- 深度学习框架: PyTorch
- 计算机视觉库: OpenCV、PIL
- 模型架构: torchvision.models(MobileNet V2)
- 数据处理: NumPy、SciPy
- 可视化: Matplotlib、Seaborn
- 其他工具: tqdm(进度条)、scikit-learn(评估指标)
系统运行流程
- 启动系统:运行主程序,加载训练好的模型权重
- 选择识别模式 :
- 图片识别:选择单张图片文件进行识别
- 视频识别:选择视频文件,系统逐帧识别
- 摄像头识别:打开摄像头,实时识别画面中的花卉
- 查看识别结果:系统显示识别出的花卉名称、置信度、类别编号等信息
- 查看历史记录:在历史记录页面查看所有识别记录,包括识别时间、来源、结果等
- 导出数据:将识别结果导出为CSV文件,便于数据分析和统计
系统目录结构
flower_recognition/
├── main.py # 主程序入口,包含UI界面和识别功能
├── train.py # MobileNet V2模型训练脚本
├── train_densenet121.py # DenseNet121模型训练脚本
├── augment_dataset.py # 数据增强脚本
├── download_weights.py # 预训练权重下载脚本
├── create_label_mapping.py # 标签映射创建脚本
├── compare_models.py # 模型对比脚本
├── history.json # 历史记录数据文件
├── requirements_ui.txt # 依赖包列表
├── oxford_flower_102_name.csv # 花卉类别名称映射文件(102种花卉中文名称)
├── imagelabels.mat # 图片标签文件(MATLAB格式)
├── checkpoint/ # 预训练权重目录
│ └── mobilenet_v2-b0353104.pth
├── data/ # 数据集目录(Oxford 102 Flowers Dataset)
│ ├── image_00001.jpg # 图片文件(共8,189张)
│ ├── image_00002.jpg
│ ├── ...
│ └── image_08189.jpg
├── logs_mobilenetV2/ # MobileNet V2训练日志目录
│ ├── training_log.txt # 训练日志文本
│ ├── training_curves.png # 训练曲线图
│ ├── confusion_matrix.png # 混淆矩阵图
│ ├── confusion_matrix_absolute.png # 绝对数值混淆矩阵
│ ├── mobilenet_flowers102_best.pth # 最佳模型权重
│ └── model_info.json # 模型信息
└── logs_densenet121/ # DenseNet121训练日志目录
├── training_log.txt
├── training_curves.png
├── confusion_matrix.png
├── confusion_matrix_absolute.png
├── densenet121_flowers102_best.pth
└── model_info.json
环境配置
依赖安装
pip install -r requirements_ui.txt
主要依赖包
- PyQt6
- torch
- torchvision
- opencv-python
- Pillow
- numpy
- scipy
- matplotlib
- seaborn
- scikit-learn
- tqdm
【交付内容】
完整源代码、训练脚本和可视化脚本、项目说明文档(README.md)、数据集配置文件示例、使用说明和安装指南
项目为个人原创,有需要定制功能(界面定制/模型定制/指标训练定制/文档/部署等)可按需求加,根据工作量和复杂度评估费用。







