蝴蝶识别与科普系统工程
蝴蝶识别与科普系统项目
本项目是一个基于深度学习和现代 Web 技巧的综合性平台,旨在为用户给出快速、准确的蝴蝶种类识别服务,并给出丰富的蝴蝶百科科普知识。
一、 算法与模型
本系统的核心是基于卷积神经网络(CNN)的图像识别算法。我们对比并集成了多种先进的深度学习模型,以满足不同场景下的需求。
1.1 深度学习模型
系统支撑动态切换以下三种模型,均基于 PyTorch 框架实现,并在 ImageNet 数据集上进行了预训练(Transfer Learning):
ResNet18 (残差网络)
- 特点: 引入了“残差块”(Residual Block)和跳跃连接(Skip Connection),有效处理了深层网络中的梯度消失问题。
- 架构: 包含 18 层深度,通过堆叠残差单元提取图像特征。
- 优势: 在准确率和推理速度之间取得了极佳的平衡,是系统的默认模型。
- 适用场景: 通用场景,大多数服务器部署环境。
DenseNet121 (密集连接网络)
- 特点: 采用密集连接机制(Dense Connectivity),每一层都与前面所有层直接相连。
- 架构: 121 层深度,极大促进了特征复用(Feature Reuse),减少了参数数量。
- 优势: 通常能获得比 ResNet 更高的准确率,特别是在细粒度分类任务上表现优异。
- 代价: 显存占用较高,计算量相对较大。
MobileNetV2 (轻量级网络)
- 特点: 引入了“倒残差结构”(Inverted Residuals)和“深度可分离卷积”(Depthwise Separable Convolutions)。
- 架构: 专为移动端和嵌入式设备优化,大幅减少了计算量(FLOPs)。
- 优势: 模型体积小,推理速度极快,适合低算力或实时性要求高的环境。
1.2 训练策略与超参数
为了获得最佳性能,我们在训练过程中采用了以下策略:
- 数据集划分: 采用 8:2 的比例划分训练集和验证集,并使用**顺序划分(Sequential Split)**策略,防止因视频帧相似性导致的数据泄露。
- 优化器: 使用 Adam 或 SGD 优化器,初始学习率设为
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]
- Mean:
- 训练集增强:
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 数据流向
- 用户请求: 用户在前端界面上传图片。
- API 调用: 前端通过 Axios 发送
POST请求到后端/api/recognition/predict/接口。 - 图像预处理: 后端接收图片,进行解码、Resize、Normalization 等预处理。
- 模型推理: 加载预训练的 PyTorch 模型,输入处理后的 Tensor,计算 Top-5 概率。
- 结果返回: 后端将识别结果(类别、置信度、中文名)封装为 JSON 返回给前端。
- 持久化: 系统同时将识别记录(图片路径、结果、时间)写入数据库,供历史记录查询。
三、 数据库设计
系统数据库设计严格遵循第三范式 (3NF),重要包含以下核心数据表。
3.1 用户表 (auth_user)
Django 内置的认证体系表,管理系统的所有用户信息。
| 字段名 | 类型 | 长度 | 约束 | 说明 |
|---|---|---|---|---|
| id | Integer | - | PK, Auto | 主键,自增ID |
| username | Varchar | 150 | Unique, Not Null | 用户名,登录凭证 |
| password | Varchar | 128 | Not Null | PBKDF2 算法加密存储的密码哈希 |
| Varchar | 254 | - | 电子邮箱地址 | |
| is_superuser | Boolean | - | Default False | 超级管理员标记 |
| is_staff | Boolean | - | Default False | 员工标记(是否可进入 Django Admin) |
| date_joined | DateTime | - | Auto Now | 账号注册时间 |
| last_login | DateTime | - | Nullable | 最后一次登录时间 |
3.2 蝴蝶图鉴表 (butterflies_butterflyinfo)
存储蝴蝶的生物学百科信息,支持图鉴浏览和详情查询。
| 字段名 | 类型 | 长度 | 约束 | 说明 |
|---|---|---|---|---|
| id | Integer | - | PK, Auto | 主键 |
| class_id | Integer | - | Unique, Not Null | 核心字段,对应 AI 模型输出的类别索引 (0-9) |
| scientific_name | Varchar | 128 | Not Null | 学名 (拉丁文,如Danaus plexippus) |
| chinese_name | Varchar | 128 | Default ‘’ | 中文俗名 (如 君主斑蝶) |
| family | Varchar | 128 | Default ‘’ | 科 (如 蛱蝶科) |
| genus | Varchar | 128 | Default ‘’ | 属 (如 斑蝶属) |
| region | Varchar | 256 | Default ‘’ | 主要分布区域 |
| image_url | Varchar | 256 | Default ‘’ | 标准样图的 URL 地址 |
3.3 识别记录表 (recognition_recognitionrecord)
记录用户的每一次识别行为,用于生成个人历史报告和系统数据统计。
| 字段名 | 类型 | 长度 | 约束 | 说明 |
|---|---|---|---|---|
| id | Integer | - | PK, Auto | 主键 |
| user_id | Integer | - | FK (auth_user) | 外键,关联识别操作的用户 |
| image | ImageField | 100 | Not Null | 上传图片的相对存储路径 |
| predicted_label | Varchar | 128 | Not Null | 模型预测的第一结果(类别名) |
| confidence | Float | - | Not Null | 第一结果的置信度 (0.0 - 1.0) |
| top5 | JSON | - | Not Null | JSON字段,存储 Top-5 的完整预测概率分布 |
| created_at | DateTime | - | 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=True或is_staff=True的用户可见。 - 用户管理: 查看注册用户列表,禁用违规账号,删除测试数据。
- 模型管理: 查看当前加载的模型版本,对比不同模型的性能指标,甚至支持在线热切换模型(需后端支持)。

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

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

浙公网安备 33010602011771号