SVDiff: Compact Parameter Space for Diffusion Fine-Tuning——【论文笔记】

本文发表于ICCV 2023

论文地址:ICCV 2023 Open Access Repository (thecvf.com) 

官方代码:mkshing/svdiff-pytorch: Implementation of "SVDiff: Compact Parameter Space for Diffusion Fine-Tuning" (github.com)

一、Introduction

        最近几年,基于扩散的文本到图像生成模型取得了快速发展,使得简单的文本提示可以生成高质量的图像。这些模型具有现实主义和多样性,引发了研究人员对于图像编辑的兴趣。一些最近的作品如Textual-Inversion、DreamBooth和Custom Diffusion进一步发掘了大规模文本到图像扩散模型的潜力。这些方法通过微调预训练模型的参数,实现了模型适应特定任务或个人用户偏好。然而,微调大规模文本到图像扩散模型仍然面临一些限制。一个限制是参数空间过大可能导致过拟合或泛化能力下降。另一个挑战是学习多个个性化概念的困难,尤其当它们属于相似类别时。

        为了解决这些问题,作者从GAN文献中得到启发,提出了一种紧凑而有效的参数空间,称为谱移。谱移通过仅微调模型权重矩阵的奇异值,减小了参数空间的规模,从而有助于缓解过拟合和语言漂移问题。此外,作者还提出了一种数据增强技术,即剪切-混合-分解方法,用于增强模型学习多个个性化概念的能力。通过这些方法,作者展示了基于文本的单图像编辑框架的应用,并为进一步研究提供了有前景的起点。

        总而言之,这项工作的主要贡献是提出了一个紧凑而有效的参数空间,用于微调大规模文本到图像扩散模型,并提出了一种数据增强技术,为图像个性化和定制开辟了新的途径。

二、Related Work

        这部分主要介绍了基于扩散模型的文本生成图像、个性化图像生成、图像编辑相关的知识,并引入论文所提出的方法SVDiff。

        基于扩散的文本到图像生成模型通过微调文本嵌入、全权重、交叉注意力层或适配器等方式,使用少量个性化图片进行了模型的个性化调整。其他研究也探索了用于快速适应的无需训练的方法。在GAN领域,FSGAN引入了仅微调权重矩阵奇异值的概念,NaviGAN进一步通过无监督方法在这个紧凑参数空间中发现语义方向。我们的方法称为SVDiff,将这一概念引入到文本到图像扩散模型的微调中,并设计用于少样本迁移学习。LoRA是另一种类似的方法,探索了用于文本到图像扩散微调的低秩适配,而我们的SVDiff优化了权重矩阵的所有奇异值,从而得到了更小的模型检查点。类似的想法也在少样本分割中得到了探索。 除了文本到图像生成,扩散模型还显示出在语义编辑方面的巨大潜力。这些方法通常集中在通过优化空文本嵌入或过度拟合给定图像进行反演和重建。我们提出的方法SVDiff是基于DreamBooth的单图像编辑框架,展示了SVDiff在单图像编辑和减少过拟合方面的潜力。

三、Method

3.1 Preliminary

        这部分讲述了本文是基于Stable-Diffusion来实现的,然后介绍了FSGAN,FSGAN基于奇异值分解(SVD)技术,并提出了一种有效的方法来适应少数设置中的GAN。它利用奇异值分解来学习一个紧凑的更新,用于在GAN的参数空间中进行域自适应,作者就是从此汲取的灵感。

3.2. Compact Parameter Space for Diffusion Fine-tuning

论文的核心思想就是把FSGAN中的谱移概念移入扩散模型的参数空间中,所以,首先要对预训练扩散模型的权重矩阵执行奇异值分解(SVD),具体过程如下图:

