PyTorch识别猫狗程序
本文最后更新于 143 天前,其中的信息可能已经有所发展或是发生改变。
摘要生成中
本项目演示了使用PyTorch实现猫狗图像分类的完整流程。核心技术采用迁移学习策略,以ResNet18作为骨干网络,冻结前半部分的预训练权重,仅训练最后的全连接层。这种方法充分利用大模型提取特征的能力,同时显著降低了对计算资源的需求。对于缺乏强大GPU的开发者而言,通过冻结特征提取器并微调分类器,是实现深度学习图像分类任务的可行路径。
— 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 模型训练

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

训练日志节选:

[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/
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