NanoTurtle
本站站長,作息及其不規律,主業製造Bug,副業Debug.
NanoTurtle的小窝

PyTorch识别猫狗程序

摘要生成中
AI生成,仅供参考

这个项目是拿AI跑的,仅供学习使用。

0x00 背景

图像分类是计算机视觉领域的“Hello World”。在这个项目中,我的目标是区分猫和狗的图片。

为什么不自己从零开始训练一个网络?因为卷积神经网络(CNN)通常需要海量的数据和强大的算力。作为替代方案,我们采用了迁移学习(Transfer Learning)

骨干网络:选用了 ResNet18。这是一个非常经典的轻量级深度残差网络,最初在 ImageNet 大赛中大放异彩。

策略:我们冻结了网络前半部分的预训练权重(Feature Extractor),只替换并训练最后的全连接层(Classifier)。这样既利用了大模型提取特征的能力,又大大缩短了训练时间(我的GPU并不强劲)。

0x01 环境配置

项目在 Arch Linux 环境下开发,但在环境配置阶段遇到了一个典型的兼容性问题:

Python 3.14 与 PyQt6 的冲突

由于 Arch 滚动更新机制,系统中的 Python 版本较新(3.14),而 PyQt6 官方尚未发布适配 Python 3.14 的预编译包,导致安装PyQt6时报了No matching distribution found。我果断放弃了3.14的venv,安装了3.12版本的Python成功解决问题。

0x02 模型训练

我使用 torchvisionImageFolder加载数据集,并应用了一系列数据增强和标准化变换。

训练日志节选:

[epoch 1] ★ New best val_acc=94.38% saved

[epoch 10] ★ New best val_acc=99.00% saved

最终,模型在验证集上达到了 99.00%​ 的最佳准确率,最终的测试集准确率为 98.12%。对于这样一个轻量级模型来说,这是一个相当不错的成绩。

0x03 预测程序图形化设计

为了让模型真正“可用”,我编写了基于 PyQt6 的图形界面。为了提升视觉体验,放弃了传统的原生控件风格,采用了深色主题 (Dark Mode)​ 设计。

界面核心组件:

  1. 左侧:图片预览区
    • 使用 QLabel动态显示用户选择的图片。
    • 添加了圆角和边框样式,提升质感。
  2. 右侧:控制与数据区
    • 模型加载:通过 QPushButton触发文件选择器,加载 best_catdog.pth
    • 自定义概率条 (PredictionBar):重写 QProgressBar样式,做出了类似游戏 UI 的动态渐变进度条。猫的概率显示为暖橙色 (#FF9800),狗的概率显示为科技蓝 (#2196F3)。
    • Matplotlib 数据可视化:将 Matplotlib 图表直接嵌入 PyQt6 窗口。每次预测后,柱状图会动态刷新,直观展示各类别的置信度。

0x04 文件分享

别检查我的网站了喵 本文采用 CC BY-NC-SA 4.0 国际许可协议进行许可。 转载请注明作者及原文链接,并遵循相同方式共享原则。 链接:https://blog.nanoturtle.cn/index.php/2026/05/26/pytorch-cat-dog-classification/
NanoTurtle的头像

NanoTurtle

文章作者

发表回复

textsms
account_circle
email

NanoTurtle的小窝

PyTorch识别猫狗程序
本项目演示了使用PyTorch实现猫狗图像分类的完整流程。核心技术采用迁移学习策略,以ResNet18作为骨干网络,冻结前半部分的预训练权重,仅训练最后的全连接层。这种方法充分利用大模型提取特征的能力,同时显著降低了对计算资源的需求。对于缺乏强大GPU的开发者而言,通过冻结特征提取器并微调分类器,是实现深度学习图像分类任务的可行路径。
扫描二维码继续阅读
2026-05-26
登录

ACGN Android Arch Linux C# C++ IT兴趣 Linux macOS Magisk模块 Python Python Root 权限 share Steam Ubuntu WinUI WinUI3 三星刷机 东方Project 个人博客 中文输入法 人工智能 同人游戏 图像分类 域名管理 学生生活 数码设备 新年快乐 新年祝福 机器学习 游戏 科技 空气质量 终端美化 网站迁移 节日问候 语言设置 迁移学习 音乐 黑苹果