Spaces:
Sleeping
Sleeping
| 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 开发理念,使用预训练模型微调实现宠物图片分类任务。 | |
| ## 在线演示 | |
| [](https://huggingface.co/spaces/YOUR_USERNAME/pet-classifier) | |
| ## 项目特性 | |
| - ✅ 使用 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. 安装依赖 | |
| ```bash | |
| pip install -r requirements.txt | |
| ``` | |
| ### 2. 下载数据集 | |
| ```bash | |
| python download_dataset.py | |
| ``` | |
| ### 3. 训练模型 | |
| ```bash | |
| python train.py | |
| ``` | |
| 训练完成后,模型将保存在 `models/best_model.pth`。 | |
| ### 4. 生成测试报告 | |
| ```bash | |
| # 生成测试准确率报告 | |
| python generate_report.py | |
| # 生成错误分析报告 | |
| python error_analysis.py | |
| ``` | |
| 报告将保存在 `output/` 目录下。 | |
| ### 5. 启动 Web 服务 | |
| ```bash | |
| 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 (图片文件) | |
| **响应**: | |
| ```json | |
| { | |
| "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 | |
| ## 输出文件 | |
| 1. **训练历史**: `output/training_history.json` | |
| 2. **测试报告**: `output/reports/test_accuracy_report.html` | |
| 3. **错误分析**: `output/error_analysis/error_analysis_report.html` | |
| 4. **混淆对数据**: `output/error_analysis/confusion_pairs.json` | |
| 5. **预测数据库**: `database/predictions.db` | |
| ## 技术栈 | |
| - **深度学习**: PyTorch, timm | |
| - **数据处理**: NumPy, Pandas, Pillow | |
| - **Web 框架**: Flask | |
| - **数据库**: SQLite, SQLAlchemy | |
| - **可视化**: Matplotlib, Seaborn | |
| ## 开发理念 | |
| 本项目采用 **Vibe Coding** 开发理念: | |
| - 快速迭代,持续改进 | |
| - AI 辅助开发,提高效率 | |
| - 关注核心功能,简化流程 | |
| - 现代化 UI/UX 设计 | |
| ## License | |
| MIT License | |