# DragNoise DragNoise 模型,利用扩散模型进行基于点的交互式图像编辑,强大而快速。 ## 论文 `Drag Your Noise: Interactive Point-based Editing via Diffusion Semantic Propagation` - https://arxiv.org/abs/2404.01050 - CVPR 2024 ## 模型结构 DragNoise利用扩散模型进行基于点的交互式图像编辑,算法整体思路沿着 DragDiffusion 算法:
DragNoise
## 算法原理 DragNoise 算法整体思路沿着 DragDiffusion 算法,与此不同的是针对扩散模型中的 “middle-block replacement” 的操作进行探索。该操作从某个去噪时间步开始,将不同层的特征复制到所有后续 timestep 的对应层。通过观察 DDIM inversion 重建图像的效果,探索扩散模型在何时以及何处学习到何种层次的语义信息。 通过实验发现,bottleneck 特征是一种最优扩散语义表示,适合于高效编辑。由于它可以在早期 timestep 中有效地被编辑,因此操纵 bottleneck 特征可以平滑地传播到后面的去噪步骤,从而确保结果图像扩散语义的完整性。此外,由于优化 bottleneck 的路径短,有效地避免了梯度消失问题。 ## 环境配置 ``` mv dragnoise_pytorch dragnoise # 去框架名后缀 # docker 的 -v 路径、docker_name 和 imageID 根据实际情况修改 # pip 安装时如果出现下载慢可以尝试别的镜像源 ``` ### Docker(方法一) ``` docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-ubuntu20.04-dtk24.04.2-py3.10 # 本镜像imageID为:2f1f619d0182 docker run -it -v /path/your_code_data/:/path/your_code_data/ -v /opt/hyhal/:/opt/hyhal/:ro --shm-size=16G --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --network=host --name docker_name imageID bash cd /your_code_path/dragnoise pip install -r requirements.txt ``` ### Dockerfile(方法二) ``` cd /your_code_path/dragnoise/docker docker build --no-cache -t codestral:latest . docker run -it -v /path/your_code_data/:/path/your_code_data/ -v /opt/hyhal/:/opt/hyhal/:ro --shm-size=16G --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --network=host --name docker_name imageID bash cd /your_code_path/dragnoise pip install -r requirements.txt ``` ### Anaconda(方法三) 关于本项目DCU显卡所需的特殊深度学习库可从[光合](https://developer.sourcefind.cn/tool/)开发者社区下载安装。 ``` DTK驱动: dtk24.04.2 python: python3.10 pytorch: 2.1.0 ``` `Tips:以上DTK驱动、python、pytorch等DCU相关工具版本需要严格一一对应` 其它非深度学习库参照requirements.txt安装: ``` pip install -r requirements.txt ``` ## 数据集 测试数据集 [DragBench](https://github.com/Yujun-Shi/DragDiffusion/releases/download/v0.1.1/DragBench.zip)。\ 下载后放在 ./drag_bench_evaluation/drag_bench_data 并解压,文件构成:
DragBench
--- animals
------ JH_2023-09-14-1820-16
------ JH_2023-09-14-1821-23
------ JH_2023-09-14-1821-58
------ ...
--- art_work
--- building_city_view
--- ...
--- other_objects

## 训练 ``` # LoRA微调 python run_lora_training.py # 训练drag扩散模型,并输出结果 python run_drag_diffusion.py # 如果出现huggingface访问不通,请执行 `export HF_ENDPOINT=https://hf-mirror.com` ``` 亦或者webui界面。 ## 推理 可视化webui推理: ``` python drag_ui.py --listen # 如果出现huggingface访问不通,请执行 `export HF_ENDPOINT=https://hf-mirror.com` ```
webui界面
1、上传图片;\ 2、输入提示;\ 3、LoRA训练;\ 4、通过鼠标选择要编辑的区域;\ 5、通过鼠标标记点位;\ 6、运行。\ ps:Drag以及LoRA的一些参数自行视情况修改。 ## result
输入
推理结果
### 精度 测试集 `DragBench`,如上所述下载并解压好。 ``` python run_lora_training.py python run_drag_diffusion.py python run_eval_similarity.py python run_eval_point_matching.py # ps:上述脚本的一些文件路径自行根据情况修改 ``` | 加速卡K100_AI | 1-lpips ↑ | clip sim ↑| mean distance ↓ | | :-----| :----- | :---- | :---- | | paper | 0.894 | 0.971 | 33.404 | | 优化后 | 0.885 | 0.967 | 30.206 | ps:优化两点 1)lora训练部分的rank选择;2)drag部分采用了多层融合。 ## 应用场景 ### 算法类别 `AIGC` ### 热点应用行业 `零售,制造,电商,医疗,教育` ## 源码仓库及问题反馈 - https://developer.sourcefind.cn/codes/modelzoo/dragnoise_pytorch ## 参考资料 - https://github.com/haofengl/DragNoise