Skip to content

Anweilong111/flower102-task1

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

HW2 任务 1:Flowers102 预训练 CNN 微调

本项目对应 HW2_深度学习与空间智能.pdf 中的任务 1。任务 2 和任务 3 不在本项目范围内。

目标是在 102 Category Flower Dataset 上完成:

  • ImageNet 预训练 ResNet-18/34 微调 baseline;
  • 不同学习率、epoch 的超参数对比;
  • ImageNet 预训练与随机初始化的消融实验;
  • 在 ResNet baseline 上加入 SE-block 注意力机制并对比 Accuracy;
  • 使用 TensorBoard 记录训练/验证 loss 与 Accuracy 曲线;
  • 生成可回传本地、用于最终 PDF 实验报告的结果文件。

本项目默认使用 TensorBoard 记录实验曲线,不依赖 SwanLab 登录。训练过程同时保存 metrics.csvcurves.png,便于报告整理与结果复核。

推荐服务器

推荐使用的 AutoDL 配置如下:

PyTorch 2.8.0
Python 3.12 / Ubuntu 22.04
CUDA 12.8
RTX 5090 32GB * 1
25 vCPU
90GB RAM
系统盘 30GB,数据盘 150GB

训练建议在 GPU 服务器上完成。本地环境主要用于上传项目、下载结果和撰写报告。AutoDL 的 base 环境已经包含 PyTorch,本项目不会创建新环境,也不会重装 torch/torchvision。

快速运行

在 AutoDL 服务器上:

cd /root/autodl-tmp/flower102_task1
bash scripts/autodl_setup.sh
bash scripts/server_preflight.sh
bash scripts/check_logger.sh
bash scripts/run_quick_debug.sh

server_preflight.sh 会检查 CUDA、Flowers102 数据、预训练权重、模型前向传播,以及数据/输出/torch cache 的磁盘余量;如果路径误放到系统盘导致可用空间过低,会提前停止。

也可以从本地 PowerShell 上传并启动服务器后台训练。默认 logger 为 TensorBoard,不需要 SwanLab 登录:

.\flower102_task1\scripts\start_autodl_background_run.ps1 `
  -Server root@SERVER_HOST `
  -Port SSH_PORT

上传脚本会自动执行 pre_upload_check.ps1,检查关键文件、Linux 脚本 LF 行尾,以及项目内是否误包含缓存、数据或输出目录。 如果服务器上已经有旧版项目,上传脚本会替换源码、脚本和文档,但保留远端 outputs/data/、日志和断点权重,方便继续训练。 如果通过 -RemoteDir 指定非默认远程目录,脚本会同步使用该目录下的 dataflower102_task1/outputs。 一键启动脚本默认会执行 TensorBoard 写入检查;如果首次写入失败,脚本会停止,避免正式训练跑完后缺少曲线记录。

确认 debug 正常后跑全量实验:

bash scripts/run_all_5090.sh
bash scripts/package_results.sh

长时间训练建议后台运行,避免 SSH 断开导致进程退出:

bash scripts/run_all_5090_background.sh
bash scripts/check_status.sh

如需在 tmux 或 AutoDL 稳定终端中前台一键运行完整流程:

bash scripts/run_full_pipeline_foreground.sh

更详细的上传、运行、回传步骤见:

实验矩阵

默认全量实验为:

实验 说明
baseline_resnet34_pt_lr3e-4_e30 ImageNet 预训练 ResNet-34 baseline
hparam_resnet34_pt_lr1e-3_e30 学习率更大
hparam_resnet34_pt_lr1e-4_e30 学习率更小
hparam_resnet34_pt_lr3e-4_e20 epoch 更少
ablation_resnet34_random_lr3e-4_e60 随机初始化消融
attention_se_resnet34_pt_lr3e-4_e30 SE-block 注意力模型

这些实验覆盖 PDF 中任务 1 的四项基本要求。

单独训练一个实验

python -m flower102_task1.train \
  --run-name baseline_resnet34_pt_lr3e-4_e30 \
  --model resnet34 \
  --pretrained \
  --data-dir /root/autodl-tmp/data \
  --output-dir /root/autodl-tmp/flower102_task1/outputs \
  --epochs 30 \
  --batch-size 128 \
  --lr 3e-4 \
  --backbone-lr 3e-5 \
  --optimizer adamw \
  --logger tensorboard

随机初始化消融:

python -m flower102_task1.train \
  --run-name ablation_resnet34_random_lr3e-4_e60 \
  --model resnet34 \
  --no-pretrained \
  --data-dir /root/autodl-tmp/data \
  --output-dir /root/autodl-tmp/flower102_task1/outputs \
  --epochs 60 \
  --batch-size 128 \
  --lr 3e-4 \
  --backbone-lr 3e-4 \
  --optimizer adamw \
  --logger tensorboard

SE 注意力模型:

python -m flower102_task1.train \
  --run-name attention_se_resnet34_pt_lr3e-4_e30 \
  --model se_resnet34 \
  --pretrained \
  --data-dir /root/autodl-tmp/data \
  --output-dir /root/autodl-tmp/flower102_task1/outputs \
  --epochs 30 \
  --batch-size 128 \
  --lr 3e-4 \
  --backbone-lr 3e-5 \
  --optimizer adamw \
  --logger tensorboard

输出说明

结果目录默认在:

/root/autodl-tmp/flower102_task1/outputs

每个实验目录会生成:

  • metrics.csv:每个 epoch 的 train loss、val loss、train acc、val acc;
  • tensorboard/events.out.tfevents.*:TensorBoard 曲线事件文件;
  • curves.png:loss 和 Accuracy 曲线;
  • best.pt:验证集 Accuracy 最优权重;
  • last.pt:最后一轮权重;
  • result.json:test split 上的最终结果;
  • config.json:实验超参数;
  • data_info.json:训练/验证/测试样本数、每轮 batch 数和总 iteration;
  • environment.json:服务器与 CUDA 环境。

汇总文件:

  • summary.csv
  • summary_accuracy.png
  • report_summary.md
  • report_table.md / report_table.csv:可直接放入报告的实验结果表;
  • final_submission_checklist.md:最终 PDF、Github、网盘提交核对清单;
  • report_assets_manifest.csv:报告素材文件清单;
  • upload_weights_manifest.txt:建议上传网盘的权重文件清单;
  • results_for_report.tar.gz
  • logs/run_all_5090.log:后台运行日志

回传本地

服务器上打包:

bash scripts/package_results.sh

打包前会自动验证 6 个正式实验是否完整。如果只是调试阶段想打包已有结果:

ALLOW_PARTIAL=1 bash scripts/package_results.sh

本地 PowerShell 下载:

.\flower102_task1\scripts\pull_results_from_autodl.ps1 `
  -Server root@SERVER_HOST `
  -Port SSH_PORT `
  -LocalDir .\server_results

也可以在本地一键让服务器验证、打包,再自动回传:

.\flower102_task1\scripts\complete_autodl_run_and_pull.ps1 `
  -Server root@SERVER_HOST `
  -Port SSH_PORT `
  -LocalDir .\server_results

下载后脚本会自动检查 server_results\outputs 是否包含 6 个正式实验的关键文件。也可以单独验收:

.\flower102_task1\scripts\verify_pulled_results.ps1 -LocalOutputs .\server_results\outputs

本地安装 TensorBoard 后,可以直接打开回传结果截图:

tensorboard --logdir .\server_results\outputs --port 6006

本地需要打包项目源码时:

.\flower102_task1\scripts\package_project_for_upload.ps1

它会生成 flower102_task1_project.zip,并排除训练输出、缓存和模型权重。

提交前检查

最终 PDF 报告中必须有:

  • 模型结构、数据集和实验结果介绍;
  • 训练/测试划分、网络结构、batch size、learning rate、optimizer、iteration/epoch、loss function、评价指标;
  • TensorBoard 的 loss 和 Accuracy 曲线截图;
  • Github public repo 链接;
  • 模型权重网盘下载地址。

代码提交到自己的 public Github repo 后,在报告里填写 repo 链接。训练完成后把 best.ptresults_for_report.tar.gz 上传到百度云/Google Drive,并在报告里填写下载地址。

中断恢复

全量实验脚本支持恢复:

  • 已经有 result.json 的实验会自动跳过;
  • 未完成但有 last.pt 的实验会从断点继续;
  • 需要强制重跑时可以执行:
python -m flower102_task1.run_experiments --preset full_5090 --rerun-existing

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors