# 猫狗分类(简化版,模块化) 本仓库已在“最佳实践”的前提下大幅简化并保持模块化: - 仅保留核心模块与脚本:数据加载(自动识别布局与切分)、训练、评估、推理、中文日志。 - 默认使用预训练 EfficientNet-B0(纯 CNN,小巧但性能强)。 - 日志为中文且全面:包含环境信息、超参、数据统计、每轮指标、学习率、用时、检查点保存等,同时写入日志文件和控制台。 数据路径:`dataset`(固定为 Kaggle 扁平布局) - `dataset/train` 目录下包含形如 `cat.*.jpg` 与 `dog.*.jpg` 的标注图片 - 本代码会在线从 `train` 中按类别切分: - 训练:每类 1000 张 - 验证:每类 500 张 - 测试:每类 500 张(从 `train` 中划分,随机种子 42) ## 安装依赖 ```bash pip install -r requirements.txt ``` ## 训练 ```bash python train.py \ --data-dir dataset \ --epochs 15 \ --batch-size 32 \ --lr 0.001 \ --img-size 224 \ --workers 4 \ --output-dir runs/exp1 \ --log-file train.log ``` - 自动使用 GPU(如可用),默认开启混合精度(Amp)。 - 每轮都会在 `val` 上验证,保存 `best.pth`(按验证准确率最佳)与 `last.pth`。 - 若存在 `dataset/test` 或在线切分生成测试集,脚本最后会在测试集上进行一次评估并记录日志。 ## 评估(验证/测试) ```bash # 验证集 python evaluate.py --data-dir dataset --checkpoint runs/exp1/best.pth --split val --log-file runs/exp1/eval_val.log # 测试集 python evaluate.py --data-dir dataset --checkpoint runs/exp1/best.pth --split test --log-file runs/exp1/eval_test.log ``` ## 推理(单图/目录) ```bash # 单张图片 python predict.py --checkpoint runs/exp1/best.pth --image /path/to/image.jpg --log-file runs/exp1/predict.log # 目录批量推理 + 导出 CSV python predict.py --checkpoint runs/exp1/best.pth --image-dir /path/to/images --out runs/exp1/preds.csv --log-file runs/exp1/predict.log ``` ## 常用可选参数 - `--data-dir` 数据根目录,默认为 `dataset` - `--epochs`、`--batch-size`、`--lr`、`--weight-decay`、`--img-size`、`--workers` - `--output-dir` 输出目录,保存日志和权重 - `--log-file` 日志文件名(相对路径写到输出目录) - `--seed` 随机种子 - `--no-amp` 禁用混合精度 ## 目录结构(精简且模块化) ``` . ├── dataset/ ├── src/ │ ├── data.py # 数据加载与自动切分(1000/500/500) │ ├── engine.py # 训练与评估核心循环(tqdm 进度) │ ├── models.py # EfficientNet-B0 构建与替换分类头 │ └── utils.py # set_seed / ensure_dir / save_checkpoint ├── train.py ├── evaluate.py ├── predict.py └── requirements.txt ```