猫狗图像分类与在线识别系统

基于深度学习的猫狗图像分类项目,使用 PyTorch + ResNet18(迁移学习)进行模型训练,FastAPI 提供后端服务,Vue.js 实现前端交互界面。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

项目简介

本项目实现了一个完整的图像分类系统,包括:

  • 模型训练:使用 PyTorch 和预训练的 ResNet18 模型进行迁移学习
  • 后端服务:基于 FastAPI 的 RESTful API 服务
  • 前端界面:使用 Vue.js 实现的图片上传与识别展示页面

适合作为本科毕业设计项目,代码结构清晰,注释完整,便于论文撰写和答辩展示。

技术栈

深度学习

  • PyTorch:深度学习框架
  • ResNet18:预训练的卷积神经网络模型
  • 迁移学习:利用 ImageNet 预训练权重,在小数据集上快速收敛

后端

  • FastAPI:现代、快速的 Python Web 框架
  • Uvicorn:ASGI 服务器

前端

  • Vue.js 3:渐进式 JavaScript 框架(使用本地 vue.js 文件)
  • HTML5 + CSS3:现代化 UI 设计

项目结构

cats_vs_dogs/
├── README.md                   # 项目说明文档
├── requirements.txt            # Python 依赖包
├── train.py                    # 模型训练脚本
├── data/
│   └── cats_vs_dogs/          # 数据集目录
│       ├── cats/              # 猫的图片文件夹
│       └── dogs/              # 狗的图片文件夹
├── models/
│   └── resnet18_cats_dogs.pth # 训练好的模型文件(训练后生成)
├── backend/
│   ├── main.py                # FastAPI 服务入口
│   ├── model_loader.py        # 模型加载和推理模块
│   └── utils.py               # 工具函数
└── frontend/
    ├── index.html             # 前端页面
    └── vue.js                  # Vue 3 库文件(需要自行放置)

快速开始

1. 环境准备

安装 Python 依赖

重要:由于 PyTorch 需要单独安装 CUDA 版本,请按以下步骤操作:

方式一:使用安装脚本(推荐,最简单)

  • Windows 用户:双击运行 install_cuda_pytorch.bat
  • Linux/Mac 用户:运行 bash install_cuda_pytorch.sh

脚本会自动安装 CUDA 版本的 PyTorch 和其他依赖。

方式二:手动安装

https://blog.csdn.net/yuanmomoya/article/details/147025483

  1. 首先安装支持 CUDA 的 PyTorch(RTX 4060 Ti 推荐使用 CUDA 12.1):

    # CUDA 12.1 版本(推荐)
    pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121
    

    或者使用 CUDA 11.8 版本:

    # CUDA 11.8 版本
    pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118
    
  2. 验证 CUDA 是否可用

    python -c "import torch; print(f'CUDA 可用: {torch.cuda.is_available()}'); print(f'CUDA 版本: {torch.version.cuda if torch.cuda.is_available() else \"未安装\"}'); print(f'GPU 设备: {torch.cuda.get_device_name(0) if torch.cuda.is_available() else \"\"}')"
    

    如果输出显示 CUDA 可用: True 和您的 GPU 名称(如 “NVIDIA GeForce RTX 4060 Ti”),说明安装成功。

  3. 安装其他依赖

    pip install -r requirements.txt
    

注意

  • 如果您的系统没有安装 CUDA 驱动,请先安装 NVIDIA CUDA Toolkit
  • RTX 4060 Ti 需要 CUDA 11.8 或更高版本
  • 安装 CUDA 版本的 PyTorch 后,训练速度将大幅提升(相比 CPU 训练快 10-50 倍)
准备数据集

将猫狗图像数据集放置在 data/cats_vs_dogs/ 目录下,目录结构如下:

data/cats_vs_dogs/
├── cats/
│   ├── cat001.jpg
│   ├── cat002.jpg
│   └── ...
└── dogs/
    ├── dog001.jpg
    ├── dog002.jpg
    └── ...

数据集来源

2. 模型训练

运行训练脚本:

python train.py

训练过程会显示:

  • 每个 epoch 的训练损失和准确率
  • 验证损失和准确率
  • 最佳模型自动保存

训练完成后,模型会保存到 models/resnet18_cats_dogs.pth

训练参数说明

  • BATCH_SIZE = 32:批次大小
  • LEARNING_RATE = 0.001:学习率
  • NUM_EPOCHS = 10:训练轮数
  • TRAIN_RATIO = 0.8:训练集占比(80%)

可在 train.py 中修改这些参数。

3. 启动服务(统一启动)

