蝴蝶识别与科普系统工程

蝴蝶识别与科普系统项目

本项目是一个基于深度学习和现代 Web 技巧的综合性平台,旨在为用户给出快速、准确的蝴蝶种类识别服务,并给出丰富的蝴蝶百科科普知识。


一、 算法与模型

本系统的核心是基于卷积神经网络(CNN)的图像识别算法。我们对比并集成了多种先进的深度学习模型,以满足不同场景下的需求。

1.1 深度学习模型

系统支撑动态切换以下三种模型,均基于 PyTorch 框架实现,并在 ImageNet 数据集上进行了预训练(Transfer Learning):

  1. ResNet18 (残差网络)

    • 特点: 引入了“残差块”(Residual Block)和跳跃连接(Skip Connection),有效处理了深层网络中的梯度消失问题。
    • 架构: 包含 18 层深度,通过堆叠残差单元提取图像特征。
    • 优势: 在准确率和推理速度之间取得了极佳的平衡,是系统的默认模型
    • 适用场景: 通用场景,大多数服务器部署环境。
  2. DenseNet121 (密集连接网络)

    • 特点: 采用密集连接机制(Dense Connectivity),每一层都与前面所有层直接相连。
    • 架构: 121 层深度,极大促进了特征复用(Feature Reuse),减少了参数数量。
    • 优势: 通常能获得比 ResNet 更高的准确率,特别是在细粒度分类任务上表现优异。
    • 代价: 显存占用较高,计算量相对较大。
  3. MobileNetV2 (轻量级网络)

    • 特点: 引入了“倒残差结构”(Inverted Residuals)和“深度可分离卷积”(Depthwise Separable Convolutions)。
    • 架构: 专为移动端和嵌入式设备优化,大幅减少了计算量(FLOPs)。
    • 优势: 模型体积小,推理速度极快,适合低算力或实时性要求高的环境。

1.2 训练策略与超参数

为了获得最佳性能,我们在训练过程中采用了以下策略:

  • 数据集划分: 采用 8:2 的比例划分训练集和验证集,并使用**顺序划分(Sequential Split)**策略,防止因视频帧相似性导致的数据泄露。
  • 优化器: 使用 AdamSGD 优化器,初始学习率设为 0.001
  • 学习率调度: 配合 StepLR 调度器,每经过一定 Epoch 衰减学习率,帮助模型更好地收敛到全局最优解。
  • 早停机制 (Early Stopping): 设置 Patience=5,当验证集准确率连续 5 个 Epoch 不再提升时自动停止训练,防止模型过拟合。
  • 损失函数: 使用 交叉熵损失函数 (Cross Entropy Loss),适用于多分类问题。
  • 批次大小 (Batch Size): 32。
  • 训练轮次 (Epochs): 最大 20 轮。

1.3 内容预处理与增强

为了提高模型的泛化能力,我们构建了强大的数据增强流水线:

  • 标准化 (Normalization): 使用 ImageNet 的均值和方差对输入图像进行归一化:
    • Mean: [0.485, 0.456, 0.406]
    • Std: [0.229, 0.224, 0.225]
  • 训练集增强:
    • RandomResizedCrop: 随机裁剪并缩放(0.8 - 1.0),模拟不同拍摄距离。
    • RandomHorizontalFlip: 随机水平翻转,模拟不同拍摄角度。
    • RandomVerticalFlip: 随机垂直翻转 (p=0.3)。
    • RandomRotation: 随机旋转 (±15度)。
    • ColorJitter: 随机调整亮度、对比度、饱和度 (0.2) 和色相 (0.1),模拟不同光照条件。
  • 测试集处理: 仅进行中心裁剪 (Resize -> CenterCrop) 和标准化,确保评估的一致性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1.3.1 增强后的训练样本: 展示了经过随机变换后的训练数据。这种多样性让模型“见多识广”,从而在面对真实世界的复杂图片时也能从容应对。

