潜在扩散模型生成式水印的开源工具包

May 19, 2026 · View on GitHub

潜在扩散模型生成式水印的开源工具包

Home Paper Models Colab DOC PYPI CONDA-FORGE

语言版本: English | 中文 | Français | Español

🔥 作为一个新发布的项目,我们欢迎 PR! 如果您已经实现了 LDM 水印算法或有兴趣贡献一个算法,我们很乐意将其包含在 MarkDiffusion 中。加入我们的社区,帮助让生成式水印技术对每个人都更易用!

目录

🔥 更新日志

🛠 (2026.05.15) 将测试套件扩展到 672 个单元测试,代码覆盖率达 94.73%(在新的 markdiffusion-test 环境上完成 GPU + CPU 全量回归)。

🏗️ (2026.05.10) 将仓库重构为标准的 markdiffusion/ Python 包结构,使 pip install -e . 与 PyPI 安装共享同一套 import 路径(from markdiffusion.watermark import AutoWatermark)。editable 安装与 CI 现在基于统一的源码布局。

🎯 (2026.05.10) 新增 DiffusionPurificationNeuralCodecCompression 再生成攻击;CrSc(裁剪与缩放)支持 position="random" 以及显式偏移参数 —— 感谢贡献者!

🛠 (2025.12.19) 为所有功能添加了包含658个测试用例的完整测试套件。

🛠 (2025.12.10) 使用 GitHub Actions 添加了持续集成测试系统。

🎯 (2025.10.10) 添加 Mask、Overlay、AdaptiveNoiseInjection 图像攻击工具,感谢付哲语的 PR!

🎯 (2025.10.09) 添加 FrameRateAdapter、FrameInterpolationAttack 视频攻击工具,感谢司路阳的 PR!

🎯 (2025.10.08) 添加 SSIM、BRISQUE、VIF、FSIM 图像质量分析器,感谢王欢的 PR!

(2025.10.07) 添加 SFW 水印方法,感谢王欢的 PR!

(2025.10.07) 添加 VideoMark 水印方法,感谢李翰乾的 PR!

(2025.9.29) 添加 GaussMarker 水印方法,感谢司路阳的 PR!

🔓 MarkDiffusion 简介

👀 概述

MarkDiffusion 是一个用于潜在扩散模型生成式水印的开源 Python 工具包。随着基于扩散的生成模型应用范围的扩大,确保生成媒体的真实性和来源变得至关重要。MarkDiffusion 简化了水印技术的访问、理解和评估,使研究人员和更广泛的社区都能轻松使用。注意:如果您对 LLM 水印(文本水印)感兴趣,请参考我们团队的 MarkLLM 工具包。

该工具包包含三个关键组件:统一的实现框架,用于简化水印算法集成和用户友好的界面;机制可视化套件,直观地展示添加和提取的水印模式,帮助公众理解;以及全面的评估模块,提供 33 个工具的标准实现,涵盖三个关键方面——可检测性、鲁棒性和输出质量,以及 8 个自动化评估流水线。

MarkDiffusion Overview

💍 核心特性

  • 统一实现框架: MarkDiffusion 提供了一个模块化架构,支持十一种最先进的 LDM 生成式图像/视频水印算法。

  • 全面的算法支持: 目前实现了来自两大类别的 11 种水印算法:基于模式的方法(Tree-Ring、Ring-ID、ROBIN、WIND、SFW)和基于密钥的方法(Gaussian-Shading、PRC、SEAL、VideoShield、GaussMarker、VideoMark)。

  • 可视化解决方案: 该工具包包含定制的可视化工具,能够清晰而深入地展示不同水印算法在各种场景下的运行方式。这些可视化有助于揭示算法机制,使其对用户更易理解。

  • 评估模块: 拥有 33 个评估工具,涵盖可检测性、鲁棒性和对输出质量的影响,MarkDiffusion 提供全面的评估能力。它具有 8 个自动化评估流水线:水印检测流水线、图像质量分析流水线、视频质量分析流水线以及专门的鲁棒性评估工具。

