尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

如何用ESD生成擦除前后对比图?Erasing Concepts from Diffusion Models推理实战教程

如何用ESD生成擦除前后对比图?Erasing Concepts from Diffusion Models推理实战教程 如何用ESD生成擦除前后对比图Erasing Concepts from Diffusion Models推理实战教程【免费下载链接】erasingErasing Concepts from Diffusion Models项目地址: https://gitcode.com/gh_mirrors/er/erasingErasing Concepts from Diffusion Models简称 ESD是一个基于 diffusers 的开源项目用于从 Stable Diffusion、SDXL、FLUX 等扩散模型中精确擦除指定概念——比如去掉画面的艺术风格、移除特定物体、清除不当内容而保留模型其余生成能力。本教程手把手带你完成 ESD 推理实战从环境配置、加载权重到固定随机种子生成擦除前后对比图全程无需复杂改动新手也能 10 分钟跑通。ESD 是什么三分钟看懂概念擦除传统做法是重新训练或微调整个模型来遗忘某个概念成本高且容易破坏原有能力。ESD 的思路完全不同它只需一个简短文字描述如 Van Gogh对模型权重做轻量微调让生成结果自动绕开该概念同时保持其他生成能力几乎不变。上图展示了 ESD 的三类典型应用擦除裸露内容Erasing Nudity、擦除艺术风格Erasing Artistic Style、擦除物体Erasing Objects每列上方是原始模型输出下方是编辑后模型的输出。可以看出被擦除的元素消失后画面构图和整体质量依然在线。从原理上看训练时 ESD 让待微调模型的输出与冻结的原始模型输出产生差异并通过 L2 损失把生成轨迹推向与目标概念相反的方向具体流程可参考项目自带的原理图环境准备一条命令安装依赖ESD 代码库已经重构得相当精简训练与推理统一基于 diffusers官方文档在 docs/official.md。安装只需三步git clone https://link.gitcode.com/i/a1f7ef760f0990e8f1d405b223150538 cd erasing pip install -r requirements.txt依赖清单见 requirements.txt其中核心是diffusers、torch、safetensors。如果使用 FLUX 系列模型记得先把 diffusers 与 transformers 升级到最新版。硬件上一张 8GB 以上显存的 NVIDIA 显卡即可流畅运行 SD 1.x 的推理。快速生成对比图一条命令出图项目提供了开箱即用的批量出图脚本 evalscripts/generate-images.py它自动检测 checkpoint 目标组件unet 或 transformerSD、SDXL、FLUX 通用。生成对比图的核心思路是同一提示词、跑两次第一次不带 ESD 权重得到原始模型的输出第二次带上 ESD 权重得到擦除后的输出。命令示例如下以 SDXL Kelly 概念为例提示词来自 data/kelly_prompts.csv# 生成原始模型输出 python evalscripts/generate-images.py --base_model stabilityai/stable-diffusion-xl-base-1.0 --prompts_path data/kelly_prompts.csv --num_samples 1 --num_inference_steps 20 --guidance_scale 7 # 加载 ESD 权重生成擦除后输出 python evalscripts/generate-images.py --base_model stabilityai/stable-diffusion-xl-base-1.0 --esd_path esd-models/sdxl/esd-kelly-from-kelly.safetensors --prompts_path data/kelly_prompts.csv --num_samples 1 --num_inference_steps 20 --guidance_scale 7两次运行使用相同的--base_model与提示词文件图片会自动保存到esd-images/目录下对应模型名的文件夹中把相同case_number的两张图并排放置就是一张标准的擦除前后对比图。进阶实战固定随机种子精确复现对比效果批处理脚本适合快速出图如果想要同一提示词 完全相同的种子做逐像素级对比推荐直接在 Notebook 中手动推理。项目内置了针对不同底座的推理模板notebooks/esd_inference_sd.ipynbSD 1.xnotebooks/esd_inference_sdxl.ipynbSDXLnotebooks/esd_inference_flux.ipynbFLUXnotebooks/esd_inference_flux2_klein.ipynbFLUX.2 Klein第 1 步加载模型并保存原始权重pipe StableDiffusionPipeline.from_pretrained(basemodel_id, torch_dtypetorch.bfloat16, safety_checkerNone).to(cuda:0) original_weights deepcopy(pipe.unet.state_dict()) # 备份原始权重 esd_weights load_file(../esd-models/sd/esd-cowboy_hat-from-cowboy-esdx.safetensors)第 2 步先出原图再换 ESD 权重出擦除图关键技巧是固定随机种子用torch.Generator().manual_seed(seed)锁定种子后原始模型与 ESD 模型在相同提示词下生成的画面结构几乎一致差异只会出现在被擦除的概念上对比效果一目了然。seed random.randint(0, 2**15) # 用原始权重生成 pipe.unet.load_state_dict(original_weights, strictFalse) image_original pipe(prompt, num_inference_steps20, guidance_scale7.5, generatortorch.Generator().manual_seed(seed)).images[0] # 换 ESD 权重再次生成 pipe.unet.load_state_dict(esd_weights, strictFalse) image_erased pipe(prompt, num_inference_steps20, guidance_scale7.5, generatortorch.Generator().manual_seed(seed)).images[0]两份 checkpoint 的加载、保存、组件自动识别逻辑封装在 utils/esd_checkpoint.py 中SD/SDXL/FLUX 各自的数据管线则在 utils/sd_utils.py、utils/sdxl_utils.py、utils/flux_utils.py 中。出图后用 PIL 水平拼接两张图就是效果极佳的对比图素材。实战案例艺术风格与不当内容擦除案例一擦除艺术风格用 ESD 擦除特定画家风格如 Thomas Kinkade、Kilian Eng、Kelly McKernan效果对比如下原始模型生成浓烈风格化画面ESD 模型则输出更写实的普通场景且其他构图元素基本保留。训练这类风格擦除模型只需一条命令例如python esd_sd.py --erase_concept Van Gogh --train_method esd-x训练入口见 esd_sd.pySD、esd_sdxl.pySDXL、esd_flux.pyFLUX。更妙的是ESD 还支持从某个概念里只擦掉一个属性——比如只擦掉牛仔的帽子而保留牛仔本身--erase_concept cowboy hat --erase_from cowboy。案例二擦除不当内容对于 NSFW 场景ESD 同样有效。下图为不同方法在暴露身体部位减少比例上的量化对比可以看到 ESD 方法Our Method在绝大多数部位上实现了接近 -100% 的显著抑制明显优于 SLD 与原生 SD 2.x 方案。如果你要复现论文中的 NSFW 指标可结合 evalscripts/nudenet-classes.py 与 evalscripts/imageclassify.py 进行自动评估。如何评估擦除效果从肉眼对比到量化打分除了主观对比项目还提供了量化评估手段LPIPS 感知距离用 evalscripts/lpips_eval.py 计算擦除前后图像的感知差异距离越大说明改动越明显批量评估先用 evalscripts/generate-images.py 对大量提示词批量出图再统一比对结果更客观风格损失evalscripts/styleloss.py 可用于度量风格特征的残留程度。评估时注意对比图必须使用相同的种子、步数、guidance_scale否则差异可能来自采样随机性而非擦除效果。常见问题 FAQQ1加载 ESD 权重时提示 base_model 不匹配checkpoint 中保存了元数据base_model_id如果与你加载的底模不一致会给出 Warning。只要训练与推理使用同一底模即可放心忽略元数据读写逻辑见 utils/esd_checkpoint.py。Q2脚本提示 Loaded ESD weights into pipe.transformer这是正常的。新版本会自动检测权重对应unet还是transformerFLUX 系列使用 transformer 结构无需手动指定--component。Q3显存不够怎么办推荐使用torch.bfloat16精度推理并适当降低--num_inference_steps20 步即可获得不错效果。新版训练核心已共享训练显存占用约为旧版一半训练入口统一在 utils/esd_trainer.py。Q4提示词数据从哪来项目在 data/ 目录下提供了大量现成 CSV 提示词集如 data/kelly_prompts.csv、data/art_prompts.csv、data/unsafe-prompts4703.csv可直接用于测试与评估。总结用 ESD 生成擦除前后对比图本质只有三步备份原始权重 → 加载 ESD 权重 → 固定种子生成。无论你是想验证风格擦除效果、清理不当内容还是为论文/评测准备对比素材这套同一提示词 固定种子的流程都足够可靠。快去克隆 erasing 项目 动手试试吧【免费下载链接】erasingErasing Concepts from Diffusion Models项目地址: https://gitcode.com/gh_mirrors/er/erasing创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表