推荐方式:一键启动前后端整合服务

在项目根目录运行:

python app.py

服务启动后:

  • 前端界面:访问 http://localhost:8000 使用图像分类功能
  • API 文档:访问 http://localhost:8000/docs 查看 Swagger 文档
  • 健康检查:访问 http://localhost:8000/ping 检查服务状态

API 接口

  • GET /:前端首页
  • GET /ping:健康检查
  • POST /predict:图像分类预测

注意:确保 frontend/vue.global.js 文件存在(Vue 3 库文件)。


论文要点说明

1. 卷积神经网络(CNN)

卷积神经网络通过卷积层自动提取图像特征:

  • 卷积层:使用卷积核扫描图像,提取局部特征
  • 池化层:降低特征图尺寸,减少参数量
  • 全连接层:将提取的特征映射到类别输出

2. ResNet 残差结构

ResNet(残差网络)通过跳跃连接解决了深层网络的梯度消失问题:

  • 残差块output = F(x) + x,允许梯度直接传播
  • 深度优势:可以训练更深的网络(18层、34层、50层等)
  • 性能提升:在 ImageNet 等数据集上取得了优异的分类效果

3. 迁移学习

迁移学习利用在大数据集(ImageNet)上预训练的模型,在小数据集上快速适应:

  • 预训练权重:模型已学习通用图像特征(边缘、纹理、形状等)
  • 微调策略
    • 冻结 backbone,只训练分类层(快速、适合小数据集)
    • 解冻全部层,端到端训练(更充分,需要更多数据)
  • 优势:减少训练时间,提高小数据集上的准确率

4. 数据增强

数据增强通过随机变换增加训练样本的多样性:

  • RandomHorizontalFlip:随机水平翻转
  • RandomRotation:随机旋转
  • ColorJitter:颜色抖动
  • 作用:提升模型泛化能力,减少过拟合

5. PyTorch 模型保存与加载

# 保存模型
torch.save({
    'model_state_dict': model.state_dict(),
    'optimizer_state_dict': optimizer.state_dict(),
    'val_acc': val_acc,
    'class_to_idx': class_to_idx
}, 'model.pth')

# 加载模型
checkpoint = torch.load('model.pth')
model.load_state_dict(checkpoint['model_state_dict'])

6. 前后端分离架构

  • 训练与推理分离:模型训练完成后,通过 API 提供服务
  • RESTful API:标准化的接口设计,便于扩展和维护
  • CORS 跨域:允许前端从不同域名访问后端服务
  • 工程化实践:模块化设计,职责清晰

7. Vue.js 3 响应式系统

Vue.js 3 实现了数据驱动视图的响应式系统:

  • createApp() API:Vue 3 新的应用创建方式,支持多个应用实例
  • Proxy 响应式:基于 ES6 Proxy 实现响应式系统,性能更优(相比 Vue 2 的 Object.defineProperty)
  • 双向数据绑定:数据变化自动更新视图
  • 组件化思想:将 UI 拆分为可复用的组件
  • MVVM 模式:Model-View-ViewModel 架构

常见问题

Q1: 训练时显存不足

解决方案

  • 减小 BATCH_SIZE(如改为 16 或 8)
  • 使用 CPU 训练(较慢但不需要 GPU)

Q2: 模型准确率较低

解决方案

  • 增加训练轮数 NUM_EPOCHS
  • 解冻 backbone 进行端到端训练(修改 train.py 中的 freeze_backbone=False
  • 增加数据增强的强度
  • 检查数据集质量和数量

Q3: 前端无法连接后端

解决方案

  • 确认后端服务已启动(访问 http://localhost:8000/ping 测试)
  • 检查前端代码中的 API 地址是否正确
  • 确认防火墙未阻止端口 8000

Q4: 模型文件找不到

解决方案

  • 确保已运行 train.py 完成训练
  • 检查 models/resnet18_cats_dogs.pth 文件是否存在
  • 确认后端代码中的模型路径正确

代码说明

训练脚本(train.py)

  • 使用 ImageFolder 自动加载数据集
  • 支持训练集/验证集自动划分
  • 实现完整的训练循环(前向传播、反向传播、模型保存)
  • 打印训练和验证的损失、准确率

后端服务(backend/)

  • main.py:FastAPI 应用入口,定义 API 路由
  • model_loader.py:模型加载和推理逻辑
  • utils.py:图像处理工具函数

前端页面(frontend/index.html)

  • 图片上传(点击或拖拽)
  • 图片预览
  • 调用后端 API 进行预测
  • 展示识别结果和置信度
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