基于MobileNet花卉识别系统

项目简介

本项目是一个基于深度学习的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种数据增强技术:

  1. 旋转增强:90°、180°、270°旋转,随机角度旋转(-15°~15°)
  2. 翻转增强:水平翻转、垂直翻转
  3. 亮度调整:亮度增强、亮度减弱
  4. 对比度调整:对比度增强、对比度减弱
  5. 饱和度调整:饱和度增强、饱和度减弱
  6. 其他增强:锐化、模糊、裁剪缩放、噪声添加、颜色抖动

花卉类别

系统可识别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的详细训练信息:

  • 训练损失和准确率
  • 验证损失和准确率
  • 当前学习率
  • 模型保存信息

系统功能

  1. 单张图像识别:上传单张花卉图像进行识别,显示识别结果、置信度、类别编号等详细信息
  2. 视频识别:支持视频文件导入,逐帧识别花卉种类
  3. 摄像头实时识别:通过摄像头实时采集图像并进行识别
  4. 历史记录查询:自动保存所有识别记录,支持查看历史识别结果
  5. 数据导出:识别结果可导出为CSV文件,方便后续分析
  6. 花卉详细信息:展示识别花卉的详细信息和特征描述

项目技术栈

  • 前端框架: PyQt6
  • 深度学习框架: PyTorch
  • 计算机视觉库: OpenCV、PIL
  • 模型架构: torchvision.models(MobileNet V2)
  • 数据处理: NumPy、SciPy
  • 可视化: Matplotlib、Seaborn
  • 其他工具: tqdm(进度条)、scikit-learn(评估指标)

系统运行流程

  1. 启动系统:运行主程序,加载训练好的模型权重
  2. 选择识别模式
    • 图片识别:选择单张图片文件进行识别
    • 视频识别:选择视频文件,系统逐帧识别
    • 摄像头识别:打开摄像头,实时识别画面中的花卉
  3. 查看识别结果:系统显示识别出的花卉名称、置信度、类别编号等信息
  4. 查看历史记录:在历史记录页面查看所有识别记录,包括识别时间、来源、结果等
  5. 导出数据:将识别结果导出为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)、数据集配置文件示例、使用说明和安装指南

项目为个人原创,有需要定制功能(界面定制/模型定制/指标训练定制/文档/部署等)可按需求加,根据工作量和复杂度评估费用。


相关推荐
云卓SKYDROID1 小时前
无人机故障诊断技术模块要点!
人工智能·无人机·高科技·云卓科技·故障模块
m0_603888711 小时前
VEQ Modality-Adaptive Quantization for MoE Vision-Language Models
人工智能·ai·语言模型·自然语言处理·论文速览
智驱力人工智能1 小时前
无人机目标检测 低空安全治理的工程实践与价值闭环 无人机缺陷识别 农业无人机作物长势分析系统 森林防火无人机火点实时识别
人工智能·opencv·安全·yolo·目标检测·无人机·边缘计算
qq_526099131 小时前
如何选择适合的工业级图像采集卡
图像处理·计算机视觉·自动化
zhangfeng11332 小时前
大语言模型llm 量化模型 跑在 边缘设备小显存显卡 GGUF GGML PyTorch (.pth, .bin, SafeTensors)
人工智能·pytorch·深度学习·语言模型
纤纡.2 小时前
深度学习环境搭建:CUDA+PyTorch+TorchVision+Torchaudio 一站式安装教程
人工智能·pytorch·深度学习
方见华Richard2 小时前
《认知几何学:思维如何弯曲意义空间》补充材料
人工智能·经验分享·交互·原型模式·空间计算
石去皿2 小时前
一款轻量级桌面级图片批量压缩工具,专为高效减小图片文件体积而设计,面向latex编译速度优化
网络·人工智能·工具·压缩图片
柳安忆2 小时前
【论文阅读】2025.11-2026.1 AI科学家论文阅读
人工智能