对于这幅图,我的理解是这样的:

        a. Convolution:SVDiff操作在模型的中间层执行,Wtensor即模型的卷积层的权重矩阵。

        b. Matrix Multiplication:在模型的中间层中,卷积权重起到了关联记忆的作用,这意味着它能够捕捉输入数据中的某些关联模式或特征。

        c. 奇异值分解(SVD):这部分就是对权重矩阵进行奇异值分解。

        首先获得模型中间层的卷积权重矩阵Wtensor,然后对Wtensor进行重塑,将其转换为一个二维矩阵W,以便执行奇异值分解。然后对W进行奇异值分解,将W分解成三个矩阵的乘积:U、Σ 和 V^T。其中,U 和 V 是正交矩阵,Σ 是一个对角矩阵,其对角线上的元素称为奇异值。

        接下来,我们只微调奇异值,而不是整个权重矩阵。这样可以减少参数空间的大小,从而减少过拟合的风险,并提高模型的泛化能力。最后,我们将微调后的奇异值与原始的正交矩阵和对角矩阵相乘,得到新的权重矩阵。通过这种方式,SVDiff方法能够有效地优化模型的参数空间,提高模型的性能和效率。

        执行奇异值分解后,将变形后的权重矩阵与变形后的特征贴片相乘,实现了f_out = W*f_in的操作。这个操作的目的是利用奇异值分解后得到的新的权重矩阵来对输入特征贴片进行变换,从而获得更具有表征能力的特征表示。这种操作可以帮助模型学习到数据中的更复杂的模式和结构,从而提高模型的泛化能力和生成能力。通过奇异值分解和权重更新,SVDiff方法能够有效地优化模型的参数空间,提高模型的性能和效率。

3.3 Cut-Mix-Unmix for Multi-Subject Generation

        在使用StableDiffusion模型同时训练多个概念时,我们发现在一些困难的合成或相似类别的主题上,模型往往会在渲染图像时混合它们的风格。为了明确告诉模型不要混合个性化风格,提出了一种简单的技巧,称为Cut-Mix-Unmix。

        通过构建和呈现“正确”切割和混合的图像样本,我们指导模型进行风格分离。这个方法的主要原理就是:手动创建类似于CutMix的图像样本和相应的提示(例如“左边是一个[V1]的狗和右边是一个[V2]的雕塑”或者“左边是[V2]的雕塑和右边是一个[V1]的狗”)。先验损失样本以类似的方式生成。在训练时,Cut-Mix-Unmix数据增强被以预定义的概率应用(通常设为0.6)。这个概率没有设为1,因为这样做会让模型在区分主题时变得困难。在推断阶段,我们使用与训练时不同的提示,例如“一只坐在[V1]的狗旁边的[V2]的雕塑”。然而,如果模型过度拟合了Cut-Mix-Unmix样本,即使使用不同的提示,它可能仍会生成带有拼接伪影的样本。然后论文中提到,使用负面提示有时可以缓解这些伪影。

        由于微调后的模型中,狗的特殊标记往往在熊猫的区域上增加了关注度。为了强制两个主题之间的分离,我们在交叉注意力图的非对应区域上使用均方误差(MSE)。这个损失鼓励狗的特殊标记只关注狗,而熊猫的特殊标记只关注熊猫。这个扩展的结果显示出了明显减少的拼接伪影,这就是通过在交叉注意力图上加入“分离”正则化。

3.4. Single-Image Editing 

        针对单张图片的编辑,基于SVDiff方法,论文提出了一个编辑框架,在这个框架中,使用单图像编辑的方式来实现对图像的编辑。我们通过将图像和相应的文本对输入到一个扩散模型中,通过微调模型来实现所需的编辑。在推理时,通过修改提示来获得所需的编辑效果。

        为了减轻微调过程中的过拟合问题,使用频谱转移参数空间而不是完整的权重。对于不需要进行大量结构变化的编辑,使用DDIM反演来改善结果。对于需要较大结构变化的编辑,可以在去噪过程中注入更多的噪声。

四、Experiment 

        实验评估了SVDiff在各种任务上的作用,例如单/多受试者生成、单个图像编辑和消融。DDIM 采样器(η = 0)用于所有生成的样本。

        下图将SVDiff方法与当前几个流行方法在单个对象的个性化图像生成上进行比较的结果:

        下图是在多个对象的个性化图像生成上所做的比较,主要是看论文所提出的数据增强技术Cut-Mix-Unmix的效果,Full的意思是更新整个权重矩阵(SVD方法只需要更新奇异值矩阵即可,无需更新整个权重矩阵)。 

下图是利用论文所提的方法实现的图像编辑

 

接下来就是消融实验:

下表分析了微调UNet中的12个参数子集及其相应的模型大小,论文中提到:

