ECCV 2024 · Real Image Editing · Paper Deep Dive

Guide-and-Rescale

用冻结的 Stable Diffusion v1.4 在每个 DDIM 去噪步计算内部表征能量梯度,同时动态缩放它相对 CFG 的强度,从而兼顾文本编辑和源图保存。

Vadim Titov · Madina Khalmatova · Alexandra Ivanova · Dmitry Vetrov · Aibek Alanov共同第一:前三位作者通讯作者:Aibek AlanovDOI 10.1007/978-3-031-73209-6_14
Identity & evidence boundary

论文身份与证据层级

Paper verified

正式发表

ECCV 2024,LNCS 15129,正式章节页码 235–251。Springer 页面记录 First Online 为 2024-11-01,引用年份显示 2025 属于卷册出版信息。

Paper verified

作者标记

正式论文脚注与 Springer 明确确认 Vadim Titov、Madina Khalmatova、Alexandra Ivanova 共同第一。Springer 另明确列出 Aibek Alanov 为通讯作者。

Reading scope

版本边界

正文与附录依据 arXiv v3 合订本,共 38 页:正文 17 页,附录 21 页。方法实现核查锁定官方仓库提交 4a79013c641d20f57b206ad7f0bf2e9d01cd412c。

官方 teaser,展示动物替换、服装编辑、表情改变与风格化
原论文 Figure 1 / 官方 teaser。 四组示例覆盖动物替换、服装属性修改、面部表情编辑和全局风格化。它展示任务覆盖面,没有提供随机样本分布或失败率。
Research motivation

把“保存源图”写成可微约束

现有路线的代价

逐图微调能够保存身份和细节,却增加优化时间;表征替换速度较快,但直接注入缓存特征会产生轨迹与表征错配;精确 inversion 提升重建,也增加反演计算。

核心假设

时间对齐的 inversion latent \(z_t^{\ast}\) 是源图的参考轨迹。当前编辑 latent \(z_t\) 经过同一 source prompt 后,其 self-attention 与 feature 应当接近参考轨迹中对应表征。

研究缺口

作者希望用一个无需训练模型权重、无需精确反演的统一机制,覆盖局部属性、对象替换、表情编辑与全局风格化,并让编辑强度和保存强度在去噪过程中保持可控。

关键边界:“tuning-free”表示不更新扩散模型参数。采样仍需对当前 latent 反向传播内部表征能量,因此会产生梯度计算和额外显存开销。
Problem formulation & pipeline

一条参考轨迹,四次 UNet forward

输入与输出

输入为真实图像 \(x_{\mathrm{init}}\)、源描述 \(y_{\mathrm{src}}\) 与目标描述 \(y_{\mathrm{trg}}\)。输出 \(x_{\mathrm{edit}}\) 应满足目标文本,同时保存目标编辑之外的源图结构和外观。

VAE encoder 将图像映射为 \(z_0^{\ast}\),DDIM inversion 产生完整参考轨迹 \(\{z_t^{\ast}\}_{t=0}^{T}\),其中 \(T=50\)。

DDIM 记号

\[ z_{t-1}=a_tz_t+b_t\epsilon_{\theta}(z_t,t,y) \]
\[ z_{t+1}^{\ast}=a_t^{\ast}z_t^{\ast}+b_t^{\ast}\epsilon_{\theta}(z_t^{\ast},t,y_{\mathrm{src}}) \]

\(a_t,b_t,a_t^{\ast},b_t^{\ast}\) 由累计噪声系数 \(\bar\alpha_t\) 决定。论文 Appendix A 的 \(\alpha_t\) 实际承担 cumulative alpha 的角色。

Guide-and-Rescale 官方方法流程图
原论文 Figure 2 / 官方方法图。 参考 latent 与当前 latent 分别进入冻结 UNet,取出 self-attention maps 和 features;能量梯度经过 rescale 后加入 CFG noise prediction,再执行 DDIM step。

DDIM inversion

以 source prompt、CFG scale 1 反演真实图像并保存 51 个 latent。这里使用普通 conditional prediction。

每步构造四次 forward

unconditional:当前 latent + 空文本;inv_inv:参考 latent + source prompt;cur_inv:当前 latent + source prompt;cur_trg:当前 latent + target prompt。

能量与梯度

参考 forward 在 no_grad 下运行;当前 latent 设置 requires_grad,内部表征差异求和后执行 backward,得到对 \(z_t\) 的梯度 \(G_t\)。UNet 参数保持冻结。

