# faiss_dog_cat_question_2 **Repository Path**: YXY0216/faiss_dog_cat_question_1 ## Basic Information - **Project Name**: faiss_dog_cat_question_2 - **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-02 - **Last Updated**: 2025-11-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 项目简介 本项目提供“猫狗识别(终极版)”两套思路: - LazyPredict 自动对多种传统机器学习分类器进行基准评测,自动选择并保存准确率最高的模型; - 补充保留了早期的 FAISS KNN 示例与集成学习脚本,便于对比学习。 训练采用 flat 特征(将图片转为灰度 32×32 并展平为 1024 维),首次构建会将特征缓存到磁盘以加速后续运行。 已在 Windows + Python 3.12(PowerShell)验证运行。 ## 目录结构 ``` faiss_dog_cat_question_1/ train.py # 使用 LazyPredict 训练与排行榜、保存最佳模型 webapp.py # 用 Gradio 加载最佳模型进行猫狗推理 util.py # 数据读取、特征提取(flat/vgg)与缓存 train_ensemble.py # 备选:集成/投票学习基线(可忽略) FaissKNeighbors.py # 备选:FAISS KNN 示例(可忽略) models/ # 训练产物目录(CSV/PNG/最佳模型) data/ train/ # 训练图片:cat.* 与 dog.* readme.md ``` ## 数据集组织(约定) - 文件命名遵循 Kaggle Dogs vs Cats:`cat.N.jpg` / `dog.N.jpg`; - 默认从 `data/train/` 读取; - 标签约定:dog → 1,cat → 0。 ## 环境依赖 必要依赖(LazyPredict + 推理界面): - numpy、pandas、scikit-learn、joblib、matplotlib - lazypredict - pillow、opencv-python - gradio 安装示例(PowerShell): ```powershell # 可选:创建虚拟环境 python -m venv .venv; .\.venv\Scripts\Activate.ps1 # 训练与可视化依赖 py -3 -m pip install -U lazypredict scikit-learn pandas numpy joblib matplotlib # Web 推理依赖 py -3 -m pip install -U gradio pillow opencv-python # 若使用 VGG 特征再需要(体积较大,非必需): py -3 -m pip install -U tensorflow ``` ## 训练(LazyPredict) ```powershell Set-Location "C:\Users\21372\Desktop\图像模式识别\实验四\faiss_dog_cat_question_1" py -3 .\train.py ``` 训练过程: - 控制台将打印类似“模型排行榜”的表格(Accuracy、Balanced Accuracy、ROC AUC、F1、Time taken); - 导出文件: - `models\lazypredict_results.csv`:完整排行榜; - `models\lazypredict_results.png`:排行榜截图(可直接提交); - `models\best_lazypredict.pkl`:准确率最高的已训练模型。 性能提示: - 如果数据集很大(例如 25k 张),LazyPredict 会逐个模型训练,耗时较长; - 想加速可临时减少数据量(抽样)或在 `train.py` 中将 `LazyClassifier` 的 `classifiers` 参数改为少量备选模型(如 `['LogisticRegression','RandomForestClassifier','SVC']`)。 ## Web 推理(Gradio) ```powershell py -3 .\webapp.py ``` 浏览器访问 `http://127.0.0.1:7860`,上传一张图片即可得到“猫/狗”预测与置信度。 推理预处理与训练一致:灰度 → 32×32 → 展平(float32)。 ## 备选脚本(可选) - `train_ensemble.py`:使用投票/Stacking 等集成方法训练并保存最佳模型,结果保存到 `models/best_ensemble.pkl`; - `FaissKNeighbors.py`:展示如何用 FAISS 实现简化版 KNN 检索与分类。 ## 个人信息 - 姓名:尹星宇 - 学号:202352320208 - 班级:智能科学与技术 二班