(1)与优化关键和值投影相比,优化交叉注意(CA)层通常会更好地保留主题身份。(2)单独优化UNet的上、下或中间块不足以保持同一性,这就是为什么我们没有进一步隔离每个部分的子集。然而,看起来上块表现出最好的身份保护。(3)在维度方面,2D权重表现出最大的影响力,并提供比UNet-CA更好的身份保护。

        下图中,图(a)表示的是谱移的相关性,针对两个主题而言, 通过计算两个主题的光谱偏移的余弦相似度,并将所有层的相似度求平均后绘制。对角线显示了不同学习速率的两次运行之间的平均相似度。(光谱偏移的相关性是指在机器学习领域中,对于不同的数据集或主题,模型在每个层中学习到的光谱偏移之间的相似程度。光谱偏移是指在经过模型的每一层后,特征向量在空间中的位置发生的变化。)

        谱移相关性越高,表示不同主题在模型学习中共享更多的特征;相关性越低,表示不同主题在模型学习中学习到的特征差异性较大。

 

        上图中,图(b) 则是针对论文所提出的方法和其他方法在单个对象个性化图像生成上,针对文本相关性和图像相关性所做的图表,从图中可知,论文所提出的方法有着更好的表现。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Multiuser Communication Aided by Movable Antenna

文章目录 II. SYSTEM MODEL AND PROBLEM FORMULATIONA. 通道模型B. Problem Formulation III. PROPOSED SOLUTION II. SYSTEM MODEL AND PROBLEM FORMULATION 如图1所示,BS配置了尺寸为 N N 1 N 2 NN_{1} \times N_{2} NN1​N2​ 的均匀平面阵列(uni…

再谈Redis三种集群模式:主从模式、哨兵模式和Cluster模式

总结经验 redis主从:可实现高并发(读),典型部署方案:一主二从 redis哨兵:可实现高可用,典型部署方案:一主二从三哨兵 redis集群:可同时支持高可用(读与写)、高并发,典型部署方案:三主三从 一、概述 Redis 支持三种集群模式,分别为主从模式、哨兵模式和Cluster模式。…

logback日志配置

springboot默认使用logback 无需额外添加pom依赖 1.指定日志文件路径 当前项目路径 testlog文件夹下 linux会在项目jar包同级目录 <property name"log.path" value"./testlog" /> 如果是下面这样配置的话 window会保存在当前项目所在盘的home文件夹…

yo!这里是单例模式相关介绍

目录 前言 特殊类设计 只能在堆上创建对象的类 1.方法一&#xff08;构造函数下手&#xff09; 2.方法二&#xff08;析构函数下手&#xff09; 只能在栈上创建对象的类 单例模式 饿汉模式实现 懒汉模式实现 后记 前言 在面向找工作学习c的过程中&#xff0c;除了基本…

查看自己电脑是arm还是x64(x86);linux操作系统识别

1、查看自己电脑是arm还是x64&#xff08;x86&#xff09; linux 参考&#xff1a; https://liuweiqing.blog.csdn.net/article/details/131783851 uname -a如果输出是 x86_64&#xff0c;那么你的系统是 64 位的 x86 架构&#xff08;通常我们称之为 x64&#xff09;。如果…

【annie/lux 快速下载哔哩哔哩视频】全网最简单,只需要5步!!!

1.首先 现在annie更名为lux 官网地址&#xff1a;https://github.com/iawia002/lux/releases 2.进入官网之后如图所示 3.下载lux软件 4.下载lux 这里需要说明一下 如果不下载这个的话也可以下载视频 但是视频和音频是分开的&#xff0c;你的视频没有声音 5.下载视频

Hive 主要内容一览

Hive架构 用户接口&#xff1a;Client CLI&#xff08;command-line interface&#xff09;、JDBC/ODBC(jdbc访问hive) 元数据&#xff1a;Metastore 元数据包括&#xff1a;表名、表所属的数据库&#xff08;默认是default&#xff09;、表的拥有者、列/分区字段、表的类型&am…

面试150 位1的个数 位运算

Problem: 191. 位1的个数 文章目录 思路复杂度Code 思路 &#x1f468;‍&#x1f3eb; 参考 复杂度 Code public class Solution {// you need to treat n as an unsigned valuepublic int hammingWeight(int n){int res 0;while (n ! 0){res 1;n & n - 1;// 把最后…

Python(SQLite)executescript用法

SQLite 数据库模块的游标对象还包含了一个 executescript() 方法&#xff0c;这不是一个标准的 API 方法&#xff0c;这意味着在其他数据库 API 模块中可能没有这个方法。但是这个方法却很实用&#xff0c;它可以执行一段 SQL 脚本。 例如&#xff0c;如下程序使用 executescr…

Spring Cloud + Vue前后端分离-第16章 项目功能升级

源代码在GitHub - 629y/course: Spring Cloud Vue前后端分离-在线课程 Spring Cloud Vue前后端分离-第16章 项目功能升级 BUG修复与功能优化 16-1 已提交的代码讲解 1.将gateway中的路由配置改为IP&#xff0c;用lb://时&#xff0c;有时候会有延时&#xff0c;需要等一会…

【Qt5小项目】接金币小游戏

代码量在250行左右&#xff0c; 需要源码的可以私信我。

ElementUI Data:Table 表格

ElementUI安装与使用指南 Table 表格 点击下载learnelementuispringboot项目源码 效果图 el-table.vue&#xff08;Table表格&#xff09;页面效果图 项目里el-table.vue代码 <script> export default {name: el_table,data() {return {tableData: [{dat…

[office] 在Excel2010中设定某些单元格数据不参与排序的方法介绍 #其他#知识分享#笔记

在Excel2010中设定某些单元格数据不参与排序的方法介绍 在Excel中排序&#xff0c;相信大家都会了&#xff0c;直接将一组数据按照从小到大或者从大到小进行排序&#xff0c;但是&#xff0c;现在要求我们规定其中几组数据不进行排序&#xff0c;只排序其余的部分。又该如何操作…

【数据分享】1929-2023年全球站点的逐月降雪深度数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 之前我们分享过1929-2023年全球气象站点的逐月平均气温数据、逐月最高气温数据…

Linux 网络编程 + 笔记

协议&#xff1a;一组规则 分层模型结构&#xff1a; OSI七层模型&#xff1a;物理层、数据链路层、网络层、传输层、会话层、表示层、应用层TCP/IP 4层模型&#xff1a;链路层/网络接口层、网络层、传输层、应用层 应用层&#xff1a;http、ftp、nfs、ssh、telnet、传输层&am…

GPT3.5\GPT4系列计算完整prompt token数的官方方法

前言: ChatGPT如何计算token数&#xff1f;https://wtl4it.blog.csdn.net/article/details/135116493?spm1001.2014.3001.5502https://wtl4it.blog.csdn.net/article/details/135116493?spm1001.2014.3001.5502 GPT3.5\GPT4系列计算完整prompt token数的官方方法&#xff1…

Unity3d C# 在WebGL平台加载并解析xml文件实现总结

前言 xml是可扩展标记语言&#xff0c;由一系列的元素、属性、值节点等构成的一个树形结构&#xff0c;除了可读性差一点&#xff0c;别的用于存储一些结构化的数据还是比较方便的。这个功能在Unity3d端的实现是比较方便快捷的&#xff1a; void GetXML1() {string filePath …

K8S之Pod的介绍和使用

Pod的理论和实操 pod理论说明Pod介绍Pod运行与管理Pod管理多个容器Pod网络Pod存储 Pod工作方式自主式Pod控制器管理的Pod&#xff08;常用&#xff09; 创建pod的流程 pod实操通过资源清单文件创建自主式pod通过kubectl run创建Pod&#xff08;不常用&#xff09; pod理论说明 …

Unity根据落点和抛物线运行时间,求初始力

抛物线运行时长为2秒&#xff1a; 抛物线运行时长为4秒&#xff1a; 原理就是&#xff1a; 在竖直方向只受重力&#xff0c;做匀加速直线运动&#xff0c;水平不受力&#xff0c;做匀速直线运动。 代码&#xff1a; public void Update(){if (Input.GetKeyDown(KeyCode.Space)…

2024.1.30报错记录

今天想调通一套github上的U-net代码&#xff0c;把报错记录一下 第一章 ModuleNotFoundError: No module named skimage 没有这个模块 pip install scikit-image 第二章 TypeError: (‘Keyword argument not understood:‘, ‘input‘) TypeError: (‘Keyword argument …
最新文章