图像生成水印:Stable Signature、Tree-Ring、Gaussian Shade、图像版 PRC
图像生成水印整理:Stable Signature、Tree-Ring、Gaussian Shade、图像版 PRC
1. 统一背景
扩散模型中常见的两个方向:
- 生成:
z -> Decoder -> x - 回推:
x -> Encoder -> z
其中,x 是图像,z 是潜变量。多数图像水印都在潜空间 z 上注入,再在检测时从 x 编码回 z 进行判定。
潜空间是图像的压缩抽象表示。扩散过程主要在该空间进行,因此水印常布置在这里。
2. 四类方案总览
| 方案 | 核心原理 | 是否可嵌消息 | 主要优点 | 主要局限 |
|---|---|---|---|---|
| Stable Signature | 微调解码器,写入固定签名 | 可(固定签名) | 检测快、实现直观 | 需微调,可能影响画质 |
| Tree-Ring | 在潜空间频域写圆环模式 | 基本不可 | 抗常见编辑较好 | 多样性受限,信息容量低 |
| Gaussian Shade | 约束潜变量落入目标子空间/象限 | 弱 | 单图失真小,检测简单 | 鲁棒性与多样性受影响 |
| 图像版 PRC | 伪随机码 + 纠错解码 | 可 | 容错强、可恢复消息 | 设计与实现复杂 |
3. Stable Signature
3.1 核心思想
在训练或微调阶段,让解码器倾向于在输出图像中携带固定二进制签名。
3.2 生成侧表达(思想式)
x0=Decoder(z)+ε⋅SignatureMask x_0 = \text{Decoder}(z) + \varepsilon \cdot \text{SignatureMask} x0=Decoder(z)+ε⋅SignatureMask
常见训练目标可写为:
minθ∥x0−x^0∥2+λ⋅∥Extract(x0)−s∥2 \min_\theta \|x_0 - \hat{x}_0\|^2 + \lambda \cdot \|\text{Extract}(x_0) - s\|^2 θmin∥x0−x^0∥2+λ⋅∥Extract(x0)−s∥2
3.3 检测侧表达
s^=Extract(x),dH(s^,s)<τ \hat{s} = \text{Extract}(x), \quad d_H(\hat{s}, s) < \tau s^=Extract(x),dH(s^,s)<τ
即提取签名后,与目标签名做汉明距离判定。
3.4 关键参数
- 签名长度
L - 嵌入强度
epsilon - 训练权重
lambda - 检测阈值
tau
3.5 生成算法细节(训练与推理)
训练阶段(简化流程):
- 采样潜变量
z,解码得到x = Decoder(z)。 - 用提取器网络得到
s_hat = Extract(x)。 - 计算联合损失:重建损失 + 签名损失。
- 反向传播更新解码器参数(或解码器末层参数)。
- 重复直到签名提取准确率达到目标。
推理阶段:
- 按正常扩散流程得到潜变量
z_t -> z_0。 - 用已水印化的解码器输出图像。
- 生成端不需要额外后处理,水印由解码器隐式写入。
4. Tree-Ring Watermark
4.1 核心思想
在潜空间傅里叶域构造环形掩码,约束环上频率分量。
傅里叶域
图像可在空间域(像素)和频域(变化频率)之间转换。频域更适合做“不可见但可检测”的结构化约束。
数学上,给定二维信号 z(x, y),离散傅里叶变换(DFT)为:
F(u,v)=∑x=0W−1∑y=0H−1z(x,y) e−j2π(ux/W+vy/H) F(u,v) = \sum_{x=0}^{W-1}\sum_{y=0}^{H-1} z(x,y)\,e^{-j2\pi(ux/W + vy/H)} F(u,v)=x=0∑W−1y=0∑H−1z(x,y)e−j2π(ux/W+vy/H)
其逆变换为:
z(x,y)=1WH∑u=0W−1∑v=0H−1F(u,v) ej2π(ux/W+vy/H) z(x,y) = \frac{1}{WH}\sum_{u=0}^{W-1}\sum_{v=0}^{H-1} F(u,v)\,e^{j2\pi(ux/W + vy/H)} z(x,y)=WH1u=0∑W−1v=0∑H−1F(u,v)ej2π(ux/W+vy/H)
其中:
|F(u,v)|是幅度谱,表示该频率成分强弱。arg(F(u,v))是相位谱,决定结构位置与几何细节。
用于水印时常见思路:
- 在幅度谱特定区域(如中频环)写入稳定结构。
- 尽量少改相位,减少可见失真。
- 利用频域局部统计做检测阈值判定。
为什么频域有优势:
- 某些全局编辑在频域上表现为可建模扰动。
- 人眼对特定频段扰动不敏感,更易实现“不可见”。
- 可用掩码定义规则结构,便于批量检测。
4.2 生成侧表达
z′=z⊙(1−RingMask) z' = z \odot (1 - \text{RingMask}) z′=z⊙(1−RingMask)
\odot 表示逐元素相乘(Hadamard 积)。若 RingMask 在环内为 1,则环内分量会被压制为 0。
4.3 检测侧表达
z=Encode(x),1N∑∣F(z)[RingMask]∣<τ z = \text{Encode}(x), \quad \frac{1}{N} \sum |F(z)[\text{RingMask}]| < \tau z=Encode(x),N1∑∣F(z)[RingMask]∣<τ
这里是把图像编码回潜空间,再看频域环区域是否接近目标模式。
检测要从图像回到潜空间再判定,所以是编码回潜变量,而不是解码。
4.4 关键参数
- 圆环半径
- 圆环宽度
- 环位置与掩码形状
- 检测阈值
tau
4.5 生成算法细节(频域注入)
常见实现流程:
- 对潜变量
z做 2D FFT:Z = FFT2(z)。 - 构造环形掩码
M_ring(由半径、宽度、中心决定)。 - 按规则改写环内频率分量(置零或拉向目标模板):
Z' = Z ⊙ (1 - M_ring)。 - 逆变换回潜空间:
z' = IFFT2(Z')。 - 用
z'继续去噪/解码得到图像。
实践里常加两个约束:
- 仅改中频环,减少可见失真。
- 控制改写强度,避免对采样多样性影响过大。
5. Gaussian Shade
5.1 核心思想
将潜空间划分为多个子区域(常用“象限”做直观说明),生成时把采样约束到某个目标区域。
5.2 生成侧表达
z′=ProjectToQuadrant(z,q) z' = \text{ProjectToQuadrant}(z, q) z′=ProjectToQuadrant(z,q)
5.3 检测侧表达
q^=ClassifyQuadrant(Encode(x)),q^=qsecret \hat{q} = \text{ClassifyQuadrant}(\text{Encode}(x)), \quad \hat{q} = q_{\text{secret}} q^=ClassifyQuadrant(Encode(x)),q^=qsecret
5.4 关键参数
- 区域/象限数量
- 划分策略
- 投影强度
5.5 生成算法细节(子空间投影)
可实现为“约束采样”或“投影后采样”:
- 基于密钥确定目标区域
q(或目标子空间)。 - 在每一步去噪后,对当前潜变量做投影:
z_t <- Project(z_t, q)。 - 若投影偏移过大,使用系数
alpha做软约束:z_t <- (1-alpha) * z_t + alpha * Project(z_t, q)。 - 持续迭代至
z_0,再解码输出。
关键点:
- 硬投影鲁棒性更好,但更可能影响画质。
- 软投影更自然,但检测边界更模糊。
6. 图像版 PRC 水印
6.1 核心思想
用伪随机码和纠错机制把消息映射到潜空间约束中,检测时通过解码恢复码字。
6.2 生成侧表达
c=PRC(gk,seed),z′=Constrain(z,c) c = \text{PRC}(gk, seed), \quad z' = \text{Constrain}(z, c) c=PRC(gk,seed),z′=Constrain(z,c)
6.3 检测侧表达
b1,…,bn=ExtractBits(Encode(x)) b_1, \ldots, b_n = \text{ExtractBits}(\text{Encode}(x)) b1,…,bn=ExtractBits(Encode(x))
c^=Decode(b1,…,bn),c^∈C \hat{c} = \text{Decode}(b_1, \ldots, b_n), \quad \hat{c} \in C c^=Decode(b1,…,bn),c^∈C
6.4 关键参数
- 码长
n - 最小汉明距离
d - 偏置强度
delta - 码本
C
6.5 生成算法细节(编码-约束-纠错)
典型流程:
- 用密钥和随机种子生成消息码字
c。 - 将
c映射为潜空间约束模式(分块符号或子空间偏置)。 - 在去噪过程中逐步施加偏置
delta,使潜变量靠近该模式。 - 生成图像后,检测端反向提取比特并做纠错解码。
算法实现核心:
- 码本设计要保证足够汉明距离,以承受压缩和编辑噪声。
- 偏置注入应分步进行,避免一步强推导致伪影。
- 检测时结合软判决(置信度)通常优于硬判决。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)