1.4 模型评估

我们使用多维度的指标对模型进行全面评估:

  • 准确率 (Accuracy): 模型预测正确的样本占总样本的比例。
  • 精确率 (Precision): 预测为正类且实际为正类的比例(查准率)。
  • 召回率 (Recall): 实际为正类且被预测为正类的比例(查全率)。
  • F1-Score: 精确率和召回率的调和平均数,综合反映模型性能。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1.4.1 训练过程对比: 曲线图展示了模型在训练周期内的 Loss 下降和 Accuracy 上升趋势。平滑的曲线表明模型收敛良好,未出现明显的过拟合或欠拟合。

在这里插入图片描述

图 1.4.2 混淆矩阵对比: 混淆矩阵直观地展示了模型在 10 个蝴蝶类别上的分类详情。

  • 横轴: 预测类别
  • 纵轴: 真实类别
  • 对角线: 正确分类的样本数(颜色越深越好)。
  • 非对角线: 误判样本。例如,如果 Class 3 和 Class 4 之间有较多误判,说明这两种蝴蝶外观相似度极高。

在这里插入图片描述

图 1.4.3 详细性能指标对比: 柱状图对比了不同模型在各核心指标上的得分,辅助我们量化分析模型优劣。

在这里插入图片描述

图 1.4.4 类别分布: 展示了原始数据集中各类别样本的数量,用于评估数据均衡性。


二、 框架架构

本系统采用现代化的前后端分离 (SPA)架构,各层职责清晰,易于维护和扩展。

2.1 技术栈

  • 前端 (Frontend):
    • 框架: Vue 3 (Composition API)
    • 构建工具: Vite (极速冷启动和热更新)
    • UI 组件库: Element Plus (美观、响应式的企业级组件)
    • 路由管理: Vue Router 4
    • HTTP 客户端: Axios
  • 后端 (Backend):
    • 框架: Django 4.2 + Django REST Framework (DRF)
    • 认证: SimpleJWT (基于 Token 的无状态认证)
    • 跨域处理: django-cors-headers
  • AI 引擎:
    • 框架: PyTorch
    • 图像处理: Pillow, Torchvision
  • 数据库:
    • 开发: SQLite 3
    • 生产: MySQL (可选)

2.2 数据流向

  1. 用户请求: 用户在前端界面上传图片。
  2. API 调用: 前端通过 Axios 发送 POST 请求到后端 /api/recognition/predict/ 接口。
  3. 图像预处理: 后端接收图片,进行解码、Resize、Normalization 等预处理。
  4. 模型推理: 加载预训练的 PyTorch 模型,输入处理后的 Tensor,计算 Top-5 概率。
  5. 结果返回: 后端将识别结果(类别、置信度、中文名)封装为 JSON 返回给前端。
  6. 持久化: 系统同时将识别记录(图片路径、结果、时间)写入数据库,供历史记录查询。

三、 数据库设计

系统数据库设计严格遵循第三范式 (3NF),重要包含以下核心数据表。

3.1 用户表 (auth_user)

Django 内置的认证体系表,管理系统的所有用户信息。

字段名类型长度约束说明
idInteger-PK, Auto主键,自增ID
usernameVarchar150Unique, Not Null用户名,登录凭证
passwordVarchar128Not NullPBKDF2 算法加密存储的密码哈希
emailVarchar254-电子邮箱地址
is_superuserBoolean-Default False超级管理员标记
is_staffBoolean-Default False员工标记(是否可进入 Django Admin)
date_joinedDateTime-Auto Now账号注册时间
last_loginDateTime-Nullable最后一次登录时间

3.2 蝴蝶图鉴表 (butterflies_butterflyinfo)

存储蝴蝶的生物学百科信息,支持图鉴浏览和详情查询。

