Py学习  »  机器学习算法

锋哥的基于PyTorch的猫狗图像识别系统(深度学习+PyQt6+ResNet18+ImageNet+迁移学习)视频教程 项目实战课程 正式发布了。。。

java1234 • 1 周前 • 56 次点击  
大家好,我是锋哥。
就在刚刚,锋哥的基于PyTorch的猫狗图像识别系统(深度学习+PyQt6+ResNet18+ImageNet+迁移学习)视频教程发布了。质量杠杠的!
B站地址:

https://www.bilibili.com/video/BV1iqgQ6NEVm/

图片

本课程主要结合AI编程 Cursor 实现一个 基于PyTorch的猫狗识别  深度学习系统。讲解内容包括需求分析,新建后端Python项目,ImageNet介绍,ResNet18简介,利用Cursor AI编程实现Plan沟通项目方案,Agent生成项目,Agent修复bug和完善功能。利用AI编程开发项目的完整过程是免费的。一共是8讲,是免费的。

图片

高清视频+源码+领取

扫描下方公众号【python222】回复 888

可获取下载链接

👇👇👇

图片


👆长按上方二维码 2 秒
回复「888」即可获取


项目效果预览

图片
图片
图片
图片
图片

Cursor AI 生成的这个项目 架构和代码质量非常高。锋哥花了2天时间,录制了这个项目的架构以及所有功能模块的实现讲解。一共9讲。这个是属于VIP会员享受的。

图片

欢迎加入锋哥的VIP,目前活动,购买Python+AI大模型  VIP,送Java+AI大模型+AI编程 VIP。

2026年,锋哥又开始收Python+AI大模型学员了!目前活动,送AI编程+Java编程 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模型构建、训练、推理
视觉库torchvisionResNet18 预训练权重、图像变换
桌面 UIPyQt6主窗口、导航、表单、信号槽
图表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 属于温和值,能有效防止模型过拟合于特定色调,同时不会破坏语义信息(不会让“蓝天”变成“绿天”)。

验证集与推理集:

  • Resize (缩放)→ CenterCrop → ToTensor(转化成张量) → Normalize(规范化)

  • CenterCrop 是深度学习框架(如 PyTorch)中用于从图像中心裁剪出指定尺寸区域的图像预处理操作


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 多页面 的经典布局:

图片

页面切换时会触发懒刷新逻辑:

  • 进入 识别页:调用 predict_page.refresh_model_status() 检查模型是否可用

  • 进入 统计页:调用 stats_page.refresh_stats() 重新扫描数据集

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_EPOCHS5训练轮数
DEFAULT_BATCH_SIZE32批次大小
DEFAULT_LR1e-3学习率
DEFAULT_IMG_SIZE224输入图像边长
DEFAULT_SUBSET_PER_CLASS2000每类采样数量
DEFAULT_VAL_SPLIT0.2验证集比例
DEFAULT_FREEZE_BACKBONETrue是否冻结骨干
DEVICEcpu计算设备

7. 运行方式

cd CatDogRecognition
venv\Scripts\activate        # Windows 激活虚拟环境
pip install -r requirements.txt
python main.py

注意事项:

  1. 首次训练需联网下载 ResNet18 预训练权重(约 45 MB)。

  2. 识别功能依赖 models/best_model.pth,需先完成至少一轮训练。

  3. 数据集需放置在 data/cats_vs_dogs/cat/ 与 data/cats_vs_dogs/dog/ 目录下。


8. 架构特点总结

特点描述
分层清晰UI / 业务 / 数据三层解耦,模块职责单一
线程安全训练走 QThread + 信号槽,UI 不阻塞
迁移学习预训练 ResNet18 + 冻结骨干,CPU 也可快速训练
容错设计 SafeImageFolder 过滤损坏图片,训练可中断
可视化完善训练曲线、数据集柱状图/饼图实时展示
开箱即用单一桌面程序,无需 Web 服务或数据库

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/199719