社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

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

java1234 • 6 天前 • 51 次点击  
大家好,我是锋哥。
就在刚刚,锋哥的基于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