合成 noise prediction

\[ \epsilon_t^{\mathrm{final}}=\epsilon_{\theta}(z_t,t,\varnothing)+\Delta_{\mathrm{CFG},t}+\gamma_tG_t \]

目标 prompt 负责编辑方向,source prompt 下的内部表征负责源图保存。

停止 guider

论文在最后若干步关闭 guiders,使末端采样回到 CFG。非风格任务论文写前 35 步启用;固定提交配置使用前 30 步。风格化均为前 25 步。

CFG 与 naive editing

\[ \mathrm{CFG}(z_t,t,y,w)=\epsilon_{\theta}(z_t,t,\varnothing)+w\left(\epsilon_{\theta}(z_t,t,y)-\epsilon_{\theta}(z_t,t,\varnothing)\right) \]

inversion 使用 \(w=1\),目标采样使用 \(w=7.5\)。直接从 \(z_T^{\ast}\) 按目标 prompt 去噪会让当前轨迹远离参考轨迹,Figure 3 中表现为源图背景、身份和未编辑属性一起漂移。

Self-guidance energy

布局与外观由两类能量约束

Self-attention Guider

\[ g_{\mathrm{self},t}=\sum_{i=1}^{L}\operatorname{mean}\left(\left(A_{i,t}^{\ast}-\bar A_{i,t}\right)^2\right) \]

\(A_{i,t}^{\ast}\) 来自 inv_inv,\(\bar A_{i,t}\) 来自 cur_inv。每层先对逐元素平方差取 mean,再跨层求和。它主要约束对象的相对位置与全局布局。

非风格 Feature Guider

\[ g_{\mathrm{feat},t}^{\mathrm{local}}=\operatorname{mean}\left(\left|\Phi_t^{\ast}-\bar\Phi_t^{\mathrm{src}}\right|\right) \]

取最后一个 UNet up-block 的输出,参考与当前都用 source prompt。公开配置:\(v_{\mathrm{self}}=300000\),\(v_{\mathrm{feat}}=500\)。

风格 Feature Guider

\[ g_{\mathrm{feat},t}^{\mathrm{style}}=\operatorname{mean}\left(\left(\Phi_t^{\ast,\mathrm{src}}-\bar\Phi_t^{\mathrm{trg}}\right)^2\right) \]

取第二个 up-block 的第二个 ResNet 输出。当前 feature 来自 cur_trg,参考 feature 来自 inv_inv。公开配置:\(v_{\mathrm{self}}=100000\),\(v_{\mathrm{feat}}=2.5\)。

张量、内存与计算

实现把各 attention head 折入 batch 维,单层 self-attention map 可记为 \(A_i\in\mathbb R^{(B H_i)\times N_i\times N_i}\)。feature map 为 \(\Phi\in\mathbb R^{B\times C\times H\times W}\)。高分辨率层的 \(N_i^2\) 决定主要临时显存。

实现每个 timestep 重新计算参考表征并在读取后清空 hook 输出,没有把 50 步的全部 attention maps 长期缓存。需要保存的是 inversion latents;每步四次 UNet forward 加一次 latent backward,解释了 24.26 秒的运行时间。

原论文 Figures 3、4、6–13。 Figure 3 对比 naive、latent L2 与完整方法;Figure 4 展示双 guider 与 rescaling;Figures 6–7 扫描 guider scale;Figures 8–13 用 PCA 或均值可视化 attention/features。PCA 色块支持这些表征与对象区域相关,未建立这些表征导致编辑成功的因果证明。
Noise rescaling audit

论文公式与代码实现必须分开阅读

Paper formula · squared norm
\[ \Delta_{\mathrm{CFG},t}=w\left(\epsilon_{\theta}(z_t,t,y_{\mathrm{trg}})-\epsilon_{\theta}(z_t,t,\varnothing)\right),\qquad G_t=\sum_i v_i\nabla_{z_t}g_{i,t} \]
\[ r_{\mathrm{cur}}(t)=\frac{\left\|\Delta_{\mathrm{CFG},t}\right\|_2^2}{\left\|G_t\right\|_2^2},\qquad \gamma_t=r_t\,r_{\mathrm{cur}}(t) \]
\[ r_t=\operatorname{clip}\left(\frac{1}{r_{\mathrm{cur}}(t)},r_{\mathrm{lower}},r_{\mathrm{upper}}\right) \]

