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)中的分析旨在研究在SVDiff方法中,不同主题之间的光谱偏移在模型微调过程中的表现。通过比较不同主题之间的光谱偏移相关性,以了解模型在学习和区分不同主题时的表现如何。

        为了计算光谱偏移的相关性,作者首先对每一层的权重矩阵进行奇异值分解,得到奇异值矩阵。然后,通过计算不同主题之间的奇异值矩阵的余弦相似度的平均值评估它们之间的相关性。 余弦相似度是一种常用的相似度度量方法,用于衡量两个向量方向的相似程度。在这种情况下,奇异值矩阵可以看作是一个向量,因此可以使用余弦相似度来比较不同主题之间的奇异值矩阵。通过计算奇异值矩阵的余弦相似度,可以得出不同主题之间的光谱偏移相关性。如果余弦相似度接近1,表示两个主题之间的奇异值矩阵非常相似,相关性较高;如果余弦相似度接近0,表示两个主题之间的奇异值矩阵差异很大,相关性较低。

        通过计算不同主题之间的光谱偏移的余弦相似度,可以评估模型在微调过程中是否能够有效地区分不同主题,并且能否保持主题之间的独特性。如果不同主题之间的光谱偏移相关性较低,说明模型在学习和区分不同主题时表现良好,能够保持主题之间的差异性。

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

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

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

相关文章

Vue3中使用tsx文件

1. 安装 npm install vitejs/plugin-vue-jsx -D2. 配置vite.config.ts import { defineConfig } from vite import vue from vitejs/plugin-vue import path from path import vueJsx from "vitejs/plugin-vue-jsx"// https://vitejs.dev/config/ export default d…

11:Servlet中初始化参数的获取与应用-Java Web

目录 11.1 Servlet初始化参数简介11.2 如何在Servlet中获取初始化参数11.3 基于注解的初始化参数(Servlet 3.0)11.4 区别总结11.5 应用场景总结 在构建Java Web应用程序时,Servlet是核心组件之一,它负责处理HTTP请求并生成响应。而…

五大架构风格之四-虚拟机架构风格

虚拟机架构风格: 虚拟机架构风格是一种软件架构,它通过模拟完整的计算机系统(包括硬件)来运行程序。这种风格的核心是虚拟机监控器。如最出名的虚拟机VM,在使用虚拟机架构,一个或多个虚拟机可以在单一物理主…

标题:揭秘Java中Thread.sleep(0)的微妙用法与实战解析

引言 在深入研究Java多线程编程时,我们经常会遇到一个看似不起眼但颇具实用价值的方法——Thread.sleep(0)。乍一看,让一个线程“休眠”零毫秒似乎是一个没有意义的操作,但实际上,它在并发编程场景中扮演着重要的角色。本文将详细…

java反射详解

动态代理 什么是动态代理? 特点:无侵入式的给代码增加额外的功能 对象有什么方法想要被代理,代理就一定要有对应的方法 对象和代理需要实现同一个接口,接口中就是被代理的方法 调用者通过代理,调用代理中的方法&#x…

高级FPGA开发之基础协议PCIe

基础协议之PCIe部分 一、TLP包的包头 在PCIe的系统中,tlp包的包头的结构有许多部分是相似的,通过掌握这些常规的包头,能帮助理解在PCIe总线上各个设备之间如何进行数据的收发。 通用的字段 通用字段作用Fmt决定了包头是3DW还是3DW&#xff…

二级C语言笔试2

(总分100,考试时间90分钟) 一、选择题 下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的。 1. 下列叙述中正确的是( )。 A) 算法的效率只与问题的规模有关,而与数据的存储结构无关 B) 算法的时间复杂度是指执行算法所需要的计算工作量 …

2V2无人机红蓝对抗仿真

两架红方和蓝方无人机分别从不同位置起飞,蓝方无人机跟踪及击毁红方无人机 2020a可正常运行 2V2无人机红蓝对抗仿真资源-CSDN文库