字段名类型长度约束说明
idInteger-PK, Auto主键
class_idInteger-Unique, Not Null核心字段,对应 AI 模型输出的类别索引 (0-9)
scientific_nameVarchar128Not Null学名 (拉丁文,如Danaus plexippus)
chinese_nameVarchar128Default ‘’中文俗名 (如 君主斑蝶)
familyVarchar128Default ‘’科 (如 蛱蝶科)
genusVarchar128Default ‘’属 (如 斑蝶属)
regionVarchar256Default ‘’主要分布区域
image_urlVarchar256Default ‘’标准样图的 URL 地址

3.3 识别记录表 (recognition_recognitionrecord)

记录用户的每一次识别行为,用于生成个人历史报告和系统数据统计。

字段名类型长度约束说明
idInteger-PK, Auto主键
user_idInteger-FK (auth_user)外键,关联识别操作的用户
imageImageField100Not Null上传图片的相对存储路径
predicted_labelVarchar128Not Null模型预测的第一结果(类别名)
confidenceFloat-Not Null第一结果的置信度 (0.0 - 1.0)
top5JSON-Not NullJSON字段,存储 Top-5 的完整预测概率分布
created_atDateTime-Auto Now Add记录创建时间

四、 平台作用与界面

4.1 用户注册与登录

  • 功能: 提供 JWT Token 获取与刷新机制。
  • 界面: 采用左右分栏布局或居中卡片布局,背景简洁大气。
  • 交互: 表单实时验证(非空、长度限制),登录成功后自动跳转至首页,并将 Token 存储在 LocalStorage。

在这里插入图片描述

图 4.1.1 登录注册: 简洁的登录界面,用户输入用户名和密码获取身份令牌。

4.2 智能识别 (核心功能)

  • 功能: 支撑拖拽上传、点击上传。前端预览图片,进度条显示上传及处理状态。
  • 结果展示:
    • 核心结果: 大号字体显示最可能的蝴蝶名称。
    • 置信度: 颜色区分的进度条(>90% 绿色,>70% 黄色,其余灰色)。
    • 百科链接: 点击识别结果可直接跳转至该蝴蝶的图鉴详情页。

在这里插入图片描述

图 4.2.1 智能识别: 用户交互的核心区域,直观展示 AI 的判断结果。

4.3 蝴蝶图鉴

  • 功能: 分页展示所有收录的蝴蝶资料。支持按中文名、学名、科、属进行模糊搜索。
  • 详情页: 模态框(Dialog)形式展示蝴蝶的高清大图、分类学信息及详细描述。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4.3.1 蝴蝶图鉴: 知识库模块,帮助用户了解蝴蝶的生物学特征。

4.4 个人中心与历史记录

  • 个人信息: 展示头像、用户名、注册时间及识别统计(今日识别数、总识别数)。
  • 历史记录:
    • 网格视图: 卡片墙形式展示历史图片,美观直观。
    • 列表视图: 表格形式展示,包含详细时间、置信度数值。
    • 操作: 支持单条删除历史记录。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4.4.1 个人信息: 用户的数据仪表盘。

4.5 素材统计

  • 功能: 基于 ECharts 的数据可视化。
  • 图表:
    • 饼图: 热门识别蝴蝶 Top 10 分布。
    • 柱状图: 最近 7 天的系统识别量趋势。
    • 词云: 常见搜索关键词。

在这里插入图片描述

图 4.5.1 数据统计: 宏观展示系统资料的分布规律。

4.6 后台管理 (管理员独有)

  • 权限控制: 仅 is_superuser=Trueis_staff=True 的用户可见。
  • 用户管理: 查看注册用户列表,禁用违规账号,删除测试数据。
  • 模型管理: 查看当前加载的模型版本,对比不同模型的性能指标,甚至支持在线热切换模型(需后端支持)。

在这里插入图片描述

图 4.6.1 用户管理: 系统维护入口。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4.6.2 模型管理: AI 模型监控与管理。

posted @ 2026-01-24 20:33  gccbuaa  阅读(0)  评论(0)    收藏  举报