DreamMatcher: Appearance Matching Self-Attentionfor Semantically-Consistent Text-to-Image Personali

 代码地址:Issues · KU-CVLAB/DreamMatcher (github.com)

一、前言

        要想复现这个项目,需要显存至少为16GB,在复现前,请自行安装好pytroch环境。

二、环境配置

  创建虚拟环境并下载依赖包:

conda env create -f environment.yml
conda activate dreammatcher
pip install -r requirements.txt

cd diffusers
pip install -e .

这里用的diffusers==0.20.0.dev0版 

三、运行前的准备

1.准备预训练的个性化模型

论文主要用了三个Baseline,分别是Textual InversionDreamBooth 和 CustomDiffusion 的预训练个性化模型。并提供了对应的预训练模型,我们可以从作者给的链接中把它们下载下来:DreamMatcher_baselines - Google 云端硬盘

这里我只下载了CustomDiffusion的个性化模型,后面也主要以Customdiffusion来讲,在根目录下创建一个文件夹concept_models,我们将下载好的模型放进去。

2.准备Stable Diffusion基础模型

由于一些问题,暂时不能直接从Hugging Face上下载Stable Diffusion模型,所以我们需要提取下载好Stable Diffusion模型,地址:CompVis/stable-diffusion-v1-4 · Hugging Face

3.更改模型路径

由于我们是从本地加载的Stable Diffusion,所以需要更改模型加载路径为本地路径,具体的,在run_dreammatcher.py中修改,由于我这里只演示CustomDiffusion的实现,所以只更改了下图所展示的代码。

四、运行

 运行下面的命令即可,--models是基于哪个baseline实现的,这里我们选择的custom_diffusion,--num_device是GPU的卡号,--mode主要有两种:normal、challenging,--result_dir是结果的保存路径。

python run_dreammatcher.py --models "custom_diffusion" --result_dir "./results/custom_diffusion/test" --num_samples 8 --num_device 0 --mode "normal"

如果不出意外的话,就可以开始跑啦!由于它这里是对16个对象在多个提示下进行的个性化图像生成,所以花费的时间也比较长,我用的是一张RTX 3090跑的,大概跑了两天吧。

最后的结果默认是放在results目录下,一共包含十六种:

e.g.

"ref_prompt": "a photo of a <new1> alarm_clock"

"gen_prompt": "a <new1> alarm_clock in the snow"

custom diffuison的生成效果:

 DreamMatcher的生效果:

五、评估代码 

评估部分只需要按照作者给的实列跑就行,只需要改一下配置即可: 

  python run_dreammatcher.py --models "custom_diffusion" --result_dir "./results/custom_diffusion/test" --num_samples 8 --num_device 1 --mode "normal"

六、论文中实验方法对比部分的一些记录

 主要是记录我在复现DreamMatcherh实验部分也就是和其他几个方法做对比时遇到的一些问题。主要包括以下方法:MasaCtrl、FreeU.

1.FreeU

其实一开始复现FreeU的时候感觉不是很难,没遇到什么大问题。但是在DreamMatcher上做对比时,需要用到的是个性化模型,也就是DreamBooth这些,然后我一开始就是直接把DreamMatcher提供的预训练模型给放了上去,但是我发现出现了问题。大致的错误说是什么加载模型的时候丢失了一些参数什么的。

嗯...实际上这里就是扩散器版本的冲突,DreamMatcher它用的是diffusers==0.20.0.dev。然后它提供的预训练模型实我看了一下好像还是0.21.0训练的DreamBooth。但是FreeU给的示例项目它用的是diffusers==0.16.1,版本不兼容了。其实这就是问题的所在。然后后面我想着我要不用diffusers==0.16.1的版本,重新训练一个DreamBooth。然后我也这么做了,但是事实是因为毕竟是两个模型,它生成的效果还是不一致的。所以这种方法并不可取。

最后的话,我就是想了一下直接把FreeU加到DreamMatcher中baseline运行的部分中来,毕竟FreeU本质上也是一个优化方式嘛! 我就直接把FreeU的代码直接改到了DreamMatcher里面来。

实际上还是很好操作的,我们只需要把free_lunch_utils.py这个文件加到DreamMatcher中去,然后在跑baseline的那段代码里面加进去就好了。

2.MasaCtrl

MasaCtrl他本质上是用于做一致的图像编辑的,我一开始花了很多功夫去把它调成适用于个性化生成。结果最后我发现,很难达到我想要的效果。其实最简单的方法就是在DreamMatcher上进行修改。MasaCtrl的本质不就是键值替换的时候加上一层掩码嘛。我们只需要在DreamMatcher的基础上改一些代码就行了!

确实这两个方法的效果相对而言没有DreamMatcher来的真实哈。

  • 27
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是浮夸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值