该式缩放后的普通范数比为:

\[ \frac{\left\|\gamma_tG_t\right\|_2}{\left\|\Delta_{\mathrm{CFG},t}\right\|_2}=\frac{\gamma_t}{\sqrt{r_{\mathrm{cur}}(t)}}=r_t\sqrt{r_{\mathrm{cur}}(t)} \]

因此,论文所称“把 guider 与 CFG 的范数比截断到区间”与其平方范数公式并不严格相符。

Fixed commit · unsquared norm
\[ q_t=\frac{\left\|G_t\right\|_2}{\left\|\Delta_{\mathrm{CFG},t}\right\|_2},\qquad s_t=\frac{\operatorname{clip}(q_t,r_{\mathrm{lower}},r_{\mathrm{upper}})}{q_t} \]
\[ \frac{\left\|s_tG_t\right\|_2}{\left\|\Delta_{\mathrm{CFG},t}\right\|_2}=\operatorname{clip}(q_t,r_{\mathrm{lower}},r_{\mathrm{upper}}) \]

提交 4a79013… 的 RangeNoiseRescaler 使用 torch.norm,直接实现普通范数比截断。非风格区间为 \([0.33,3.0]\);风格化上下界都为 \(1.5\),非零条件下最终比值固定为 1.5。

代码在 CFG norm 为零时把 ratio 设为 1;在 guider norm 为零时把 scale 设为 1。这些分支保证数值操作有限,但无法继续保证相对比例。

作者主张与证据:“rescaling 保持 noise distribution”属于方法直觉。范数平衡限制两个方向的幅值关系,无法单独证明合成 noise 仍服从原始 Gaussian 分布,也没有分布检验支撑这一说法。
原论文 Figures 14–15。 Figure 14 对非风格任务比较无 rescale、固定 rescale 与区间 rescale;Figure 15 显示风格化时 guider norm 常被下界截断,作者据此选择固定比例 1.5。图像示例和单条 norm 曲线属于机制展示,没有报告跨数据集统计。
Reproduction details

复现所需的完整设置

项目论文 / 官方实现复现含义
基础模型Stable Diffusion v1.4,冻结 UNet;VAE encoder / decoder没有训练 optimizer、learning rate、epoch 或数据训练过程
采样DDIM,50 steps;inversion CFG 1;目标 CFG 7.5保存完整 inversion latent trajectory
非风格 guiderself 300000;feature 500;论文 35 步,代码 30 步source/current 与 source/reference;feature 为最后 up-block 输出
风格 guiderself 100000;feature 2.5;前 25 步;fixed ratio 1.5attention 使用 source/current;feature 使用 target/current 与 source/reference
非风格 rescalelower 0.33;upper 3.0公开代码按普通范数比截断
运行环境Python 3.8.5;PyTorch 2.3.0;Diffusers 0.17.1;NVIDIA A100 40GBREADME 披露的官方环境
Prompt每个样本需要 source / target caption;论文未公开完整 80 样本 prompt 清单附录给出各数据集构造规则和图中部分 prompt
停止条件固定 50 步完成;末端 guider scale 变为 0没有 beam search、reranking、retry 或 backtracking

Appendix A 的 DDIM 系数

\[ a_t=\sqrt{\frac{\bar\alpha_{t-1}}{\bar\alpha_t}},\qquad b_t=\sqrt{\bar\alpha_{t-1}}\left(\sqrt{\frac{1}{\bar\alpha_{t-1}}-1}-\sqrt{\frac{1}{\bar\alpha_t}-1}\right) \]
\[ a_t^{\ast}=\sqrt{\frac{\bar\alpha_{t+1}}{\bar\alpha_t}},\qquad b_t^{\ast}=\sqrt{\bar\alpha_{t+1}}\left(\sqrt{\frac{1}{\bar\alpha_{t+1}}-1}-\sqrt{\frac{1}{\bar\alpha_t}-1}\right) \]

这里用 \(\bar\alpha_t\) 显式表示累计 alpha,避免把单步 \(\alpha_t\) 与累计量混淆。

Main experiments

主表支持“平衡较好”,还不足以支持全面领先

Table 1 · 定量比较

