基于 Django + PyTorch 的猫狗分类系统项目实践

基于 Django + PyTorch 的猫狗分类系统项目实践

📝 摘要:本文介绍一个基于 Django + PyTorch 的猫狗图像分类 Web 识别系统,支持 AlexNet、ResNet、MobileNet、Vision Transformer 等十余种主流模型。项目覆盖从数据组织、模型训练到 Web 上传推理与结果展示的完整流程,使用经典 Dogs-vs-Cats 数据集(训练集 20,000 张、测试集 5,000 张),并提供统一的命令行训练脚本。整套方案适合作为图像分类入门实践、课程设计或深度学习部署的参考示例。

项目简介

你有没有想过,用深度学习来区分猫和狗到底有多简单?🐱🐶 本项目就带你手把手搭建一个完整的「猫狗图像分类 Web 识别系统」,从前端上传图片到后端模型推理,再到结果可视化,一条龙搞定。

系统前端提供直观的图片上传、模型选择和识别结果展示界面;后端基于 Django 框架组织页面路由、处理文件上传并调度模型推理;核心识别能力则由 PyTorch 驱动,集成了 AlexNet、ResNet、MobileNet、Vision Transformer 等十余种经典 CNN 与 Transformer 模型——可以说是一个深度学习模型的小型竞技场

项目从原始模板迁移至猫狗分类场景后,数据集路径、类别索引、页面文案和训练脚本的默认配置已全面适配 Dogs-vs-Cats 数据集,拿到代码即可直接开练。

技术栈

本项目麻雀虽小五脏俱全,涉及前后端与深度学习三大领域,主要技术选型如下:

层级技术说明
后端框架Django处理路由、文件上传、静态资源与模型推理调度
深度学习PyTorch + torchvision模型定义、训练、推理与图像预处理
模型家族AlexNet、GoogLeNet、ResNet、VGG、LeNet、MobileNet、DenseNet、EfficientNet、RegNet、ShuffleNet、Swin Transformer、Vision Transformer覆盖从经典 CNN 到现代 Transformer 的主流架构
图像处理Pillow + torchvision.transforms图片格式转换、Resize、Crop、Normalize 等预处理管线
数据组织ImageFolder 格式train/test/下的cat/dog/子目录自动归类
结果记录Excel(*_results.xlsx每个模型训练完成后自动保存当前表现,方便横向对比

这套技术栈的优势在于:Django 成熟稳定、PyTorch 灵活强大,而且模型覆盖面广——无论你是想快速部署一个轻量级 MobileNet,还是想把玩最新的 Vision Transformer,都能在本项目中找到对应的实现。

数据集说明

数据集使用的是经典的Dogs-vs-Cats(猫狗大战)数据集,存放在djangoProject/data_set/dogs-vs-cats目录下。

目前本地数据的分布如下:

集合合计
训练集10,00010,00020,000
测试集2,5002,5005,000

💡 训练脚本有一个贴心设计:会优先读取val/目录作为验证集;如果val/不存在,则自动退回到test/目录。这样一来,即使你的数据集只有 train 和 test 两个子目录,也无需手动调整代码,开箱即用。

系统功能

整个 Web 系统围绕「上传 → 推理 → 展示」这条主线设计,具体功能如下:

  • 🏠 首页导航:清晰展示猫狗分类系统名称、数据集类别说明和模型选择下拉框,用户一目了然。
  • 📤 图片上传:支持 JPG、PNG、JPEG 等常见图片格式,拖拽或点击即可上传。
  • 🧠 智能推理:根据用户选择的模型,动态加载对应的class_indices.json与权重文件,对图片进行 Resize → CenterCrop → Normalize 预处理后完成推理,返回预测类别与置信度。
  • 📊 结果展示:结果页直观呈现上传的原始图片、所使用的模型名称、预测类别(中文显示「猫」或「狗」)以及识别概率。
  • 🛠️ 训练入口main_train.py作为统一训练脚本,支持通过命令行参数切换模型架构(--model)、指定数据集(--data_set)和训练轮数(--epoch),一键启动训练。

📌 下图是系统首页的实际截图,可以看到模型选择区域和上传入口的布局。

核心流程说明

为了让读者对整个项目的运转逻辑有一个全局视角,这里梳理一下从数据到预测的完整链路:

  1. 数据准备:将猫狗图片按 ImageFolder 规范放入train/test/下的cat/dog/子目录。这一步决定了后续训练能否自动识别类别——目录名即标签。
  2. 模型训练:运行main_train.py,脚本自动扫描训练集目录生成class_indices.json(类别映射文件),同时开始训练并保存最优权重。训练过程中的各项指标会被实时记录到*_results.xlsx文件中。
  3. Web 上传:用户在首页选择想要使用的模型(比如 MobileNet),然后上传一张猫或狗的图片。Django 后端将图片保存到media/目录,等待推理。
  4. 模型推理:系统读取对应模型的class_indices.json和权重文件(.pth),对上传图片执行 Resize → CenterCrop → Normalize 标准预处理流水线,然后送入模型完成前向推理。
  5. 结果展示:模型的输出索引通过class_indices.json映射回原始类别(cat/dog),再在页面上渲染为中文「猫」或「狗」,同时展示置信度百分比,让用户对自己的识别结果心中有数。

整个流程环环相扣,且每个环节都预留了扩展接口,方便后续接入新模型或新数据集。

效果展示与分析

下图为基于项目模板和本地猫类样本生成的结果页展示示例。由于当前项目目录中未发现已训练完成的推理权重文件,该截图用于展示系统页面效果和结果呈现形式,示例概率不作为固定模型输出。


项目中包含多份 *_results.xlsx 训练记录,下图根据这些本地结果文件提取最后一轮 val_accuracy 与 F1_score 生成,用于快速观察不同模型的训练表现对比。
从本地结果记录看,当前最后一轮验证准确率较高的模型为 MobileNet,对应 val_accuracy 约为 0.7500。不同模型在参数量、训练速度和泛化能力上存在差异,实际部署时可结合机器性能与准确率要求选择。

运行流程

  1. 进入 djangoProject 目录。
  2. 使用 mamba 环境运行:conda run -n env python manage.py runserver 127.0.0.1:8000。
  3. 浏览器访问 http://127.0.0.1:8000/。
  4. 上传猫狗图片并选择模型进行识别。
  5. 如需重新训练,可运行:python main_train.py --model Swin --data_set dogs-vs-cats --epoch 10。

项目总结与优化方向

本项目完成了从数据集组织、模型训练、Web 上传到预测展示的完整闭环,适合作为图像分类课程设计、深度学习项目实践和 Django + PyTorch 部署示例。
后续可以继续优化:补充真实训练权重并完善推理测试;增加上传图片预览与错误提示;将模型权重路径配置化;添加批量预测功能;增加混淆矩阵、ROC 曲线等更完整的可视化分析。