# faiss_dog_cat_question_final **Repository Path**: rainyf/faiss_dog_cat_question_final ## Basic Information - **Project Name**: faiss_dog_cat_question_final - **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-11-05 - **Last Updated**: 2025-11-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 🐱🐶 猫狗分类终极版(LazyPredict + Gradio) 本项目基于 LazyPredict 一次性对多种分类器进行基准评测,自动选择“准确率最高”的模型进行保存,并通过 Gradio 提供可交互的 Web 推理界面。支持两种特征方式: - `flat`:32×32 灰度展开 + L2 归一化(轻量、速度快) - `vgg`:VGG16 预训练网络特征(语义更强、通常更准,需 TensorFlow) 同时保留原先的集成学习脚本与 FAISS KNN 方案作为参考。 --- ## 目录 - 快速开始(安装/训练/启动) - 数据准备(支持子目录与扁平文件名) - 训练产物与如何查看各模型准确率 - 已实现的集成学习算法 - 项目结构 --- ## 🚀 快速开始(Windows PowerShell) 建议 Python 3.10/3.11。 ### 1) 创建与激活虚拟环境(可选) ```powershell python -m venv .venv .\.venv\Scripts\Activate.ps1 ``` ### 2) 安装依赖 ```powershell pip install -r requirements.txt ``` ### 3) 用 LazyPredict 训练并自动选最佳模型 - 快速版本(flat 特征,推荐): ```powershell python train.py -f flat -t 0.25 -r 2025 ``` - 更高精度(vgg 特征,较慢,需要 TensorFlow): ```powershell python train.py -f vgg -t 0.25 -r 2025 ``` 训练时控制台会打印 LazyPredict 的排行表(Accuracy、F1、耗时等),可直接截图用于作业提交;完整表也会保存为 CSV 便于查阅。 ### 4) 启动 Gradio Web 应用 ```powershell python webapp.py ``` 默认监听 `http://localhost:7861`,上传猫/狗图片即可得到预测结果与置信度。页面顶部会显示“模型名称、准确率、特征方式”,并与训练保持一致。 --- ## 📦 数据准备 支持两种组织方式: 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_lazypredict_model.pkl`:LazyPredict 选出的最佳模型 - `best_lazypredict_info.pkl`:包含模型名、准确率、特征方式、特征维度、完整排行等 - `lazypredict_results.csv`:完整排行榜(可用作截图) 为避免 flat 与 vgg 混用导致维度冲突,特征缓存采用分文件策略: - `X_flat.pkl / y_flat.pkl` - `X_vgg.pkl / y_vgg.pkl` 快速查看本次各模型准确率(可直接在 Python 里运行): ```python import pickle with open('best_lazypredict_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']) ``` ## 🧠 LazyPredict 会尝试的常见分类器(节选) - KNN 系列:`KNeighborsClassifier`、`NearestCentroid` - SVM 系列:`SVC`、`NuSVC` - 树与集成:`DecisionTree`、`RandomForest`、`ExtraTrees`、`AdaBoost`、`Bagging`、`XGBClassifier`、`LGBMClassifier` 等 - 朴素贝叶斯:`GaussianNB`、`BernoulliNB` - 线性模型:`LogisticRegression`、`LinearSVC`、`SGDClassifier`、`RidgeClassifier`、`RidgeClassifierCV`、`LDA` - 判别分析:`QDA` - 其它:`CalibratedClassifierCV`、`PassiveAggressiveClassifier`、`DummyClassifier` 等 注意:LazyPredict 使用默认超参数做“粗筛选”,你可以对前几名再做网格/贝叶斯调参,或在本项目的 `train_ensemble.py` 中构建 Voting/Stacking 进一步提升。 --- ## 📁 项目结构 ``` faiss_dog_cat_question_final/ ├─ train.py # 原 KNN 训练脚本 ├─ FaissKNeighbors.py # Faiss KNN 实现 ├─ util.py # 数据/特征工具(已支持扁平目录识别 cat/dog) ├─ train_ensemble.py # 集成学习训练脚本(可选参考) ├─ ensemble_webapp.py # 旧版 Web(集成学习) ├─ webapp.py # 新版 Web(LazyPredict 最佳模型) ├─ readme.md # 你正在看的唯一说明文档 └─ data/ ├─ train/ └─ test/ ``` --- ## 📝 个人信息 - 学号: 202352320128 - 年级:2023级 - 专业: 智能科学与技术 - 班级: 一班