✨ 已实现算法

算法类别目标参考文献
Tree-Ring模式图像Tree-Ring Watermarks: Fingerprints for Diffusion Images that are Invisible and Robust
Ring-ID模式图像RingID: Rethinking Tree-Ring Watermarking for Enhanced Multi-Key Identification
ROBIN模式图像ROBIN: Robust and Invisible Watermarks for Diffusion Models with Adversarial Optimization
WIND模式图像Hidden in the Noise: Two-Stage Robust Watermarking for Images
SFW模式图像Semantic Watermarking Reinvented: Enhancing Robustness and Generation Quality with Fourier Integrity
Gaussian-Shading密钥图像Gaussian Shading: Provable Performance-Lossless Image Watermarking for Diffusion Models
GaussMarker密钥图像GaussMarker: Robust Dual-Domain Watermark for Diffusion Models
PRC密钥图像An undetectable watermark for generative image models
SEAL密钥图像SEAL: Semantic Aware Image Watermarking
VideoShield密钥视频VideoShield: Regulating Diffusion-based Video Generation Models via Watermarking
VideoMark密钥视频VideoMark: A Distortion-Free Robust Watermarking Framework for Video Diffusion Models

🎯 评估模块

评估流水线

MarkDiffusion 支持八个流水线,两个用于检测(WatermarkedMediaDetectionPipeline 和 UnWatermarkedMediaDetectionPipeline),六个用于质量分析。下表详细说明了质量分析流水线。

质量分析流水线输入类型所需数据适用指标
DirectImageQualityAnalysisPipeline单张图像生成的有/无水印图像单张图像评估指标
ReferencedImageQualityAnalysisPipeline图像 + 参考内容生成的有/无水印图像 + 参考图像/文本需要在单张图像和参考内容(文本/图像)之间计算的指标
GroupImageQualityAnalysisPipeline图像集(+ 参考图像集)生成的有/无水印图像集(+ 参考图像集)需要在图像集上计算的指标
RepeatImageQualityAnalysisPipeline图像集重复生成的有/无水印图像集用于评估重复生成图像集的指标
ComparedImageQualityAnalysisPipeline两张对比图像生成的有水印和无水印图像测量两张图像之间差异的指标
DirectVideoQualityAnalysisPipeline单个视频生成的视频帧集整体视频评估指标

评估工具

工具名称评估类别功能描述输出指标
FundamentalSuccessRateCalculator可检测性计算固定阈值水印检测的分类指标各种分类指标
DynamicThresholdSuccessRateCalculator可检测性计算动态阈值水印检测的分类指标各种分类指标
图像攻击工具
Rotation鲁棒性(图像)图像旋转攻击,测试水印对旋转变换的抗性旋转后的图像/帧
CrSc(裁剪与缩放)鲁棒性(图像)裁剪和缩放攻击,评估水印对尺寸变化的鲁棒性裁剪/缩放后的图像/帧
GaussianNoise鲁棒性(图像)高斯噪声攻击,测试水印对噪声干扰的抗性噪声损坏的图像/帧
GaussianBlurring鲁棒性(图像)高斯模糊攻击,评估水印对模糊处理的抗性模糊后的图像/帧
JPEGCompression鲁棒性(图像)JPEG 压缩攻击,测试水印对有损压缩的鲁棒性压缩后的图像/帧
Brightness鲁棒性(图像)亮度调整攻击,评估水印对亮度变化的抗性亮度修改后的图像/帧
Mask鲁棒性(图像)图像遮罩攻击,测试水印对随机黑色矩形部分遮挡的抗性遮罩后的图像/帧
Overlay鲁棒性(图像)图像覆盖攻击,测试水印对涂鸦式笔触和注释的抗性覆盖后的图像/帧
AdaptiveNoiseInjection鲁棒性(图像)自适应噪声注入攻击,测试水印对内容感知噪声的抗性(高斯/椒盐/泊松/斑点)自适应噪声处理后的图像/帧
视频攻击工具
MPEG4Compression鲁棒性(视频)MPEG-4 视频压缩攻击,测试视频水印的压缩鲁棒性压缩后的视频帧
FrameAverage鲁棒性(视频)帧平均攻击,通过帧间平均破坏水印平均后的视频帧
FrameSwap鲁棒性(视频)帧交换攻击,通过改变帧序列测试鲁棒性交换后的视频帧
FrameRateAdapter鲁棒性(视频)帧率转换攻击,在保持时长的同时重采样帧重采样后的帧序列
FrameInterpolationAttack鲁棒性(视频)帧插值攻击,插入混合帧以改变时间密度插值后的视频帧
图像质量分析器
InceptionScoreCalculator质量(图像)评估生成图像的质量和多样性IS 分数
FIDCalculator质量(图像)Fréchet Inception Distance,测量生成图像和真实图像之间的分布差异FID 值
LPIPSAnalyzer质量(图像)学习感知图像块相似度,评估感知质量LPIPS 距离
CLIPScoreCalculator质量(图像)基于 CLIP 的文本-图像一致性评估CLIP 相似度分数
PSNRAnalyzer质量(图像)峰值信噪比,测量图像失真PSNR 值(dB)
NIQECalculator质量(图像)自然图像质量评估器,无参考质量评估NIQE 分数
SSIMAnalyzer质量(图像)两张图像之间的结构相似性指数SSIM 值
BRISQUEAnalyzer质量(图像)盲/无参考图像空间质量评估器,无需参考即可评估图像的感知质量BRISQUE 分数
VIFAnalyzer质量(图像)视觉信息保真度分析器,比较失真图像与参考图像以量化保留的视觉信息量VIF 值
FSIMAnalyzer质量(图像)特征相似性指数分析器,基于相位一致性和梯度幅度比较两张图像的结构相似性FSIM 值
视频质量分析器
SubjectConsistencyAnalyzer质量(视频)评估视频中主体对象的一致性主体一致性分数
BackgroundConsistencyAnalyzer质量(视频)评估视频中背景的连贯性和稳定性背景一致性分数
MotionSmoothnessAnalyzer质量(视频)评估视频运动的平滑度运动平滑度指标
DynamicDegreeAnalyzer质量(视频)测量视频中的动态水平和变化幅度动态度值
ImagingQualityAnalyzer质量(视频)综合评估视频成像质量成像质量分数

🧩 快速开始

Google Colab 演示

如果您想在不安装任何内容的情况下试用 MarkDiffusion,可以使用 Google Colab 查看其工作方式。

安装

MarkDiffusion 提供三种安装方式,请根据使用场景选择:

方式命令适用场景
A. PyPI(推荐普通用户)pip install markdiffusion[optional]你只想在自己的脚本/notebook 里调用水印算法,不需要阅读或修改库源码,也不需要跑仓库内的测试套件 / demo notebook。
B. 源码 editable 安装(推荐贡献者 / 研究者)git clone … && cd MarkDiffusion && pip install -e ".[optional]"你想(a)跑 MarkDiffusion_demo.ipynb / test/ 测试套件,(b)修改或新增水印算法,(c)复现论文结果,或(d)提 PR。markdiffusion/ 下的源码改动立即生效。
C. conda-forge(仅 conda 环境)conda install -c conda-forge markdiffusion你只能使用 conda 渠道。部分依赖 PyPI-only 包(如 pyiqa / lpips)的高级功能未打包进 conda 发布,如需使用请单独安装。

方式 A —— PyPI 安装:

conda create -n markdiffusion python=3.11
conda activate markdiffusion
pip install markdiffusion[optional]

方式 B —— 源码 editable 安装:

git clone https://github.com/THU-BPM/MarkDiffusion.git
cd MarkDiffusion
conda create -n markdiffusion python=3.11
conda activate markdiffusion
pip install -e ".[optional]"
# (可选)安装测试附加依赖,以运行 pytest / 覆盖率 / 并行测试
pip install -r test/requirements-test.txt

pyproject.toml 已将 torch>=2.4,<2.11setuptools<81 pin 住,依赖解析器会选 CUDA-12.x wheel(需要驱动 ≥ 525),同时保留 pkg_resourcesopenai-clip 仍依赖)。

方式 C —— conda-forge:

conda create -n markdiffusion python=3.11
conda activate markdiffusion
conda config --add channels conda-forge
conda config --set channel_priority strict
conda install markdiffusion

如何使用工具包

PyPI 安装与 editable 安装使用同一套 markdiffusion.* import 路径。两本 demo notebook 仅作用范围不同:

  • MarkDiffusion_pypi_demo.ipynb —— 端到端最小示例;PyPI 用户的安全起点。
  • MarkDiffusion_demo.ipynb —— 覆盖全部 11 个算法、可视化和评估流水线的完整演练;仅随源码仓库提供(方式 B)。

两种安装方式都可直接使用的最小端到端示例:

import torch
from markdiffusion.watermark import AutoWatermark
from markdiffusion.utils import DiffusionConfig
from diffusers import StableDiffusionPipeline, DPMSolverMultistepScheduler

device = "cuda" if torch.cuda.is_available() else "cpu"

MODEL_PATH = "huanzi05/stable-diffusion-2-1-base"
scheduler = DPMSolverMultistepScheduler.from_pretrained(MODEL_PATH, subfolder="scheduler")
pipe = StableDiffusionPipeline.from_pretrained(
    MODEL_PATH,
    scheduler=scheduler,
    torch_dtype=torch.float16 if device == "cuda" else torch.float32,
    safety_checker=None,
).to(device)

diffusion_config = DiffusionConfig(
    scheduler=scheduler,
    pipe=pipe,
    device=device,
    image_size=(512, 512),
    num_inference_steps=50,
    guidance_scale=7.5,
    gen_seed=42,
    inversion_type="ddim",
)

# AutoWatermark 默认从包内置 config(markdiffusion/config/TR.json)加载;
# 如需覆盖,传 `algorithm_config=`。
tr_watermark = AutoWatermark.load("TR", diffusion_config=diffusion_config)

prompt = "A beautiful landscape with mountains and a river at sunset"
watermarked_image = tr_watermark.generate_watermarked_media(input_data=prompt)
watermarked_image.save("watermarked_image.png")

detection_result = tr_watermark.detect_watermark_in_media(watermarked_image)
print(detection_result)

如果使用方式 B,还可以让 algorithm_config= 指向工作目录中的 JSON(例如 markdiffusion/config/TR.json),无需重新安装即可调参。在源码仓库下也可以直接执行完整 demo notebook:

jupyter nbconvert --to notebook --execute MarkDiffusion_demo.ipynb \
    --ExecutePreprocessor.kernel_name=markdiffusion \
    --ExecutePreprocessor.timeout=1800

🛠 测试模块

我们提供了一套全面的测试模块来确保代码质量。该模块包含 672 个单元测试,代码覆盖率 94.73%。详情请参考 test/ 目录。这里是直接由 pytest 导出的完整覆盖率报告测试结果报告

引用

@article{pan2025markdiffusion,
  title={MarkDiffusion: An Open-Source Toolkit for Generative Watermarking of Latent Diffusion Models},
  author={Pan, Leyi and Guan, Sheng and Fu, Zheyu and Si, Luyang and Wang, Zian and Hu, Xuming and King, Irwin and Yu, Philip S and Liu, Aiwei and Wen, Lijie},
  journal={arXiv preprint arXiv:2509.10569},
  year={2025}
}