Skip to content

NUIST-GenAI-Lab/gigagan-repro

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GigaGAN 复现

基于 lucidrains/gigagan-pytorch v0.3.0 的 GigaGAN 复现项目。

论文:Scaling up GANs for Text-to-Image Synthesis (Kang et al., 2023)


目录结构

gigagan-repro/
├── gigagan-pytorch/        # fork 的核心库(可编辑安装)
│   └── gigagan_pytorch/    # 模型定义 + 训练逻辑
├── scripts/                # 辅助脚本
│   └── download_dataset.py # 数据集下载/解压
├── data/                   # 数据目录(已 gitignore)
├── dox/                    # 文档
│   ├── architecture.md     # 架构深度分析
│   ├── codebase.md         # 代码结构与模块说明
│   └── modifications.md    # 相对上游的修改记录
├── requirements-lock.txt   # 依赖锁定
└── .gitignore

环境搭建

# Miniconda(若未安装)
# https://docs.conda.io/en/latest/miniconda.html

conda create -n gigagan python=3.10 -y
conda activate gigagan
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121
pip install -e ./gigagan-pytorch
pip install accelerate

已有环境直接激活:

source /home/cwh/miniconda3/etc/profile.d/conda.sh
conda activate gigagan

数据准备

ImageDataset 要求目录内 >100 张 图像(jpg/png)。

从本地 zip 解压(推荐)

python scripts/download_dataset.py \
  --from-zip /path/to/caltech-101.zip \
  --output data/caltech101_flat

在线下载

python scripts/download_dataset.py --dataset caltech101 --output data/caltech101_flat

训练

多卡训练(推荐)

tmux 跑训练,关终端也不会给进程发 SIGHUP(只要别关 tmux 会话本身)。

1. 新建会话并进去

tmux new -s gigagan

-s gigagan 是会话名,可以随便改。

2. 在 tmux 里照常启动环境 + 训练

cd /home/cwh/gigagan-repro
source /home/cwh/miniconda3/etc/profile.d/conda.sh
conda activate gigagan

accelerate launch \
  --multi_gpu --num_processes=8 --mixed_precision=no \
  -m gigagan_pytorch.train \
  --data_folder data/caltech101_flat \
  --batch_size 2 --steps 100000 --grad_accum_every 4 \
  --learning_rate 2e-4 --max_grad_norm 1.0 --no-amp \
  2>&1 | tee train.log

(在 tmux 里一般用 tee train.log 即可,不必再 nohup。)

3. 从 tmux「脱离」——关 SSH/关终端,训练继续

按键:**Ctrl+b**,松开后按 **d**(detach)。

4. 之后重新连上

tmux attach -t gigagan

若只有一个会话,也可以简写:

tmux a

5. 常用补充

目的 命令
列出会话 tmux ls
杀掉会话 tmux kill-session -t gigagan
在会话里开新窗口 Ctrl+b 再按 c
切换窗口 Ctrl+b 再按 09n/p

核心就三步:**tmux new -s 名字 → 跑命令 → Ctrl+b d 脱离**。

单卡训练

python -m gigagan_pytorch.train \
  --data_folder data/caltech101_flat \
  --steps 100 --grad_accum_every 4 --no-amp

关键参数

参数 默认值 说明
--data_folder 必填 图像目录
--image_size 256 生成图像分辨率
--batch_size 1 每 GPU batch size
--steps 100 训练步数
--grad_accum_every 8 梯度累积次数(等效 batch = batch_size × num_gpu × grad_accum)
--learning_rate 1e-4 G 与 D 学习率
--max_grad_norm 1.0 梯度裁剪范数(0 关闭)
--no-amp / --amp 默认开 建议 --no-amp,fp16 易 NaN
--no-ema / --ema 默认关 EMA 生成器

Loss 指标说明

标签 含义 健康范围
G Generator hinge loss 0~10
MSG 多尺度 Generator loss 0~10
D Discriminator hinge loss 0~10
MSD 多尺度 Discriminator loss 0~10
GP 梯度惩罚 趋向 0
SSL 辅助重建损失 趋向 0
VD / VG Vision-aided 判别/生成 无条件为 0
CL CLIP 对比损失 无条件为 0
MAL Matching Awareness 无条件为 0

已知问题与解决方案

fp16 梯度爆炸

GAN 在 fp16 混合精度下极易 NaN(本项目实测 step 20 即全 NaN),原因是 hinge loss + gradient penalty 的二阶梯度超出 fp16 动态范围。

解决:使用 fp32(--mixed_precision=no --no-amp)+ 梯度裁剪(--max_grad_norm 1.0)。

多卡死锁

上游 save_sample() 仅主进程执行,导致 DDP 步进不一致。本仓库已在 save_sample 后添加 wait_for_everyone() 同步。


文档

详细分析见 [dox/](dox/) 目录:


参考

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages