当前位置: 首页 > news >正文

Training-Free Consistent Text-to-Image Generation # 论文阅读

URL

https://arxiv.org/pdf/2402.03286

TL;DR

2024 年 2 月 nvidia 的文章。提出了一种不需要任何额外训练的主体保持方法,可以一次生成的 batch 中,通过多个 prompt 生成对应的多张图片,这些图片都可以拥有一个主体。
本文提出的方法通过 subject-driven shared attention block来保证多图间的主体一致性,另外通过一些 trick 保证生成图片分布的多样性和 layout 的多样性。本方法可以保证不需要任何额外训练或 finetune 的情况下,完成主体保持的人物,同时相比其他需要训练的方法有更好的文本对齐能力
在这里插入图片描述

Model & Method

作者提出,已有的主体保持方法有很明显的几个缺陷:

  • 强制模型在进行 posteriori 的主体保持,即强行制定一张 target 图片送给模型来进行生图。比如通过 encoder + cross attention、reference net 来进行。
  • 提供参考图的方法破坏了模型本身的能力,让生成图片的分布远离了训练数据的分布。
    本文主要通过对 self-attn 的操作,保证图片之间共享知识,来实现无训练版的主体保持。ppl如下图
    在这里插入图片描述

Unet 中主要的改动是:

  • self-attn 替换成了 subject driven self-attn(SDSA)。除了当前 prompt 对应的 attn map 之外,还会附上其他 prompt 对应的 attn map,其他 prompt 的 feature 会用 cross attn 提取的 mask 保证只保留主体信息。这样 self-attn 就可以在所有的 prompt 的 feature 之间共享特征,实现了主体保持同时还能保证不同 prompt 之间的编辑性。
  • 增加了一个 feature injection(FI)模块。文章提到仅使用 SDSA 无法保证细节的一致性比如眼睛(等 SD 常被诟病的细节),于是在 SDSA 之后,对单个 feature 以及对应的其他组 feature,分别计算一次相似度,选取与当前 feature 最相似的另一组 feature 做一次 blend 计算,即融合两张图片之间的特征,来保证细节的相似度。因为是强化细节特征,所以在 patch 维度而不是整图维度。具体的计算方法是先对 feature 做一次 DIFT 特征匹配,然后与 batch 内其他的 feature 量量计算 cos 相似度。
    在这里插入图片描述
    在这里插入图片描述

另外文章提到即使在 self-attn 之间共享的只是 mask 提取到的主体,但是仍然会出现生成图片分布过于一致的问题。作者给出的解法:

  • 第一个 trick 是使用早期结构信息比较丰富的原始特征,融合到后续的特征中去这样可以保证分布不受后面特征注入的影响

在这里插入图片描述* 在 SDSA 中增加 dropout 机制。

Dataset & Results

部分结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Thought

  • 思路很棒,和 StoryDiffusion 一样都是在 self-attn 上做文章。
  • Feature injection 操作感觉挺棒的,猜测是比较关键的技术,可以尝试一下细节保持的能力。(在 reference net 或者其他带注入的方法里面也许可以用到,这是之前一直想要的技术)
http://www.lryc.cn/news/352470.html

相关文章:

  • Spring 中常用的手动装载 bean 方法
  • 如何合理设置Java线程池大小
  • python3 pandas
  • 【B站 heima】小兔鲜Vue3 项目学习笔记Day02
  • RedisTemplate 实现基于 Value 操作的简易锁机制
  • 其它高阶数据结构⑦_Skiplist跳表_概念+实现+对比
  • 力扣230. 二叉搜索树中第K小的元素
  • Linux_应用篇(07) 系统信息与系统资源
  • 基于Vue的验证码实现
  • P4【力扣217,389,496】【数据结构】【哈希表】C++版
  • PE文件(六)新增节-添加代码作业
  • ICRA 2024: NVIDIA 联合多伦多大学、加州大学伯克利分校、苏黎世联邦理工学院等研究人员开发了精细操作的手术机器人
  • 探索Go语言的原子操作秘籍:sync/atomic.Value全解析
  • 【java深入学习第3章】利用 Spring Boot 和 Screw 快速生成数据库设计文档
  • 继“三级淋巴结”之后,再看看“单细胞”如何与AI结合【医学AI|顶刊速递|05-25】
  • [图解]产品经理创新之阿布思考法
  • Proteus仿真小技巧(隔空连线)
  • 抖音极速版:抖音轻量精简版本,新人享大福利
  • leetCode-hot100-数组专题之双指针
  • 完成商品SPU管理页面
  • Ansible实战YAML语言完成apache的部署,配置,启动全过程
  • 深入探索微软Edge:新一代浏览器的演进与创新
  • k8s使用Volcano调度gpu
  • x的平方根-力扣
  • hot100 -- 回溯(上)
  • 5.24数据库作业
  • go-zero 实战(5)
  • Python异常处理:打造你的代码防弹衣!
  • Linux——进程与线程
  • ping 探测网段哪些地址被用