从模型里删掉汽车:Erasing Concepts from Diffusion Models物体擦除实战
【免费下载链接】erasingErasing Concepts from Diffusion Models项目地址: https://gitcode.com/gh_mirrors/er/erasing
想让 AI 绘画模型画不出某个东西?开源的Erasing Concepts from Diffusion Models(扩散模型概念擦除,简称 ESD)项目,用短短几百行代码就能让 Stable Diffusion、SDXL 甚至 FLUX 模型"忘记"指定物体。本文带你零基础完成扩散模型物体擦除实战:从环境安装、训练一条命令,到把"汽车"从模型里彻底删掉,全程可复现。
什么是 Erasing Concepts from Diffusion Models?
简单说,Erasing Concepts(ESD)是一种"模型手术":它不需要重新训练整个扩散模型,而是基于一段简短文本描述(比如 "car"),对模型权重做轻量微调,让模型在推理时不再生成该概念。整个过程只需要约 200 步优化、显存占用比旧版少一半、训练速度快 5~8 倍,非常适合普通玩家在自己的显卡上跑。
它有三个典型用途:
- 🚗擦除物体:汽车、帽子等,删掉后场景依然连贯(如山路上的车消失、原野换成风筝)
- 🎨擦除艺术风格:梵高、莫奈等画风可单独去除,画面仍保持真实自然
- 🛡️擦除不雅内容:配合 nudenet-classes.py 评估,裸露部位识别数大幅下降
一分钟看懂项目结构
核心文件都在仓库根目录,上手只需认识这几个:
| 文件 | 作用 |
|---|---|
| esd_sd.py | Stable Diffusion 1.x 概念擦除训练入口 |
| esd_sdxl.py | SDXL 训练入口(默认esd-x-strict) |
| esd_flux.py | FLUX.1-dev 训练入口 |
| esd_flux2_klein.py | FLUX.2 Klein 训练入口 |
| utils/esd_trainer.py | 统一的训练核心(ESDConfig + run_esd_training) |
| utils/esd_checkpoint.py | 带元数据的模型保存/加载 |
| notebooks/ | 推理演示笔记本,开箱即用 |
四个入口共享同一套 utils/esd_trainer.py 训练逻辑,并通过--basemodel_id可指定任意兼容的 diffusers 基座模型,学一个就会四个。
一键安装步骤
先在终端执行以下命令完成环境搭建(需要 Python 3.10+ 和一张显存足够的 NVIDIA 显卡):
git clone https://gitcode.com/gh_mirrors/er/erasing cd erasing pip install -r requirements.txt如果使用 FLUX 系列,请额外升级依赖:
pip install --upgrade diffusers transformers torch最快上手:一条命令擦除"汽车"
安装完成后,在项目根目录运行:
python esd_sd.py --erase_concept 'car' --train_method 'esd-x'参数说明:
--erase_concept:要擦除的概念,换成'van gogh'、'hat'都行--train_method:训练方式,常用esd-x(交叉注意力)、esd-x-strict、esd-u、esd-all--iterations:优化步数,默认 200--save_path:模型保存目录,默认esd-models/sd/
💡 进阶玩法:还能只删某个概念的"属性"。比如只删牛仔的帽子、保留牛仔本身:
python esd_sd.py --erase_concept 'cowboy hat' --erase_from 'cowboy' --train_method 'esd-x'SDXL 与 FLUX 擦除实战
换到更大的模型同样简单,核心命令几乎不变:
SDXL 版本(推荐esd-x-strict,更稳定):
python esd_sdxl.py --erase_concept 'car' --train_method 'esd-x-strict'FLUX.1-dev 版本:
python esd_flux.py --erase_concept 'car' --train_method 'esd-x' --negative_guidance 2FLUX.2 Klein 版本(基于Flux2KleinPipeline,需较新的 diffusers 与 transformers):
python esd_flux2_klein.py --erase_concept 'car' --train_method 'esd-x' --negative_guidance 2训练完成的权重通过 utils/esd_checkpoint.py 保存为带元数据的.safetensors文件,加载时会自动识别目标是unet还是transformer,SD / SDXL / FLUX 通用。
验证擦除效果:生成图片对比
训练完成后,直接用官方推理笔记本体验效果:
- notebooks/esd_inference_sd.ipynb:SD 1.x 推理演示
- notebooks/esd_inference_sdxl.ipynb:SDXL 推理
- notebooks/esd_inference_flux.ipynb:FLUX 推理
- notebooks/esd_inference_flux2_klein.ipynb:FLUX.2 Klein 推理
如果想批量出图做量化评估,用官方脚本 evalscripts/generate-images.py,它会自动把 ESD 权重注入到对应的模型组件中:
python evalscripts/generate-images.py \ --base_model 'stabilityai/stable-diffusion-xl-base-1.0' \ --esd_path 'esd-models/sd/esd-car-esdx.safetensors' \ --num_samples 1 \ --prompts_path 'data/coco_30k.csv' \ --num_inference_steps 20 \ --guidance_scale 7评估提示词可直接使用 data/ 目录下的数据集,比如coco_30k.csv(通用物体)、artwork_prompts.csv(艺术风格)、unsafe-prompts4703.csv(不雅内容)。
常见问题速查
Q:擦除后其他内容会变差吗?会轻微影响整体效果,建议用esd-x这种针对性更强的方式,并用esd-x-strict保证其他概念稳定。
Q:显存不够怎么办?训练入口支持--gradient_checkpointing与--allow_tf32,能显著降低显存占用。
Q:生成的模型文件在哪?默认保存在esd-models/目录,SD / SDXL / FLUX 各有独立子目录。
Q:有量化的擦除效果数据吗?项目提供了 nudity_bar.png 这类实验对比图,展示 ESD 相比 SLD、SD 2.0/2.1 在裸露部位减少上的显著优势,可用于撰写评测报告。
小结
从"模型里删掉汽车"出发,我们完整走通了Erasing Concepts from Diffusion Models的安装、训练、推理与评估全流程。无论是隐私保护、版权规避还是内容安全,这个开源项目都给出了轻量、快速、可复现的解法——只需要一条命令,就能让 AI 绘画"忘记"你想让它忘掉的东西。
【免费下载链接】erasingErasing Concepts from Diffusion Models项目地址: https://gitcode.com/gh_mirrors/er/erasing
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考