项目简介
本项目是一个基于 Django 和 PyTorch 的昆虫图像二分类识别系统,专注于实现蚂蚁(ants)与蜜蜂(bees)的智能识别。系统采用前后端分离的设计理念,为用户提供简洁直观的网页上传界面,后端则集成了多种先进的深度学习模型进行图像分类推理。
核心功能:用户可通过网页上传图片,系统自动调用预训练的深度学习模型进行识别,实时返回预测类别、置信度以及所使用的模型信息。本项目不仅实现了基础的图像分类功能,还提供了完整的模型训练、评估和可视化流程,适合作为深度学习图像分类项目的入门实践或二次开发模板。
项目价值:
- 学习价值:涵盖从数据处理、模型训练到 Web 部署的完整深度学习应用开发流程
- 实用价值:可作为昆虫识别、农业监测等场景的技术原型
- 扩展价值:模块化设计便于替换数据集、调整模型架构或集成新的深度学习算法
技术栈
后端框架
- Django 4.x:作为 Web 后端框架,提供 RESTful API 接口和用户界面
- Django REST Framework:用于构建高效的后端 API 服务
深度学习框架
- PyTorch 2.0+:主流的深度学习框架,支持动态计算图和丰富的模型库
数据处理与可视化
- Pandas:用于训练结果数据的处理和分析
- Matplotlib:生成训练过程可视化图表和性能对比图
- Pillow (PIL):图像预处理和格式转换
支持的深度学习模型
本项目集成了多种经典的计算机视觉模型架构,便于对比实验:
传统 CNN 模型:
- AlexNet、VGG、ResNet、GoogLeNet、DenseNet
轻量级模型:
- MobileNet、ShuffleNet、EfficientNet
现代视觉模型:
- RegNet、Swin Transformer、Vision Transformer (ViT)
开发与部署工具
- Python 3.8+:主要编程语言
- HTML/CSS/JavaScript:前端界面开发
- Excel/CSV:训练结果导出格式
数据集说明
数据集结构与来源
本项目使用经典的hymenoptera_data数据集,专门用于蚂蚁与蜜蜂的二分类任务。数据集按照标准的 ImageFolder 格式组织,便于 PyTorch 直接加载。
目录结构:
data_set/hymenoptera_data/ ├── train/ # 训练集 │ ├── ants/ # 蚂蚁类别图片 │ │ ├── ant_001.jpg │ │ ├── ant_002.jpg │ │ └── ... │ └── bees/ # 蜜蜂类别图片 │ ├── bee_001.jpg │ ├── bee_002.jpg │ └── ... └── val/ # 验证集 ├── ants/ # 蚂蚁验证图片 └── bees/ # 蜜蜂验证图片数据集统计信息
| 类别 | 训练集数量 | 验证集数量 | 总计 |
|---|---|---|---|
| 蚂蚁 (ants) | 124 张 | 70 张 | 194 张 |
| 蜜蜂 (bees) | 121 张 | 83 张 | 204 张 |
| 合计 | 245 张 | 153 张 | 398 张 |
数据集特点
- 小规模高质量:虽然数据量不大,但图片质量较高,适合快速实验和原型验证
- 类别平衡:两个类别的样本数量基本平衡,避免类别不平衡问题
- 多样性:包含不同角度、光照条件和背景的昆虫图片
- 标准格式:采用 PyTorch 推荐的 ImageFolder 格式,便于扩展其他数据集
数据增强策略
为提升模型泛化能力,训练过程中应用了多种数据增强技术:
- 随机水平翻转:增加样本多样性
- 随机旋转:±10度范围内的旋转
- 颜色抖动:调整亮度、对比度和饱和度
- 标准化:使用 ImageNet 的均值和标准差进行归一化
图:数据集中的蚂蚁与蜜蜂示例图片
系统功能
1. 模型训练与管理
- 多模型支持:支持从 10+ 种预定义模型架构中选择训练
- 训练配置:可调整学习率、批次大小、训练轮数等超参数
- 结果导出:自动生成 Excel 格式的训练结果报告,包含准确率、损失值等关键指标
- 权重保存:训练完成后自动保存最佳模型权重文件(.pth 格式)
2. 图像识别服务
- 多模型推理:支持使用不同训练好的模型进行推理对比
- 实时预测:上传图片后秒级返回识别结果
- 置信度展示:显示模型对预测结果的置信程度(0-100%)
- 批量处理:支持单张或多张图片批量上传识别
3. 用户交互界面
- 简洁上传:拖拽或点击选择本地图片文件
- 实时预览:上传后立即显示图片缩略图
- 结果展示:清晰展示预测类别、使用模型、置信度等信息
- 历史记录:保留最近的识别记录(需数据库支持扩展)
4. 可视化与分析
- 训练曲线:展示训练过程中的损失和准确率变化
- 模型对比:可视化不同模型在验证集上的性能对比
- 结果导出:支持将识别结果导出为 CSV 或 JSON 格式
图:系统主要功能界面 - 图片上传与识别结果展示
模型训练与识别流程
训练阶段详细流程
1. 数据准备与预处理
# 数据加载示例fromtorchvisionimportdatasets,transforms# 定义数据增强和预处理train_transform=transforms.Compose([transforms.RandomResizedCrop(224),transforms.RandomHorizontalFlip(),transforms.ToTensor(),transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])])# 加载数据集train_dataset=datasets.ImageFolder(root='data_set/hymenoptera_data/train',transform=train_transform)2. 模型选择与配置
- 从预定义的模型列表中选择架构(如 ResNet18、MobileNetV2 等)
- 加载预训练权重(ImageNet)或从头开始训练
- 修改最后一层全连接层以适应二分类任务
3. 训练循环与优化
- 优化器:使用 Adam 或 SGD 优化器
- 损失函数:交叉熵损失(CrossEntropyLoss)
- 学习率调度:支持 StepLR、CosineAnnealingLR 等策略
- 早停机制:监控验证集准确率,防止过拟合
4. 结果保存
- 保存最佳模型权重(
best_model.pth) - 生成训练日志文件(
training_log.csv) - 导出性能指标到 Excel(
model_results.xlsx) - 保存类别映射文件(
class_indices.json)
效果展示与分析
根据项目中的训练结果文件统计,当前最佳验证准确率最高的模型为 MobileNet。下图来自项目本地 *_results.xlsx 文件,用于快速比较不同模型的验证表现。
下图选取部分模型的若干 epoch 验证准确率走势,便于观察训练过程中的收敛变化。该图基于项目结果表生成,可在重新训练后替换为新的训练日志。
运行流程
- 准备 hymenoptera_data 数据集,并保持 train/val/ants/bees 目录结构。
- 使用 main_train.py 选择模型进行训练,生成对应权重和结果表。
- 启动 Django 服务,进入网页端上传昆虫图片进行识别。
- 若更换数据集或类别,需要同步更新 class_indices.json 并重新训练模型。
项目总结与优化方向
该系统覆盖了从数据集组织、模型训练、结果可视化到网页端识别展示的完整流程,适合作为图像分类项目模板继续扩展。后续可从增加数据量、使用更稳定的预训练权重、加入混淆矩阵、保存用户识别记录、优化移动端交互等方向继续完善。