方法LPIPS ↓CLIP ↑FID ↓A100 时间 / 秒 ↓
ProxMasaCtrl0.2670.21594.5312.94
MasaCtrl0.3060.223100.6213.73
EDICT0.2210.22947.1368.13
P2P + NTI0.2790.23342.4666.77
P2P + NPI Prox0.1700.23343.168.59
P2P + NPI0.2510.23444.058.54
PnP0.3660.25639.55197.0
Guide-and-Rescale0.2280.24339.0724.26

正文遗漏

正文声称 LPIPS 仅 EDICT 更低。表中 P2P + NPI Prox 为 0.170,同样低于本文的 0.228,而且差距更大。

指标冲突

LPIPS 在整张原图与编辑图之间计算,编辑目标区域变化也会增加距离。更低数值可能来自编辑不足,因此要和 CLIP、局部 mask 或人评一起解释。

统计边界

FID 39.07 与 PnP 39.55 没有置信区间或重复试验。论文没有提供显著性检验,不能把 0.48 的差值解释为稳定优势。

Table 2 · 人类偏好“本文胜率”

对比 baselineEditing Q1Preservation Q2
MasaCtrl85%70%
ProxMasaCtrl82%63%
P2P + NTI60%49%
P2P + NPI59%58%
P2P + NPI Prox50%55%
PnP60%61%
EDICT56%59%

62 名参与者回答 960 个问题;每位最多完成 6 次任务。每个唯一比较由 3 名不同用户判断。主表中 NTI 的 preservation 为 49%,NPI Prox 的 editing 为 50%,因此“每个维度均胜过全部 baseline”的表述超出数据。

Appendix coverage

数据集、基线配置、补充结果与分任务人评

Appendix D · 四类 custom edits 与三个 500 样本集合

Custom 80

4 类任务,每类人工收集 20 张:animal-to-animal、face-in-the-wild、person-in-the-wild、stylisation。选择过程和来源分布没有完整披露。

COCO 500

随机选 500 张图,source prompt 用 caption,target prompt 随机拼接 25 种风格之一。用于 stylisation。

AFHQ 500

500 张 dog,source 为 “a dog”,target 为 “a cat”;FID 参考 5,000 张 cat。样本量和子集选择会影响 FID 方差。

Wild FFHQ 500

source 为 “A photo of a person”,从 15 种情绪词随机选一个插入 target prompt。用于表情改变。

Table 3 · Baseline 特殊推理参数

方法关键参数
PnPself_attn_block_indices=[4..11];out_layers_output_block_indices=[4];feature_injection_threshold=40;scale=10
EDICTmix_weight=0.93;init_image_strength=0.8;guidance_scale=3
MasaCtrlSTEP=4;论文表内拼写 LAYPER=10
ProxMasaCtrlnpi=True;npi_interp=1;prox=l0;quantile=0.6;masa_step=4;masa_layer=10
NPI + P2Pcross_replace_steps=0.8;self_replace_steps=0.6;blend_word=None
NPI Prox + P2P上项参数 + prox=l0;quantile=0.6
NTI + P2PP2P 参数 + opt_early_stop_epsilon=1e-5;opt_num_inner_steps=10

Tables 4–6 · AverageRank、COCO 与 FFHQ

方法AverageRank ↓COCO LPIPS ↓COCO CLIP ↑FFHQ LPIPS ↓FFHQ CLIP ↑
Guide-and-Rescale2.00.4490.2900.1560.183
NPI Prox + P2P3.00.2080.2630.1340.171
PnP3.70.3780.2860.2510.190
NPI + P2P4.00.3940.2650.2490.175
EDICT4.70.2730.2530.1580.174
NTI + P2P4.70.3380.2720.1200.171
ProxMasaCtrl6.70.2270.2310.2810.184
MasaCtrl7.30.3000.2400.3460.190

AverageRank 对 LPIPS、CLIP、FID 三项名次做等权平均,把不同数据量与不同任务的指标压缩成单值。它容易隐藏指标幅度、相关性和统计不确定性。COCO 风格化中本文 LPIPS 最差 0.449、CLIP 最高 0.290,说明保存原图像素相似度与充分风格化存在冲突。

Tables 7–10 · 按编辑类型的人评胜率

BaselineFaceAnimalStylisationPerson
Pres.EditPres.EditPres.EditPres.Edit
NTI + P2P40%73%67%59%33%52%50%58%
NPI Prox + P2P32%47%92%67%64%36%50%50%
NPI + P2P67%83%73%73%46%62%52%33%
PnP72%89%50%58%69%62%61%33%
EDICT68%68%80%67%50%33%42%58%
ProxMasaCtrl67%83%67%81%50%83%73%82%
MasaCtrl75%25%29%71%76%92%100%100%