Android电动汽车充电服务vue+uniAPP微信小程序

本系统利用SSM和Uniapp技术进行开发电动汽车充电服务系统是未来的趋势。该系统使用的编程语言是Java,数据库采用的是MySQL数据库,基本完成了系统设定的目标,建立起了一个较为完整的系统。建立的电动汽车充电服务系统用户使用浏览器就可以对其…

Python爬虫urllib详解

前言 学习爬虫,最初的操作便是模拟浏览器向服务器发出请求,那么我们需要从哪个地方做起呢?请求需要我们自己来构造吗?需要关心请求这个数据结构的实现吗?需要了解 HTTP、TCP、IP 层的网络传输通信吗?需要知…

mongodb数据库集合(表)的创建和数据修改

文章目录 前言发现宝藏一、集合的创建二、集合的修改三、数据插入数据库四、清空数据库集合数据 前言 为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作…

华清远见嵌入式学习——春节作业——2.4日

作业要求: 编写程序实现二叉树的创建,三种遍历自己销毁 作业答案: 作业代码截图 作业代码效果图 作业代码 #include "myhead.h"// 定义二叉树节点结构体 struct Tree {int value; //编号(值)struct Tree* left; //左子树stru…

C语言代码审查:解析与应对策略

在C语言编程的世界中,代码审查是一项至关重要的任务,它旨在发现并修复潜在的错误、改进代码质量,并强化开发者的编码规范。本文将详尽阐述C语言代码审查过程中常见的错误类型及其深层原因,同时提供针对性的解决策略和最佳实践。 …

idea创建spring项目

一、环境 window10 IDEA 2022.2.3 maven-3.8.6 二、创建spring项目 1、新建Maven项目 File -> New -> Project 然后如下图选中Maven Archetype,在Archetype,选中maven-archetype-webapp,点击Create 2、配置maven 默认是使用IDEA内…

管理类联考-复试-英语-听力

文章目录 准备工作1.如何准备英语听力?2.听力学习注意事项一:培养良好的听音习惯,听读顺序要合理3.听力学习注意事项二:边听边记关键词 训练短期记忆能力4.听力学习注意事项三:熟记语篇衔接词把握信息走向5.听力学习注…

少儿编程 中国电子学会图形化编程2022年1月等级考试Scratch三级真题解析(选择题、判断题)

1.默认小猫角色和气球角色都是显示状态,小猫程序如下图所示,气球没有程序,点击绿旗,舞台上最终显示的效果是?( ) A:可能出现6个不同位置的小猫和6个小球 B:可能出现6个…

Multisim14.0仿真(四十九)共阴极/阳极7段数码管驱动设计

一、74LS47/48简介: 74LS47/48芯片是一种常用的七段数码管译码器驱动器,常用在各种数字电路和单片机系统的显示系统中. 二、74LS47/48引脚说明及定义: 7段显示译码器74LS47/48是输出低/高电平有效的译码器,74LS47/48除了有实现7段显示译码器基本功能的输入(DCBA)和输出(Ya…

Unity类银河恶魔城学习记录1-9 PlayerWallSilde源代码 P36

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Player.cs using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; us…

eCos flash模拟EEPROM实现NV系统

Flash需要擦除的原因&#xff1a;先擦除后写入的原因是为了工业上制作方便&#xff0c;即物理实现方便。 #include <cyg/infra/diag.h> #include <cyg/io/flash.h> #include <stdarg.h> #include <stdio.h> #include <stdlib.h> // SPI flash…

gerrit 安装插件

1.插件下载 gerrit 3.9 插件&#xff0c;打开链接去右上角搜索插件名称&#xff0c;找到合适的版本&#xff0c;由于我这儿需要安装gerrit 3.9.1 的 autosubmitter 插件&#xff0c;但是好像没有 3.9 的&#xff0c;有下面这俩 上面那个可以理解为基于插件的主分支代码进行构…