Spaces:
Sleeping
A newer version of the Gradio SDK is available: 6.21.0
title: Pet Classifier
emoji: 🐾
colorFrom: purple
colorTo: blue
sdk: gradio
sdk_version: 4.31.0
python_version: '3.10'
app_file: app_hf.py
pinned: false
license: mit
🐾 Oxford-IIIT Pet 37类分类项目
基于 Vibe Coding 开发理念,使用预训练模型微调实现宠物图片分类任务。
在线演示
项目特性
- ✅ 使用 ResNet50 预训练模型,仅微调分类头
- ✅ 支持 Mac MPS / CUDA / CPU 训练
- ✅ 自动下载 Oxford-IIIT Pet 数据集
- ✅ 生成错误分析报告(最容易混淆的5对类别)
- ✅ 生成 HTML 格式测试准确率报告
- ✅ Web 应用支持图片上传分类
- ✅ SQLite 数据库存储预测历史
项目结构
exam_4/
├── config.py # 项目配置
├── download_dataset.py # 数据集下载脚本
├── dataset.py # 数据加载器
├── model.py # 模型定义
├── train.py # 训练脚本
├── error_analysis.py # 错误分析脚本
├── generate_report.py # 准确率报告生成
├── app.py # Flask Web 应用
├── database.py # 数据库模块
├── requirements.txt # 依赖包
├── templates/
│ └── index.html # Web 前端页面
├── data/ # 数据集目录
├── models/ # 模型保存目录
├── output/ # 输出目录
│ ├── reports/ # 准确率报告
│ └── error_analysis/ # 错误分析报告
├── uploads/ # 上传图片目录
└── database/ # 数据库目录
└── predictions.db # SQLite 预测历史数据库
快速开始
1. 安装依赖
pip install -r requirements.txt
2. 下载数据集
python download_dataset.py
3. 训练模型
python train.py
训练完成后,模型将保存在 models/best_model.pth。
4. 生成测试报告
# 生成测试准确率报告
python generate_report.py
# 生成错误分析报告
python error_analysis.py
报告将保存在 output/ 目录下。
5. 启动 Web 服务
python app.py
访问 http://localhost:5000 即可使用 Web 界面进行图片分类。
配置说明
在 config.py 中可以修改以下配置:
| 配置项 | 默认值 | 说明 |
|---|---|---|
MODEL_NAME |
resnet50 | 使用的预训练模型 |
NUM_CLASSES |
37 | 分类数量 |
BATCH_SIZE |
32 | 批次大小 |
NUM_EPOCHS |
10 | 训练轮数 |
LEARNING_RATE |
0.001 | 学习率 |
DEVICE |
mps | 运行设备 (mps/cuda/cpu) |
FREEZE_BACKBONE |
True | 是否冻结 backbone |
API 接口
POST /api/predict
上传图片并获取分类结果。
请求:
- Content-Type: multipart/form-data
- Body: file (图片文件)
响应:
{
"predicted_class": "Persian",
"confidence": 95.32,
"top5": [
{"class": "Persian", "probability": 95.32},
{"class": "Ragdoll", "probability": 2.15},
...
],
"filename": "xxx.jpg",
"original_filename": "pet.jpg",
"prediction_id": 1
}
GET /api/history
获取历史预测记录。
GET /api/statistics
获取分类统计信息。
GET /api/classes
获取所有类别列表。
37个宠物类别
猫类 (12种): Abyssinian, Bengal, Birman, Bombay, British_Shorthair, Egyptian_Mau, Maine_Coon, Persian, Ragdoll, Russian_Blue, Siamese, Sphynx
狗类 (25种): american_bulldog, american_pit_bull_terrier, basset_hound, beagle, boxer, chihuahua, english_cocker_spaniel, english_setter, german_shorthaired, great_pyrenees, havanese, japanese_chin, keeshond, leonberger, miniature_pinscher, newfoundland, pomeranian, pug, saint_bernard, samoyed, scottish_terrier, shiba_inu, staffordshire_bull_terrier, wheaten_terrier, yorkshire_terrier
输出文件
- 训练历史:
output/training_history.json - 测试报告:
output/reports/test_accuracy_report.html - 错误分析:
output/error_analysis/error_analysis_report.html - 混淆对数据:
output/error_analysis/confusion_pairs.json - 预测数据库:
database/predictions.db
技术栈
- 深度学习: PyTorch, timm
- 数据处理: NumPy, Pandas, Pillow
- Web 框架: Flask
- 数据库: SQLite, SQLAlchemy
- 可视化: Matplotlib, Seaborn
开发理念
本项目采用 Vibe Coding 开发理念:
- 快速迭代,持续改进
- AI 辅助开发,提高效率
- 关注核心功能,简化流程
- 现代化 UI/UX 设计
License
MIT License