Weights2wights Interpreting the Weight Space of Customized Diffusion Models

news2024/9/17 8:22:06

Weights2wights: Interpreting the Weight Space of Customized Diffusion Models

导语

可控生成是图像生成领域的一个重要方向。从最基础的文本条件生成,到 ControlNet、IP-Adapter 等图像条件生成,再到各种概念定制化生成,扩散模型的可控生成技术越来越丰富。

概念定制化生成(Concept Customized Generation)是指给定一个特定的个体(比如我家的狗,而不是别的狗),然后要求模型结合其他条件(如文本 prompt)生成出该特定个体的图片。最常见的就是固定某个人物,生成出该人物的各种图片。概念定制化生成的方法也已经有很多,有经典的 Textual Inversion、DreamBooth、LoRA,也有最新的 ConsiStory、OMG 等方法,本专栏已有多篇详细的介绍。最常见的思路是:给定目标概念的 3-5 张图片作为训练集,在文生图模型上进行微调,并绑定到特定的触发词,在生成时使用触发词引导模型生成目标概念。

这种方法有不错的定制化生成效果,但是用起来比较麻烦,对于每个目标概念,首先收集需要多张目标概念,还要进行模型训练。更理想的方案是,让模型学习到概念定制化生成的能力,在推理生成时,使用单张目标概念图输入模型作为参考,模型能够直接生成目标概念。这相当于是实现了 zeroshot 的概念定制化生成。

本文介绍 UC Berkeley、Snap 和 Stanford University 联合提出的 Weights2weights 方法。使用一系列训练好的 DreamBooth LoRA 权重作为训练集,建模出了权重空间的低维流形子空间,称为 weights2weights 空间(w2w space)。基于这个 w2w 空间,作者提出了三种应用方式:Sampling、Inversion 和 Editing。以下将详细介绍。

在这里插入图片描述

方法

基础介绍

本文提出的 Weights2weights 方法是基于三个紧密相关的基础方法:LDM、DreamBooth、LoRA。我们首先简要介绍这三个基础方法。

LDM

LDM(Latent Diffusion Model)通过引入 VAE 将扩散模型做在了隐空间,从而降低训练和推理成本。并通过交叉注意力将文本 prompt 条件注入到去噪扩散模型中。LDM 的训练目标可写为如下条件去噪的形式:
E x , c , ϵ , t [ w t ∣ ∣ ϵ − ϵ θ ( x t , c , t ) ∣ ∣ 2 2 ] \mathbb{E}_{\mathbf{x},\mathbf{c},\epsilon,t}[w_t||\epsilon-\epsilon_\theta(\mathbf{x}_t,\mathbf{c},t)||_2^2] Ex,c,ϵ,t[wt∣∣ϵϵθ(xt,c,t)22]
其中 ϵ θ \epsilon_\theta ϵθ 就是去噪 UNet, c \mathbf{c} c 是文本条件 embedding, w t w_t wt 是关于时间步 t t t 的加权函数。

DreamBooth

DreamBooth 是概念定制化生成的经典之作,其创新点有二:一是使用词表中无意义的低频词作为触发词(如 sks、mnsd),二是提出了 prior preservation loss,引入原模型生成的目标概念同类别其他图像到训练数据中,作为一个正则项,避免模型过拟合到目标概念上。DreamBooth 在本专栏已有介绍。其目标函数可写为以下两项:
E x , c , ϵ , t [ w t ∣ ∣ ϵ − ϵ θ ( x t , c , t ) ∣ ∣ 2 2 + λ w t ′ ∣ ∣ ϵ ′ − ϵ θ ( x t ′ , c ′ , t ) ∣ ∣ 2 2 ] \mathbb{E}_{\mathbf{x},\mathbf{c},\epsilon,t}[w_t||\epsilon-\epsilon_\theta(\mathbf{x}_t,\mathbf{c},t)||_2^2+\lambda w_t'||\epsilon'-\epsilon_\theta(\mathbf{x}_t',\mathbf{c}',t)||_2^2] Ex,c,ϵ,t[wt∣∣ϵϵθ(xt,c,t)22+λwt∣∣ϵϵθ(xt,c,t)22]
其中第一项就是标准的 LDM 损失,第二项是使用原模型生成的目标概念同类别其他图像 x ′ \mathbf{x}' x 和类别词 c ′ \mathbf{c}' c 的 ppl 损失。

LoRA

DreamBooth 原文的训练方式是对整个模型进行全量微调,但是这样训练成本太高,并且参数空间太大。社区一般训练一个 LoRA 进行高效微调。LoRA(Low Rank Adaption)是一种更新低秩参数的高效微调方法。具体来说,原模型有参数矩阵 W ∈ R m × n W\in\mathbb{R}^{m\times n} WRm×n,LoRA 更新的是 Δ W = B A \Delta W=BA ΔW=BA,其中 B ∈ R m × r , A ∈ R r × n , r < < min ( m , n ) B\in \mathbb{R}^{m\times r},A\in\mathbb{R}^{r\times n},r<<\text{min}(m,n) BRm×r,ARr×n,r<<min(m,n) 是分解的低秩矩阵。训练完成后,低质 LoRA 权重可以直接融合到模型中 W ′ = W + α W W'=W+\alpha W W=W+αW,其中 α ∈ R \alpha\in\mathbb{R} αR 是加权系数。

构建 w2w 权重流形

我们的目标是建模 w2w 空间,从而让模型具有 zeroshot 概念定制化生成的能力。

首先要构建数据集。不同于其他模型,w2w 的数据集不是图片和文本,而是模型权重。具体来说,作者使用 DreamBooth 方法对 LDM 进行了概念定制化微调,训练了 N N N 个概念定制化模型。为了降低参数空间的维度,这里使用了 LoRA 方法进行微调训练。训练完成后,将 LoRA 权重矩阵拉直,就得到了 N N N d d d 维的参数向量 θ i ∈ R d ,    i = 1 , … , N \theta_i\in\mathbb{R}^d,\ \ i=1,\dots,N θiRd,  i=1,,N。这样我们就得到了模型权重数据集 D = { θ 1 , θ 2 , … , θ N } \mathcal{D}=\{\theta_1,\theta_2,\dots,\theta_N\} D={θ1,θ2,,θN}

然后,我们要建模权重空间的流行子空间。假设我们的权重参数 θ i ∈ R d \theta_i\in\mathbb{R}^d θiRd 分布在一个低维流形上,并且该流形是 d d d 维权重空间一个子集。之前已经有工作发现,高维的概念可以被编码到表征的线性子空间,我们将这个流形建模为一个 m m m ( m < d m<d m<d) 维线性子空间,称之为 w2w 空间。我们使用基向量 w = { w 1 , … , w m } ,   w i ∈ R d \mathbf{w}=\{w_1,\dots,w_m\},\ w_i\in\mathbb{R}^d w={w1,,wm}, wiRd 的线性组合来表示这个子空间中的点。实际中,作者对 N N N 个权重采用了 PCA 进行降维,保留前 m m m 个主要分量,来得到这个 m m m 个基向量。

在这里插入图片描述

Sampling、Editing、Inversion

基于构建好的 w2w 空间,作者尝试了三种应用方式,分别是 Sampling、Editing 和 Inversion。

在这里插入图片描述

Sampling

首先,我们可以对这个空间进行采样。空间由训练好的概念定制化生成 LoRA 权重组合而成,其采样出的新的权重向量可以定制化生成一个新的概念。具体来说,我们可以采样出一组系数 { β 1 , … , β m } \{\beta_1,\dots,\beta_m\} {β1,,βm} 来基于基向量组表示一个概念定制化 LoRA 权重,其中 β k \beta_k βk 是从均值为 μ k \mu_k μk,标准差为 σ k \sigma_k σk 的正态分布中采样出来的。这里的 μ k , σ k \mu_k,\sigma_k μk,σk 是在所有训练模型的第 k k k 个 PCA 主要分量上计算出来的。

笔者自己在官方 demo 上 sample 权重出的图中的人脸 ID 不是很一致呢

Editing

与 GAN Latent Inversion 类似的,我们可以找到一个方向 n ∈ R d \mathbf{n}\in\mathbb{R}^d nRd,来定义一个将嵌入在模型权重中的某种二元属性(如男/女,老/幼)分隔开来的超平面。这里假设模型编码的概念属性二元标签是已有的。我们就可以使用模型权重作为数据,基于这些标签,训练线性分类器,强加权重空间中的分离超平面。给定一个由权重 θ \theta θ 参数化的概念,我们可以通过沿着方向 n \mathbf{n} n 行进来操作单一属性,该方向与分离超平面正交: θ edit = θ + α n \theta_\text{edit}=\theta+\alpha\mathbf{n} θedit=θ+αn

Inversion

传统的生成模型 Inversion 是指给定一张图片,找到一个对应的 latent 向量,将其输入到模型中可以重构出原始图片。这相当于在学习到的数据流形上找到输入的映射。有了 w2w 空间,我们建模出了一个数据流形,它是模型权重而不是图像。借鉴隐层优化方法的做法,作者这里提出了一种基于梯度的 inversion 方法,将单个概念从图像中 invert 到我们构建的空间。给定一张图片 x \mathbf{x} x,有受限去噪目标:
max θ E x , c , ϵ , t [ w t ∣ ∣ ϵ − ϵ θ ( x t , c , t ) ∣ ∣ 2 2 ] ,    s.t.  θ ∈ w 2 w \text{max}_\theta\mathbb{E}_{\mathbf{x},\mathbf{c},\epsilon,t}[w_t||\epsilon-\epsilon_\theta(\mathbf{x}_t,\mathbf{c},t)||_2^2],\ \ \ \text{s.t.}\ \theta\in w2w maxθEx,c,ϵ,t[wt∣∣ϵϵθ(xt,c,t)22],   s.t. θw2w
我们通过优化一组基向量系数 { β 1 , β 2 , … , β m } \{\beta_1,\beta_2,\dots,\beta_m\} {β1,β2,,βm},而不是权重本身,来将模型权重限制在 w2w 空间内。这里就需要再用 DreamBooth 中的 ppl 损失来作为正则了,因为 w2w 空间本就是有 DreamBooth LoRA 的权重构建出来的,已经继承了泛化能力。

总结

不同于 DreamBooth、Textual Inversion 对每个新的概念都要进行训练,weights2weights 通过构建 w2w 空间,具有了概念定制化生成的元能力,相当于可以进行 zeroshot 的概念定制化生成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1961134.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

InternLM Git 基础知识

提交一份自我介绍。 创建并提交一个项目。

采用GDAL批量波段运算计算植被指数0基础教程

采用GDAL批量波段运算计算植被指数0基础教程 1. 引言 在传统的遥感数据处理方法中&#xff0c;通常使用ArcGis或ENVI软件进行波段运算。然而&#xff0c;这些软件在处理大量数据时往往效率低下。有没有一种方法可以批量进行波段运算&#xff0c;一下子计算几十个植被指数&…

将项目部署到docker容器上

通过docker部署前后端项目 前置条件 需要在docker中拉去jdk镜像、nginx镜像 docker pull openjdk:17 #拉取openjdk17镜像 docker pull nginx #拉取nginx镜像部署后端 1.打包后端项目 点击maven插件下面的Lifecycle的package 对后端项目进行打包 等待打包完成即可 2.将打…

【全志H616开发】Linux的热拔插UDEV机制

文章目录 udev简介工作原理Udev 配置文件和规则示例总结&#xff1a; udev简介 Udev 是 Linux 系统中设备管理的一部分&#xff0c;它负责管理动态设备节点并处理设备的热插拔。Udev 提供了一种在用户空间管理设备节点的机制&#xff0c;可以在设备插入或移除时自动执行相应的…

2024.7.30问题合集

2024.7.30问题合集 1.adb调试出现5037端口被占用的情况2.更改ip地址时出现以下问题3.RV1126 ip配置问题 1.adb调试出现5037端口被占用的情况 问题&#xff1a;5037端口被占用的情况 解决方案&#xff1a;将adb文件下的adb.exe和AdbWinApi.dll两个文件复制到C:\Windows\SysWOW6…

红外热成像仪的功能应用_鼎跃安全

红外热成像仪利用红外探测器接收被测目标物体发射的红外辐射能量&#xff1b;通过接收到红外辐射转化为电信号&#xff0c;将这些信号放大转化后&#xff0c;通过不同的颜色代表不同温度&#xff0c;从而直观的在电子屏显示出来&#xff0c;可以清晰的观察到物体的热分布。 热成…

flex/bison结合使用解析配置文件

flex是gnu linux下的语法分析器程序(lex则是Unix下的语法分析器)&#xff0c;它将输入文件(yyin)的内容去匹配对应的匹配规则表达式&#xff0c;并返回一个token。注意&#xff0c;flex的copyright并不是gnu的。 bison是gnu linux下的yacc(Yet Another Compiler Compiler)&…

【计算机毕设论文】基于SpringBoot的成绩管理系统

&#x1f497;博主介绍&#xff1a;✌全平台粉丝5W,高级大厂开发程序员&#x1f603;&#xff0c;博客之星、掘金/知乎/华为云/阿里云等平台优质作者。 【源码获取】关注并且私信我 感兴趣的可以先收藏起来&#xff0c;同学门有不懂的毕设选题&#xff0c;项目以及论文编写等相…

3.5.4、查找和排序算法-排序算法下

快速排序 快速排序的基本思想是&#xff1a;通过一趟排序将待排的序列划分为独立的两个部分&#xff0c;其中一部分序列的元素均不大于另一部分记录的关键字&#xff0c;然后再分别对这两部分序列继续进行快速排序&#xff0c;以达到整个序列有序。 大致步骤如下&#xff1a;…

2024西安铁一中集训DAY27 ---- 模拟赛((bfs,dp) + 整体二分 + 线段树合并 + (扫描线 + 线段树))

文章目录 前言时间安排及成绩题解A. 倒水&#xff08;bfs dp&#xff09;B. 让他们连通&#xff08;整体二分 按秩合并并查集 / kruskal重构树&#xff09;C. 通信网络&#xff08;线段树合并 二分&#xff09;D. 3SUM&#xff08;扫描线 线段树&#xff09; 前言 T1没做出…

6万字,让你轻松上手的大模型 LangChain 框架

本文为我学习 LangChain 时对官方文档以及一系列资料进行一些总结&#xff5e;覆盖对Langchain的核心六大模块的理解与核心使用方法&#xff0c;全文篇幅较长&#xff0c;共计50000字&#xff0c;可先码住辅助用于学习Langchain。** 一、Langchain是什么&#xff1f; 如今各类…

FPGA实现LCD12864控制

目录 注意&#xff01; a) 本工程采用野火征途PRO开发板&#xff0c;外接LCD12864部件进行测试。 b) 有偿提供代码&#xff01;&#xff01;&#xff01;可以定制功能&#xff01;&#xff01;&#xff01;有需要私信&#xff01;&#xff01;&#xff01; c) 本文测试采用…

操作系统02

文章目录 Linux 内核 vs Windows 内核内核Linux 的设计MultiTaskSMPELFMonolithic Kernel **Windows 设计** 内存管理虚拟内存内存分段内存分页多级页表TLB 段页式内存管理Linux 内存布局内存分配的过程是怎样的&#xff1f;哪些内存可以被回收&#xff1f;回收内存带来的性能影…

中国RoHS新增4项邻苯二甲酸酯管控,电子电气产品GB/T 26572-2011测试

中国RoHS 新增4项邻苯类物质 01 资讯内容 2024年6月29日&#xff0c;国家市场监督管理总局&#xff08;国家标准化管理委员会&#xff09;发布了2024年第14号中国国家标准公告&#xff0c;批准了109项国家标准和4项国家标准修改单。 其中&#xff0c;中国RoHS配套的标准GB/T 2…

人工智能和机器学习2 (复旦大学计算机科学与技术实践工作站)python调用百度AI、获取token,并利用opencv绘制分析图,做简单判断

前言 在现代科技的推动下&#xff0c;人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;逐渐成为各行各业的重要工具。百度AI开放平台作为全球领先的人工智能服务平台&#xff0c;为开发者提供了包括语音、图像、自然语言处理&#xff08;NLP&#xff…

Python常用内置库介绍

Python作为一门强大且易学的编程语言&#xff0c;内置了许多功能强大的库&#xff0c;让开发者能够更加便捷地完成各种任务。本文中&#xff0c;我将详细介绍Python中常用的内置库。 math&#xff1a;提供数学函数&#xff0c;如三角函数、对数函数等。 示例&#xff1a;计算平…

Pycharm conda 虚拟环境添加失败---windows

版本&#xff1a; conda&#xff1a;23.5.2 pycharm:2023.1.3 解决方案&#xff1a; 已验证&#xff1a; 使用系统解释器选择python.exe进行本地添加&#xff08;ps:该方式不会显示conda名称&#xff09; conda路径使用conda info查询 还有一个是在查找解决方法的时候看到比…

05-ArcGIS For JavaScript-RenderNode后处理效果

05-ArcGIS For JavaScript-RenderNode后处理效果 综述代码解析代码实现颜色混合完整代码结果高亮处理完整代码结果 结语 综述 ArcGIS For JavaScript 4.9版本提供了很多优秀的功能&#xff0c;其中提供了RenderNode类&#xff0c;既可以支持第三方渲染引擎的植入&#xff0c;例…

PowerShell报错 about_Execution_Policies 解决方法

在用express创建项目中显示项目创建失败&#xff0c;报错如图所示&#xff0c;显示无法加载文件&#xff0c;按照提示地址https:/go.microsoft.com/fwlink/?LinkID135170 中的 about_Execution_Policies看到页面显示是PowerShell执行策略的问题。有问题评论区留言&#xff0c;…

前端构建工具Vite

前端主流框架Vue大家应该都耳熟能详&#xff0c;很多的公司和项目都在使用&#xff0c;以前前端构建工具用的比较多的是webpack&#xff0c;后面渐渐地出现了Vite&#xff0c;它受到大家的喜爱和使用&#xff0c;那大家是否也很想知道它的由来以及优势&#xff0c;为什么越来越…