一、项目简介
本项目实现了一个面向食物图像识别的分类系统,系统以 Django 作为 Web 服务框架,以 PyTorch 模型作为图像分类核心。用户在页面中上传菜品图片并选择识别模型后,系统会完成图片预处理、模型推理、类别解析和结果展示。项目适合作为深度学习图像分类、Web 部署和多模型对比实验的综合实践案例。
系统页面围绕"上传图片、选择模型、查看结果"这一主流程设计,同时在页面中展示数据集路径、训练/测试目录和类别信息,使项目的运行入口更加直观。

二、技术栈介绍
核心框架:
- 后端框架:Django
- 深度学习框架:PyTorch
- 前端页面:HTML、CSS、Django Template
- 数据存储:SQLite、media 上传目录、本地数据集目录
支持的模型结构:
- 经典 CNN:AlexNet、VGG、ResNet、GoogLeNet
- 轻量级网络:MobileNet、ShuffleNet、EfficientNet
- 现代架构:DenseNet、RegNet、Swin Transformer、Vision Transformer
整体架构采用 Web 页面与模型推理模块分离的方式。前端负责上传图片和展示结果,后端负责接收请求、保存上传文件、加载模型并调用对应预测函数。模型目录中保留了训练脚本、预测脚本、类别映射文件和训练过程结果文件,便于后续扩展。
三、数据集介绍
项目数据集位于 djangoProject/data_set/foods,采用固定的 train/test 划分方式。每个类别对应一个独立文件夹,目录名称即类别名称,训练脚本可以直接根据目录生成类别索引。
当前包含的食物类别示例:
- apple_pie
- baby_back_ribs
- baklava
- beef_carpaccio
- beef_tartare
这种结构非常适合图像分类任务:训练阶段通过目录读取图片和标签,预测阶段再通过 class_indices.json 将模型输出编号转换为类别名称。系统中各模型目录下的类别映射已经与当前食物数据集保持一致。

四、系统功能设计
核心功能模块:
- 图片上传:用户可以上传待识别的食物图片
- 模型选择:页面提供可用模型下拉选择,便于切换不同网络结构
- 图像预处理:预测脚本会对图片进行尺寸缩放、裁剪、归一化等处理
- 分类预测 :后端根据所选模型调用对应
predict.py完成推理 - 结果展示:页面展示上传图片、预测类别、使用模型和识别置信度
- 数据集概览:页面同步展示数据集路径、划分方式和类别数量
页面风格围绕食物分类系统重新设计,避免通用模板化布局,整体采用左右分栏的工作台形式:左侧为上传与模型设置,右侧为结果预览区域。

五、模型训练与预测流程
训练流程
训练流程主要包括数据读取、数据增强、模型初始化、损失计算、参数更新和结果保存。项目中的 main_train.py 提供统一入口,可以根据参数选择不同模型进行训练。训练完成后,每个模型目录会保存权重文件、类别索引文件和训练过程记录。
预测流程
预测流程主要包括以下步骤:
- 读取用户上传图片
- 按模型要求进行 Resize、CenterCrop、ToTensor 和 Normalize
- 加载对应模型结构和权重文件
- 根据
class_indices.json解析输出类别 - 将识别结果返回到页面
为了保证不同运行目录下都能正确加载资源,预测脚本中的类别文件和权重路径均按脚本所在目录定位,降低路径依赖带来的运行问题。
六、训练过程可视化
项目中保留了多个模型的训练结果文件。为了让文章更便于阅读,这里只选取部分模型和部分训练轮次进行趋势展示,不展开完整指标表。
从训练趋势可以看出,不同网络结构在训练初期的收敛速度和波动情况存在差异。轻量级模型通常训练更快,深层网络和 Transformer 类模型在特征表达方面更具扩展空间。实际使用时可以结合运行速度、模型体积和部署环境综合选择。
七、多维度结果分析
除了观察训练损失变化,还可以从精确率、召回率和 F1 等维度观察模型表现。热力图可以快速体现不同模型在多个维度上的相对差异,适合用于项目汇报中的横向比较。

该系统并不局限于某一个固定模型,后续可以根据数据规模和部署目标继续补充新的网络结构。对于服务器部署场景,可以优先考虑综合表现稳定的模型;对于边缘设备或普通电脑运行场景,则可以更多考虑轻量级模型。
八、运行方式
进入 djangoProject 目录后,可以通过以下命令启动系统:
python manage.py runserver
训练模型时可以使用统一入口,例如:
python main_train.py --model swin --data_set foods --epoch 10
项目支持的模型名称包括:alexnet、googlenet、resnet、vgg、vit、lenet、densenet、mobilenet、efficientnet、regnet、shufflenet、swin。
九、项目总结
本项目将深度学习图像分类模型与 Django Web 系统结合,实现了从数据集整理、模型训练、图片上传到分类结果展示的完整流程。相比单独运行预测脚本,Web 页面可以让模型能力以更直观的方式呈现,也方便后续加入更多交互功能。
后续可以继续优化的方向包括:
- 增加批量预测功能,支持多张图片同时上传。
- 增加训练日志可视化页面,在系统中直接查看曲线变化。
- 增加模型管理模块,支持动态切换权重文件。
- 增加 Top-K 分类结果展示,让用户看到更多候选类别。
- 优化移动端适配,让系统在不同屏幕下都有更好的展示效果。