就在刚刚,锋哥的基于PyTorch的猫狗图像识别系统(深度学习+PyQt6+ResNet18+ImageNet+迁移学习)视频教程,发布了。质量杠杠的!https://www.bilibili.com/video/BV1iqgQ6NEVm/
本课程主要结合AI编程 Cursor 实现一个 基于PyTorch的猫狗识别 深度学习系统。讲解内容包括需求分析,新建后端Python项目,ImageNet介绍,ResNet18简介,利用Cursor AI编程实现Plan沟通项目方案,Agent生成项目,Agent修复bug和完善功能。利用AI编程开发项目的完整过程是免费的。一共是8讲,是免费的。
高清视频+源码+领取
扫描下方公众号【python222】回复
:888,
可获取下载链接
👇👇👇
项目效果预览
:
Cursor AI 生成的这个项目 架构和代码质量非常高。锋哥花了2天时间,录制了这个项目的架构以及所有功能模块的实现讲解。一共9讲。这个是属于VIP会员享受的。
欢迎加入锋哥的VIP,目前活动,购买Python+AI大模型 VIP,送Java+AI大模型+AI编程 VIP。
1. 项目概述
本项目是一个 猫狗图像二分类 的桌面应用。用户可在图形界面中完成模型训练、单张图片识别与数据集统计查看,无需编写命令行代码。
| 项目属性 | 说明 |
|---|
| 项目名称 | 基于 PyTorch 的猫狗识别系统 |
| 版本 | v1.0.0 |
| 运行形态 | 单机桌面应用(PyQt6) |
| 分类任务 | 猫(cat)/ 狗(dog)二分类 |
| 数据集规模 | 约 23,410 张图片(猫 11,741 / 狗 11,669) |
2. 业务逻辑
系统围绕 「数据 → 训练 → 推理 → 统计」 四条主线展开,对应四个功能页面。
2.1 功能模块
| 模块 | 页面 | 核心业务 |
|---|
| 首页 | HomePage | 展示系统介绍、功能概览与欢迎信息 |
| 模型训练 | TrainPage | 配置超参数,后台训练 ResNet18,实时展示 Loss/Accuracy 曲线 |
| 图像识别 | PredictPage | 选择本地图片,加载已训练模型,输出类别与置信度 |
| 数据统计 | StatsPage | 扫描数据集目录,展示数量卡片、柱状图与饼图 |
2.2 典型业务流程
首次使用(训练 + 识别)
日常使用(直接识别)
2.3 训练策略说明
迁移学习:使用 ImageNet 预训练的 ResNet18 作为骨干网络,替换最后的全连接层为 2 分类输出。
冻结骨干(默认开启):仅训练分类头(fc 层),加快 CPU 训练速度。
子集采样:默认每类取 2000 张,共 4000 张参与训练,可按需调整。
数据划分:按 8:2 划分训练集与验证集(随机种子固定为 42,保证可复现)。
模型保存:以验证集准确率(val_acc)为准,保存历史最优权重至 models/best_model.pth。
3. 技术栈
3.1 核心技术
| 层次 | 技术 | 用途 |
|---|
| 深度学习框架 | PyTorch 2.x | 模型构建、训练、推理 |
| 视觉库 | torchvision | ResNet18 预训练权重、图像变换 |
| 桌面 UI | PyQt6 | 主窗口、导航、表单、信号槽 |
| 图表 | matplotlib | 训练曲线、数据集统计图 |
| 图像处理 | Pillow | 图片读取、格式转换 |
| 数值计算 | NumPy | 底层数组运算支持 |
3.2 模型细节
ResNet18 (ImageNet 预训练)
├── 卷积骨干网络(可选冻结)
└── 全连接层 fc: 512 → 2(猫 / 狗)
输入尺寸:224 × 224 RGB
标准化:ImageNet 均值 [0.485, 0.456, 0.406],标准差 [0.229, 0.224, 0.225]
损失函数:CrossEntropyLoss
优化器:Adam(仅更新
requires_grad=True 的参数)
学习率调度:StepLR(每 3 轮衰减 0.5 倍)
推理设备:CPU(config.DEVICE = "cpu")
3.3 数据增强
训练集增强策略:
RandomResizedCrop (scale 0.8~1.0):核心作用是引入尺度不变性。0.8~1.0 意味着裁剪面积不会小于原图的 80%,这是一种保守的裁剪策略。相比更宽的 0.08~1.0(原版 ImageNet 设置),你的设置保留了更多的全局纹理信息,适合细粒度分类(如识别鸟类、车型)或目标占比较大的数据集。
RandomHorizontalFlip:核心作用是引入左右对称性。p=0.5 是标准配置。注意:如果你的数据具有方向性(如文字识别、手性分子、卫星图左行驶规则),请禁用此策略。
ColorJitter (brightness/contrast/saturation ±0.2):核心作用是应对光照和成像设备差异。0.2 属于温和值,能有效防止模型过拟合于特定色调,同时不会破坏语义信息(不会让“蓝天”变成“绿天”)。
验证集与推理集:
4. 系统架构
4.1 整体架构图
4.2 目录结构
CatDogRecognition/
├── main.py # 程序入口,初始化 QApplication
├── config.py # 全局配置(路径、超参数、类别映射)
├── requirements.txt # Python 依赖
├── assets/ # 应用图标与界面插图
├── models/ # 训练输出
│ ├── best_model.pth # 最优模型权重
│ └── train_history.json # 训练历史记录
├── data/cats_vs_dogs/ # 数据集
│ ├── cat/ # 猫图片
│ └── dog/ # 狗图片
└── src/
├── dataset.py # SafeImageFolder、DataLoader、数据增强
├── model.py # build_model / load_model / save_model
├── trainer.py # TrainThread 后台训练
├── predictor.py # Predictor 单图推理
├── utils.py # 日期时间格式化
└── ui/
├── main_window.py # 主窗口 + 侧边栏导航
├── home_page.py # 首页
├── train_page.py # 训练页(含 matplotlib 曲线)
├── predict_page.py # 识别页
├── stats_page.py # 统计页
└── styles.py # 全局 QSS 样式
4.3 UI 架构
主窗口采用 左侧导航栏 + 右侧 QStackedWidget 多页面 的经典布局:
页面切换时会触发懒刷新逻辑:
4.4 训练线程通信机制
训练在 QThread 子线程中执行,通过 PyQt 信号与 UI 主线程解耦,避免界面卡顿:
| 信号 | 方向 | 作用 |
|---|
log_signal | 线程 → UI | 带时间戳的训练日志 |
batch_progress_signal | 线程 → UI | 批次进度条更新 |
epoch_done_signal | 线程 → UI | 刷新 Loss/Accuracy 曲线 |
finished_signal | 线程 → UI | 训练结束通知 |
4.5 推理流程
5. 数据流设计
SafeImageFolder 是项目的数据安全设计:扫描时验证图片完整性,训练/推理时若遇到损坏文件则返回黑色占位图,避免整个流程中断。
6. 配置与默认值
关键配置集中在 config.py:
| 配置项 |
默认值 | 说明 |
|---|
DEFAULT_EPOCHS | 5 | 训练轮数 |
DEFAULT_BATCH_SIZE | 32 | 批次大小 |
DEFAULT_LR | 1e-3 | 学习率 |
DEFAULT_IMG_SIZE | 224 | 输入图像边长 |
DEFAULT_SUBSET_PER_CLASS | 2000 | 每类采样数量 |
DEFAULT_VAL_SPLIT | 0.2 | 验证集比例 |
DEFAULT_FREEZE_BACKBONE | True | 是否冻结骨干 |
DEVICE | cpu | 计算设备 |
7. 运行方式
cd CatDogRecognition
venv\Scripts\activate # Windows 激活虚拟环境
pip install -r requirements.txt
python main.py
注意事项:
-
首次训练需联网下载 ResNet18 预训练权重(约 45 MB)。
识别功能依赖 models/best_model.pth,需先完成至少一轮训练。
数据集需放置在 data/cats_vs_dogs/cat/ 与 data/cats_vs_dogs/dog/ 目录下。
8. 架构特点总结
| 特点 | 描述 |
|---|
| 分层清晰 | UI / 业务 / 数据三层解耦,模块职责单一 |
| 线程安全 | 训练走 QThread + 信号槽,UI 不阻塞 |
| 迁移学习 | 预训练 ResNet18 + 冻结骨干,CPU 也可快速训练 |
| 容错设计 |
SafeImageFolder 过滤损坏图片,训练可中断 |
| 可视化完善 | 训练曲线、数据集柱状图/饼图实时展示 |
| 开箱即用 | 单一桌面程序,无需 Web 服务或数据库 |