基于 Oxford-IIIT Pet 数据集构建的多任务宠物视觉分析系统,覆盖 37 类宠物品种分类、宠物主体分割、Grad-CAM 可解释性分析和 Streamlit 交互展示。
这是一个完整的课程实践项目归档。仓库保留训练、评估和交互应用代码以及原始实验结果;数据集与模型权重因体积原因不直接纳入源码仓库。
- 使用迁移学习训练 ResNet50 与 MobileNetV3-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 分割结果 |
|---|---|
![]() |
![]() |
结果文件与更多案例位于 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/ # 仓库完整性检查
推荐使用 Python 3.10–3.12。
python -m venv .venvWindows:
.venv\Scripts\activate
pip install -r requirements.txtLinux / macOS:
source .venv/bin/activate
pip install -r requirements.txt下面的命令会下载 Oxford-IIIT Pet 数据集,并使用固定随机种子生成 70% / 15% / 15% 的训练、验证和测试划分:
python data/prepare_pet.py --download完整数据集不会提交到 Git;仓库只保留 37 个类别名称和准备脚本。
python src/train_classifier.py
python src/train_mobilenet.py
python src/train_unet.py训练完成后,权重将保存在 models/。
python src/evaluate_classifier.py
python src/evaluate_unet.py
python src/gradcam_vis.py
python src/save_cls_cases.py若不重新训练,请先从本项目的 Releases 下载 resnet50_best.pth 与 unet_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 应用面向单图演示,后续可增加批量推理和轻量化部署。

