目录
run_train_anydoor.py
anydoor.yaml
run_train_anydoor.py
batch_size = 2
- 每次训练迭代(一个
forward
和backward
过程)中处理的样本数量。 - 小批量(
batch_size=2
)适合显存有限的 GPU,但可能导致训练不稳定。 - 建议根据显存大小和模型复杂度调整此参数。
- 每次训练迭代(一个
logger_freq = 1000
- 控制日志记录的频率。
- 每 1000 次训练步记录一次日志信息(例如损失值、性能指标等)。
- 作用:便于监控模型训练进度。
learning_rate = 1e-6
- 学习率,控制每次梯度更新时模型参数的步长。
1e-6
是较低的学习率,适合微调模型或训练复杂网络。- 如果训练过程收敛慢,可以尝试稍微调高此值(如
1e-5
),或者使用动态学习率调整策略。
sd_locked = False
- 表示是否锁定(冻结)扩散模型的权重。
False
表示允许更新扩散模型的权重。- 如果预训练模型权重较好且不需要大幅度调整,可设置为
True
,以减少训练时间和显存需求。
only_mid_control = False
- 是否只对中间层使用控制信号。
False
表示在网络的所有阶段(不仅仅是中间层)都应用ControlNet
的控制信号。- 适用于需要较精细控制的任务。
n_gpus = 1
- 使用的 GPU 数量。
1
表示单卡训练。- 如果有多张 GPU,可以设置为相应的数量,并确保分布式训练(如 DDP)配置正确。
accumulate_grad_batches = 1
- 梯度累积的批次数量。
1
表示不累积梯度,每次计算后立即进行参数更新。- 如果显存不足,可以通过设置
accumulate_grad_batches > 1
累积多次梯度计算,模拟更大的batch_size
,例如:- 例子: 如果显存不足以支持
batch_size=8
,可以设置batch_size=2
和accumulate_grad_batches=4
,相当于每 4 次迭代后进行一次参数更新。
- 例子: 如果显存不足以支持
anydoor.yaml
- model 顶层配置,用于定义模型结构和训练方式
target
: 指向实际使用的模型类(cldm.cldm.ControlLDM
)。该类可能是对扩散模型的控制(Control)实现,通常用于条件生成任务params
: 包含模型的所有超参数配置:linear_start
和 **linear_end
:**定义扩散过程中的噪声线性调度范围,调整扩散过程中的噪声注入强度范围,影响生成图像的质量和稳定性- **
num_timesteps_cond
:**条件生成扩散过程中的时间步数,默认值1
: 表示只在一个时间步中添加条件 - **
log_every_t:
**控制日志打印频率(每隔多少个时间步打印一次),用于监控训练过程中的状态。 - **
timesteps:
**扩散过程的总时间步数,通常扩散模型在训练时采用较大的时间步数(如 1000),用于逐步去噪。 - **
first_stage_key
,cond_stage_key
,control_key
**定义模型的不同数据输入键名:first_stage_key
: 输入的主要图像数据(jpg
)。cond_stage_key
: 条件数据(ref
,如参考图像)。control_key
: 控制信号(hint
,如边缘检测图像或引导特征)。
- **
image_size:
**指定模型生成图像的分辨率(64x64 像素)。 - **
channels:
**输入图像的通道数(4
),例如 RGBA。 - **
cond_stage_trainable:
**是否训练条件网络(False
表示冻结条件网络,通常预训练过的网络不需要更新)。 - **
conditioning_key:
**指定条件生成的方式,crossattn
表示使用交叉注意力机制来处理条件。 - **
scale_factor:
**图像缩放因子,用于特定模型的特征对齐或匹配。 - **
use_ema:
**是否使用指数移动平均(EMA)方法,EMA 通常用于提高模型生成的稳定性(此处为False
,未启用)。 - **
only_mid_control:
**是否只对中间层使用控制网络(False
表示全层控制)
control_stage_config
:这些参数用于控制模型的ControlNet
部分。ControlNet
是扩散模型的一个附加模块,用于增加生成控制能力use_checkpoint
: 是否使用检查点(分段反向传播以节省显存,True
表示启用)。image_size
: 控制网络输入图像尺寸(标注为 32,但可能未实际使用)。in_channels
: 输入通道数(4
),对应主图像。hint_channels
: 条件提示图的通道数(4
,如 RGBA 或其他)。model_channels
: 模型的特征通道数(320
)。attention_resolutions
: 使用注意力机制的分辨率尺度列表:[4, 2, 1]
表示分辨率从高到低逐步缩小,用于多尺度特征提取。
num_res_blocks
: 每个分辨率的残差块数量(2
)。channel_mult
: 通道倍率,定义不同尺度下的通道数:[1, 2, 4, 4]
:表示通道数分别为320
,640
,1280
,1280
。
num_head_channels
: 注意力头的通道数(64
)。use_spatial_transformer
: 是否使用空间变换器模块(True
,启用)。use_linear_in_transformer
: 是否在变换器中使用线性层(True
)。transformer_depth
: 变换器的深度(1
层)。context_dim
: 条件输入的上下文维度(1024
)。legacy
: 是否启用旧版功能(False
,使用新实现)。
unet_config
定义了 UNet 模块,这是扩散模型的核心结构,基本参数与control_stage_config
类似,主要用于控制生成过程:in_channels
和out_channels
: 输入/输出通道数(4
)。model_channels
: 核心特征通道数(320
)。attention_resolutions
,num_res_blocks
,channel_mult
: 同 ControlNet,定义多尺度特征提取和残差结构。use_spatial_transformer
,use_linear_in_transformer
: 同上,启用空间变换器。transformer_depth
: 变换器的深度(1
层)。context_dim
: 条件上下文维度(1024
)。
first_stage_config
:该部分定义了第一个阶段的自动编码器(Autoencoder)target
: 模型指向ldm.models.autoencoder.AutoencoderKL
,这是一个带 KL 散度的自动编码器,用于图像的潜空间编码和解码。embed_dim
: 潜空间嵌入维度(4
)。monitor
: 用于监控的指标(如重构损失val/rec_loss
)。ddconfig
: 自动编码器的核心配置:double_z
: 使用双潜空间分布(True
)。z_channels
: 潜空间的通道数(4
)。resolution
: 输入图像的分辨率(256x256
)。in_channels
和out_ch
: 输入/输出通道数(3
)。ch
: 起始特征通道数(128
)。ch_mult
: 通道倍率([1, 2, 4, 4]
)。num_res_blocks
: 每层的残差块数量(2
)。attn_resolutions
: 使用注意力机制的分辨率(空列表表示未使用)。dropout
: Dropout 比例(0.0
)。
lossconfig
: 损失函数配置,使用torch.nn.Identity
(直接传递,未额外定义损失)
cond_stage_config
定义了条件编码器(Encoder)的结构target
: 指向条件网络类ldm.modules.encoders.modules.FrozenDinoV2Encoder
。weight
: 使用预训练的 DINO 模型权重pretrain_model/dinov2_vitg14_pretrain.pth
。