来源:research/learned-image-compression-study/README.md · 原始 Markdown
Learned Image Compression Study
面向本科科研入门的学习式图像压缩项目,运行于 Windows 原生 PyTorch CUDA,不使用 Docker。
第一阶段先建立一个轻量、可训练、能解释的实验闭环:
- 下载固定图片;
- 训练一个带因子化高斯先验的卷积编码器;
- 使用量化近似和率失真损失;
- 记录 estimated bpp、PSNR、MS-SSIM、耗时和参数量;
- 保存 checkpoint、重建图和 JSON 结果。
重要边界
当前模型是教学用的轻量基线,不是 CompressAI 官方模型:
- 训练时用均匀噪声近似量化,评测时使用 rounding;
- 使用每通道独立高斯分布估计 latent 概率;
- 报告的是由 likelihood 估计的 bpp,尚未接入算术编码,因此不是实际码流大小;
- 用 Kodak 图片训练仅用于验证代码链路,不能作为正式科研结果。
等本地流程稳定后,再使用 DIV2K 训练、Kodak 测试,并把官方 CompressAI 真码流评测放到学校 Linux 服务器完成。
当前机器
- GPU:NVIDIA GeForce RTX 3060 Laptop,6GB;
- Python:3.12;
- PyTorch:2.11.0 + CUDA 12.8;
- 默认训练:128×128 patch、batch size 4、轻量通道数。
项目结构
learned-image-compression-study/
├── data/kodak/ # 下载的数据,不提交 Git
├── outputs/ # 重建图、指标与训练历史
├── checkpoints/ # 模型 checkpoint
├── src/lic_study/
│ ├── model.py # 因子化高斯先验编码模型
│ ├── train_toy.py # 训练入口
│ ├── evaluate_toy.py # 单图评测入口
│ └── metrics.py # PSNR 与 estimated bpp
├── tests/
├── install_windows.ps1
└── pyproject.toml
安装
在 PowerShell 中进入项目目录,运行:
.\install_windows.ps1
脚本会创建项目内的 .venv,从 PyTorch 官方 CUDA 12.8 源安装 GPU 版本,并安装项目依赖。不会修改系统 Python 中已有的 PyTorch。
验证:
.\.venv\Scripts\lic-check.exe
CUDA available 应为 True。
首次烟雾实验
下载一张 Kodak 图片:
.\.venv\Scripts\lic-download-kodak.exe --count 1
只训练 20 步,验证端到端流程:
.\.venv\Scripts\lic-train-toy.exe `
--data-dir data/kodak `
--epochs 1 `
--steps-per-epoch 20
评测并保存重建图:
.\.venv\Scripts\lic-eval-toy.exe data/kodak/kodim01.png
预期生成:
checkpoints/toy_factorized_smoke.ptoutputs/toy_factorized_smoke_history.jsonoutputs/kodim01_toy_factorized_reconstruction.pngoutputs/kodim01_toy_factorized_metrics.json
20 步只用于检查程序能否运行;量化后的 latent 很可能尚未学出有效结构。若要检查模型是否具备基本学习能力,可运行单图过拟合实验:
.\.venv\Scripts\lic-train-toy.exe `
--data-dir data/kodak `
--epochs 1 `
--steps-per-epoch 200 `
--device cuda `
--rd-lambda 0.05 `
--checkpoint checkpoints/toy_factorized_lambda005_200steps.pt `
--history outputs/toy_factorized_lambda005_200steps_history.json
.\.venv\Scripts\lic-eval-toy.exe data/kodak/kodim01.png `
--checkpoint checkpoints/toy_factorized_lambda005_200steps.pt `
--device cuda `
--rd-lambda 0.05 `
--output-dir outputs/lambda005_200steps
这项实验的训练图和评测图相同,只验证模型与训练代码能否学习,不能用于论文或简历中的泛化性能结论。当前实测结果见 docs/experiment_log.md。
测试
.\.venv\Scripts\python.exe -m pytest
第一阶段验收
- [x] 原生 CUDA 环境检查通过;
- [x] Kodak 01 下载成功;
- [x] 20 步训练完成并保存 checkpoint;
- [x] 评测生成 estimated bpp、PSNR 与 MS-SSIM;
- [x] 重建图与 JSON 指标落盘;
- [x] 相同命令可以再次复现。
科研记录原则
- 不手工改实验结果;
- 始终标明训练集、测试集是否重叠;
- 严格区分“估计码率”和“实际码流码率”;
- 每次实验记录模型、lambda、随机种子、设备和版本;
- 失败实验也记录原因;
- 形成真实结果后,再更新科研申请简历。