# faiss_dog_cat_question_pro **Repository Path**: rainyf/faiss_dog_cat_question_pro ## Basic Information - **Project Name**: faiss_dog_cat_question_pro - **Description**: 本项目使用FAISS库实现了基于K近邻的图像分类器。该分类器可以使用CPU或GPU进行训练,并支持两种特征提取方法:flat和vgg。用户可以选择使用sklearn或faiss库实现K近邻算法。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 378 - **Created**: 2025-10-22 - **Last Updated**: 2025-11-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 🐱🐶 集成学习猫狗分类器 一个基于 scikit-learn + XGBoost 的集成学习猫狗分类项目,提供一键训练与 Gradio Web 推理界面,同时兼容原有 FAISS KNN 方案。默认使用 CPU 与 flat 特征,训练完成后自动保存最佳模型并输出所有模型对比结果。 --- ## 目录 - 快速开始(安装/训练/启动) - 数据准备(支持子目录与扁平文件名) - 训练产物与如何查看各模型准确率 - 已实现的集成学习算法 - 项目结构 --- ## 🚀 快速开始 建议使用 Python 3.8+。 ### 1) 安装依赖 优先使用依赖清单: ```powershell pip install -r requirements.txt ``` ### 2) 训练模型(20~60 分钟,视机器与数据量而定) ```powershell python train_ensemble.py ``` 训练脚本会: - 自动加载 data/train 下的数据并提取 flat 特征(32x32 灰度 + L2 归一化) - 训练 7 种集成学习方法与 3 个基础模型 - 输出每个模型的训练/预测时间与准确率 - 自动保存“最佳模型”及完整对比信息 ### 3) 启动 Web 应用 ```powershell python ensemble_webapp.py ``` 浏览器将打开 http://localhost:7860,上传图片即可得到预测结果与置信度。 --- ## 📦 数据准备 支持两种组织方式: 1) 传统子目录结构(推荐) ``` data/ train/ cats/ cat.0.jpg ... dogs/ dog.0.jpg ... ``` 2) 扁平目录(无需子文件夹),通过文件名判断类别: ``` data/ train/ cat_001.jpg dog-02.png ... ``` 规则:文件名中包含 “cat” 视为猫类(0),包含 “dog” 视为狗类(1)。 --- ## 🧾 训练产物与查看结果 训练完成后会在项目根目录生成: - `best_ensemble_model_[模型名].pkl`:准确率最高的模型 - `best_model_info.pkl`:包含所有模型的准确率、训练/预测时间等 快速查看本次各模型准确率(可直接在 Python 里运行): ```python import pickle with open('best_model_info.pkl','rb') as f: info = pickle.load(f) for k, v in info['all_results'].items(): print(k, v['accuracy']) print('BEST:', info['model_name'], info['accuracy']) ``` ## 🧠 已实现的模型(共 10 个) - 基础分类器: - 逻辑回归(LogisticRegression) - 随机森林(RandomForestClassifier, n_estimators=100, max_depth=10) - 支持向量机(SVC, RBF 核, probability=True) - 集成学习: - Voting 硬投票(hard) - Voting 软投票(soft,SVM 权重大) - Stacking(5 折,LR 作为元学习器) - Bagging(DecisionTree 基学习器,n_estimators=200, bootstrap=True) - Pasting(与 Bagging 配置一致,但 bootstrap=False) - AdaBoost(DecisionTree(max_depth=1),n_estimators=100, learning_rate=0.8) - XGBoost(n_estimators=150, learning_rate=0.1, max_depth=5, subsample=0.8, colsample_bytree=0.8) 提示:如果你需要 sklearn 的 GradientBoostingClassifier 版本,也可以在 `train_ensemble.py` 中按需新增;当前项目默认使用更强的 XGBoost。 --- ## 📁 项目结构 ``` faiss_dog_cat_question_pro/ ├─ train.py # 原 KNN 训练脚本 ├─ FaissKNeighbors.py # Faiss KNN 实现 ├─ util.py # 数据/特征工具(已支持扁平目录识别 cat/dog) ├─ train_ensemble.py # 集成学习训练脚本(本项目核心) ├─ ensemble_webapp.py # Gradio 推理应用 ├─ readme.md # 你正在看的唯一说明文档 └─ data/ ├─ train/ └─ test/ ``` --- ## 📝 个人信息 - 学号: 202352320128 - 年级:2023级 - 专业: 智能科学与技术 - 班级: 一班