Skip to content

Repository files navigation

PetVision AI

基于 Oxford-IIIT Pet 数据集构建的多任务宠物视觉分析系统,覆盖 37 类宠物品种分类、宠物主体分割、Grad-CAM 可解释性分析和 Streamlit 交互展示。

这是一个完整的课程实践项目归档。仓库保留训练、评估和交互应用代码以及原始实验结果;数据集与模型权重因体积原因不直接纳入源码仓库。

项目亮点

  • 使用迁移学习训练 ResNet50MobileNetV3-Large,比较精度与模型规模。
  • 从零实现轻量级 U-Net,完成宠物主体二分类分割。
  • 通过 Grad-CAM 展示分类模型关注区域,辅助解释模型判断。
  • 使用 Streamlit 集成 Top-5 分类、置信度、分割 mask 与结果可视化。
  • 提供可移植的数据准备、训练、评估和案例生成脚本。

实验结果

任务 / 模型 指标 结果
ResNet50 分类 Validation Accuracy 95.04%
ResNet50 分类 Test Accuracy 94.95%
ResNet50 分类 Macro Precision / Recall / F1 94.93% / 95.14% / 94.91%
MobileNetV3-Large 分类 Best Validation Accuracy 91.79%
U-Net 分割 Pixel Accuracy 83.92%
U-Net 分割 Mean IoU / Dice 47.49% / 60.89%
Grad-CAM 可解释性 U-Net 分割结果
Grad-CAM example Segmentation example

结果文件与更多案例位于 results/;重新训练的数值会因环境、随机种子和硬件差异产生小幅波动。

系统结构

PetVision-AI/
├── app.py                         # Streamlit 交互应用
├── data/prepare_pet.py            # 数据下载、划分与元数据生成
├── datasets/                      # 本地数据目录(Git 忽略)
├── models/                        # 模型权重说明与校验值
├── results/                       # 曲线、指标与可视化案例
├── src/
│   ├── dataset.py                 # 分类与成对分割数据增强
│   ├── train_classifier.py        # ResNet50 训练
│   ├── train_mobilenet.py         # MobileNetV3-Large 训练
│   ├── train_unet.py              # U-Net 训练
│   ├── evaluate_classifier.py     # 分类评估与混淆矩阵
│   ├── evaluate_unet.py           # 分割评估与案例生成
│   ├── gradcam_vis.py             # Grad-CAM 可视化
│   └── unet.py                    # U-Net 网络结构
└── tests/                         # 仓库完整性检查

快速开始

1. 创建环境

推荐使用 Python 3.10–3.12。

python -m venv .venv

Windows:

.venv\Scripts\activate
pip install -r requirements.txt

Linux / macOS:

source .venv/bin/activate
pip install -r requirements.txt

2. 准备数据集

下面的命令会下载 Oxford-IIIT Pet 数据集,并使用固定随机种子生成 70% / 15% / 15% 的训练、验证和测试划分:

python data/prepare_pet.py --download

完整数据集不会提交到 Git;仓库只保留 37 个类别名称和准备脚本。

3. 训练模型

python src/train_classifier.py
python src/train_mobilenet.py
python src/train_unet.py

训练完成后,权重将保存在 models/

4. 评估与解释

python src/evaluate_classifier.py
python src/evaluate_unet.py
python src/gradcam_vis.py
python src/save_cls_cases.py

5. 启动交互界面

若不重新训练,请先从本项目的 Releases 下载 resnet50_best.pthunet_best.pth 并放入 models/

streamlit run app.py

没有权重时,项目介绍与实验结果仍可查看;“智能预测”页面会提示补充所需文件。

模型与数据说明

  • 数据集:Oxford-IIIT Pet,共 37 个类别、7,390 张图像。
  • ResNet50 与 MobileNetV3 使用 ImageNet 预训练权重进行迁移学习。
  • U-Net 将官方 trimap 转换为宠物主体与背景的二分类 mask。
  • 数据准备脚本生成相对路径元数据,不依赖特定电脑或云服务器目录。
  • 模型文件的名称、大小和 SHA-256 位于 models/;大型权重建议通过 GitHub Releases 分发。

局限与改进方向

  • 外观相似的犬猫品种仍可能混淆,可进一步尝试细粒度注意力机制。
  • U-Net 在毛发边缘、复杂背景和遮挡场景下边界较粗,可尝试 DeepLabV3 或 SegFormer。
  • 当前 Streamlit 应用面向单图演示,后续可增加批量推理和轻量化部署。

Acknowledgements

About

Multi-task pet breed classification and segmentation with ResNet50, MobileNetV3, U-Net, Grad-CAM and Streamlit

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages