基于 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一键启动训练。 下图是系统首页的实际截图可以看到模型选择区域和上传入口的布局。核心流程说明为了让读者对整个项目的运转逻辑有一个全局视角这里梳理一下从数据到预测的完整链路数据准备将猫狗图片按 ImageFolder 规范放入train/和test/下的cat/、dog/子目录。这一步决定了后续训练能否自动识别类别——目录名即标签。模型训练运行main_train.py脚本自动扫描训练集目录生成class_indices.json类别映射文件同时开始训练并保存最优权重。训练过程中的各项指标会被实时记录到*_results.xlsx文件中。Web 上传用户在首页选择想要使用的模型比如 MobileNet然后上传一张猫或狗的图片。Django 后端将图片保存到media/目录等待推理。模型推理系统读取对应模型的class_indices.json和权重文件.pth对上传图片执行 Resize → CenterCrop → Normalize 标准预处理流水线然后送入模型完成前向推理。结果展示模型的输出索引通过class_indices.json映射回原始类别cat/dog再在页面上渲染为中文「猫」或「狗」同时展示置信度百分比让用户对自己的识别结果心中有数。整个流程环环相扣且每个环节都预留了扩展接口方便后续接入新模型或新数据集。效果展示与分析下图为基于项目模板和本地猫类样本生成的结果页展示示例。由于当前项目目录中未发现已训练完成的推理权重文件该截图用于展示系统页面效果和结果呈现形式示例概率不作为固定模型输出。项目中包含多份 *_results.xlsx 训练记录下图根据这些本地结果文件提取最后一轮 val_accuracy 与 F1_score 生成用于快速观察不同模型的训练表现对比。从本地结果记录看当前最后一轮验证准确率较高的模型为 MobileNet对应 val_accuracy 约为 0.7500。不同模型在参数量、训练速度和泛化能力上存在差异实际部署时可结合机器性能与准确率要求选择。运行流程进入 djangoProject 目录。使用 mamba 环境运行conda run -n env python manage.py runserver 127.0.0.1:8000。浏览器访问 http://127.0.0.1:8000/。上传猫狗图片并选择模型进行识别。如需重新训练可运行python main_train.py --model Swin --data_set dogs-vs-cats --epoch 10。项目总结与优化方向本项目完成了从数据集组织、模型训练、Web 上传到预测展示的完整闭环适合作为图像分类课程设计、深度学习项目实践和 Django PyTorch 部署示例。后续可以继续优化补充真实训练权重并完善推理测试增加上传图片预览与错误提示将模型权重路径配置化添加批量预测功能增加混淆矩阵、ROC 曲线等更完整的可视化分析。