分任务结果波动很大:例如对 MasaCtrl,本文在 face editing 仅获 25% 胜率,在 person 任务两项均为 100%。附录没有报告每格题目数量、置信区间、随机化顺序或参与者人口统计,无法判断这些极端比例的稳定性。

原论文 Figures 16–22。 Appendix D 分别展示 custom animal、face、person、stylisation,以及 COCO、AFHQ dog-to-cat、Wild-FFHQ emotion 的全方法视觉比较。它们提供方法间失败模式的实例,但没有随机抽样协议或盲选说明。
Paper vs. implementation

固定提交的七项关键事实

普通范数实现

noise_rescales.py 使用未平方的 torch.norm,在两个范数非零时严格实现最终 guider-to-CFG 范数比截断。它与论文 Equation 15 的 squared norm 不同。

35 与 30

论文 Appendix A 为非风格任务给出 \(\tau=35\)。ours_nonstyle_best.yaml 写 total_first_steps: 30,调度器生成长度 50 的数组,前 30 项非零。

四次 forward 的梯度边界

unconditional 与 reference source forward 使用 no_grad;随后当前 latent 开启梯度,依次运行 current source 与 current target。模型参数已冻结,latent 梯度仍通过 UNet 计算。

风格 feature 的 prompt

FeaturesMapL2EnergyGuider.forward_hooks=['cur_trg','inv_inv'],当前分支采用 target prompt,参考分支采用 source prompt。非风格 guider 使用 cur_inv/inv_inv。

精确 hook 位置

风格 feature hook 在 up_blocks[1].resnets[1],逐元素平方差后 mean。非风格 new_features:true 在最后 up-block 输出取 feature,逐元素绝对差后 mean。

grad_guider 的含义

属性为 true 表示 guider 直接提供方向,无需对自身输出执行 backward,例如 CFG。能量 guider 为 false,随后会对总能量 backward。名称容易造成相反理解。

显存清理

forward hook 只保留当前所需输出;写入 data_dict 后执行 single_output_clear。每个采样步还调用垃圾回收与 CUDA cache 清理。

复现范围

官方仓库提供推理实现、配置与 notebook,没有发布 custom 80 的完整样本及 prompt 列表,也没有实验脚本生成论文全部表格。

Reviewer commentary

贡献成立,证据仍有明显边界

Strengths
  • 把内部表征匹配改写为连续能量梯度,避免硬替换缓存 feature。
  • 同一框架覆盖局部编辑和全局风格化,并明确改变 feature layer 与 prompt 条件。
  • 定量表、人评、运行时间和多个公开 baseline 共同评估编辑与保存的冲突。
  • 公开实现清楚展示四次 forward、hook 和 rescale 流程。
Weaknesses
  • 论文 squared-norm rescale 与代码 unsquared-norm 实现不一致,论文对最终范数比的解释有数学缺口。
  • Table 1 正文漏掉 NPI Prox 的更低 LPIPS,且 FID 微小差距没有统计检验。
  • 80 个 custom 样本由人工选择,LPIPS 对目标编辑区域也施加惩罚。
  • 62 人、960 题的人评没有置信区间、分格样本量与参与者信息。
  • 每步四次 forward 加 backward,计算成本仍明显高于若干快速 baseline。
Research extension
  • 直接按 mask 分离编辑区与保存区,对局部 LPIPS 和 guider energy 分别建模。
  • 学习 timestep-dependent ratio schedule,以验证固定区间和固定 1.5 的必要性。
  • 在 SDXL、DiT 与 flow matching 模型上重新定义内部表征 guider。
  • 用 uncertainty-aware rescaling 处理 CFG 或 guider norm 接近零的步骤。
  • 把 prompt 条件、layer 选择与停止步数纳入 test-time search,并报告计算预算。

事实标签

Paper verified

本文在公开表格中取得 FID 39.07、CLIP 0.243,且人评多数整体比较偏好本文。

Author claim

rescaling 能“保持 noise distribution”是作者解释,论文没有直接测量生成轨迹分布。

Our interpretation

方法的实际价值来自限制保存梯度相对 CFG 的幅值,并让 source-conditioned 表征提供区域稳定性。

Research extension

可以把普通范数比实现视作约束投影,再扩展为按层、按区域、按 timestep 的可学习预算。