【论文阅读】Latent Consistency Models (LDMs)、LCM-LoRa

news2024/11/16 19:07:01

文章目录

  • Introduction
  • Preliminaries
    • Diffusion Models
    • Consistency Models
  • Latent Consistency Models
    • Consistency Distillation in the Latent Space
    • One-Stage Guided Distillation by Solving Augmented PF-ODE
    • Accelerating Distillation with Skipping Time Steps
    • Latent Consistency Fine-tuing for Customized Dataset
  • Experiment
  • LCM-LoRA

Introduction

  • 提出 Latent Consistency Models (LCMs),图像生成速度更快、质量更好.
  • 提出一种简单高效的 one-stage guided consistency distillation 方法,用极少的采样步数蒸馏 Stable Diffusion,进一步提出 skipping-step 技术加快收敛过程.
  • 介绍针对 LCMs 的微调方法.

Preliminaries

Diffusion Models

使用 empirical PF-ODE 表示模型的逆扩散过程:

d x t d t = f ( t ) x t + g 2 ( t ) 2 σ t ϵ θ ( x t , t ) \large \frac{\mathrm{d}x_t}{\mathrm{d}t}=f(t)x_t+\frac{g^2(t)}{2\sigma_t}\epsilon_{\theta}(x_t,t) dtdxt=f(t)xt+2σtg2(t)ϵθ(xt,t)

对于 class-conditioned 扩散模型,Classifier-Free Guidance (CFG) 有效地提高了生成样本的质量,用 ω \omega ω表示 CFG 系数,原始的噪声预测模型可以被替换为:

ϵ θ ^ ( z t , ω , c , t ) = ( 1 + ω ) ϵ θ ( z t , c , t ) − ω ϵ θ ( z t , ∅ , t ) \large\hat{\epsilon_{\theta}}(z_t,\omega,c,t)=(1+\omega)\epsilon_{\theta}(z_t,c,t)-\omega\epsilon_{\theta}(z_t,\varnothing,t) ϵθ^(zt,ω,c,t)=(1+ω)ϵθ(zt,c,t)ωϵθ(zt,,t)

Consistency Models

F θ ( x , t ) F_{\theta}(\mathrm{x}, t) Fθ(x,t)表示任意形式的神经网络,使用 sikp connection 可以将模型表示为:

f θ ( x , t ) = c s k i p ( t ) x + c o u t ( t ) F θ ( x , t ) \large f_{\theta}(\mathrm{x}, t)=c_{skip}(t)\mathrm{x}+c_{out}(t)F_{\theta}(\mathrm{x},t) fθ(x,t)=cskip(t)x+cout(t)Fθ(x,t)

其中边界条件为 c s k i p ( ϵ ) = 1 c_{skip}(\epsilon)=1 cskip(ϵ)=1 c o u t ( ϵ ) = 0 c_{out}(\epsilon)=0 cout(ϵ)=0.
损失函数为:

L C D N ( θ , θ − ; ϕ ) = E [ λ ( t n ) d ( f θ ( x t n + 1 , t n + 1 ) , f θ − ( x ^ t n ϕ , t n ) ] \large \mathcal{L}_{CD}^{N}(\theta, \theta^-;\phi)=\mathbb{E}\left[\lambda(t_n)d(f_{\theta}(\mathrm{x}_{t_{n+1}},t_{n+1}),f_{\theta^-}(\hat{\mathrm{x}}_{t_n}^{\phi}, t_n) \right] LCDN(θ,θ;ϕ)=E[λ(tn)d(fθ(xtn+1,tn+1),fθ(x^tnϕ,tn)]

θ − \theta^- θ使用 EMA 更新,计算公式如下:

θ − ← s t o p g a r d ( μ θ − + ( 1 − μ ) θ ) \large \theta^- \leftarrow \mathrm{stopgard}(\mu\theta^-+(1-\mu)\theta) θstopgard(μθ+(1μ)θ)

x ^ t n ϕ \hat{\mathrm{x}}_{t_n}^{\phi} x^tnϕ是从 x t n + 1 \mathrm{x}_{t_{n+1}} xtn+1 x t n \mathrm{x}_{t_{n}} xtn的估计,计算公式如下:

x ^ t n ϕ = x t n + 1 + ( t n − t n + 1 ) Φ ( x t n + 1 , t n + 1 ; ϕ ) \large \hat{\mathrm{x}}_{t_n}^{\phi}=\mathrm{x}_{t_{n+1}} + (t_n-t_{n+1})\Phi(\mathrm{x}_{t_{n+1}}, t_{n+1};\phi) x^tnϕ=xtn+1+(tntn+1)Φ(xtn+1,tn+1;ϕ)

Latent Consistency Models

Consistency Distillation in the Latent Space

针对类似 Stable Diffusion的隐空间上的条件扩散模型,其 PF- ODE 逆过程可以表示为:

d z t d t = f ( t ) z t + g 2 ( t ) 2 σ t ϵ θ ( z t , c , t ) \large \frac{\mathrm{d}z_t}{\mathrm{d}t}=f(t)z_t+\frac{g^2(t)}{2\sigma_t}\epsilon_{\theta}(z_t,c,t) dtdzt=f(t)zt+2σtg2(t)ϵθ(zt,c,t)

其中 z t z_t zt是图像隐向量, c c c是给定的条件. 类似CM中的做法,引入 f θ : ( z t , c , t ) ↦ z 0 f_{\theta}:(z_t,c,t)\mapsto z_0 fθ:(zt,c,t)z0,将其参数化为:

f θ ( z , c , t ) = c s k i p ( t ) z + c o u t ( t ) ( z − σ t ϵ ^ θ ( z , c , t ) α t ) \large f_{\theta}(z,c,t)=c_{skip}(t)z+c_{out}(t)\left(\frac{z-\sigma_t\hat{\epsilon}_{\theta}(z,c,t)}{\alpha_{t}} \right) fθ(z,c,t)=cskip(t)z+cout(t)(αtzσtϵ^θ(z,c,t))

具体的参数化形式由被蒸馏的扩散模型决定.
损失函数表示为:

L C D ( θ , θ − ; Ψ ) = E z , c , n [ d ( f θ ( z t n + 1 , c , t n + 1 ) , f θ − ( z ^ t n Ψ , c , t n ) ] \large \mathcal{L}_{CD}(\theta,\theta^-;\Psi)=\mathbb{E}_{z,c,n}\left[d(f_{\theta}(z_{t_{n+1}},c,t_{n+1}),f_{\theta^-}(\hat{z}_{t_n}^{\Psi},c,t_n) \right] LCD(θ,θ;Ψ)=Ez,c,n[d(fθ(ztn+1,c,tn+1),fθ(z^tnΨ,c,tn)]

z ^ t n Ψ \hat{z}_{t_n}^{\Psi} z^tnΨ z t n + 1 z_{t_{n+1}} ztn+1 z t n z_{t_{n}} ztn的估计,计算方法如下:

z ^ t n Ψ − z t n + 1 = ∫ t n + 1 t n ( f ( t ) z t + g 2 ( t ) 2 σ t ϵ θ ( z t , c , t ) ) d t ≈ Ψ ( z t n + 1 , t n + 1 , t n , c ) \large \hat{z}_{t_n}^{\Psi}-z_{t_{n+1}}=\int_{t_{n+1}}^{t_n}\left(f(t)z_t+\frac{g^2(t)}{2\sigma_t}\epsilon_{\theta}(z_t,c,t)\right)\mathrm{d}t\approx\Psi(z_{t_{n+1}}, t_{n+1}, t_n, c) z^tnΨztn+1=tn+1tn(f(t)zt+2σtg2(t)ϵθ(zt,c,t))dtΨ(ztn+1,tn+1,tn,c)

One-Stage Guided Distillation by Solving Augmented PF-ODE

使用CFG,损失函数可以表示为:

L C D ( θ , θ − ; Ψ ) = E z , c , n [ d ( f θ ( z t n + 1 , ω , c , t n + 1 ) , f θ − ( z ^ t n Ψ , ω , c , t n ) ] \large \mathcal{L}_{CD}(\theta,\theta^-;\Psi)=\mathbb{E}_{z,c,n}\left[d(f_{\theta}(z_{t_{n+1}},\omega,c,t_{n+1}),f_{\theta^-}(\hat{z}_{t_n}^{\Psi},\omega,c,t_n) \right] LCD(θ,θ;Ψ)=Ez,c,n[d(fθ(ztn+1,ω,c,tn+1),fθ(z^tnΨ,ω,c,tn)]

z ^ t n Ψ \hat{z}_{t_n}^{\Psi} z^tnΨ的计算方法更新为

z ^ t n Ψ − z t n + 1 ≈ ( 1 + ω ) Ψ ( z t n + 1 , t n + 1 , t n , c ) − Ψ ( z t n + 1 , t n + 1 , t n , ∅ ) \large \hat{z}_{t_n}^{\Psi}-z_{t_{n+1}}\approx(1+\omega)\Psi(z_{t_{n+1}}, t_{n+1}, t_n, c)-\Psi(z_{t_{n+1}}, t_{n+1}, t_n, \varnothing) z^tnΨztn+1(1+ω)Ψ(ztn+1,tn+1,tn,c)Ψ(ztn+1,tn+1,tn,)

Accelerating Distillation with Skipping Time Steps

扩散模型例如Stable Diffusion的总时间步长有 1000 1000 1000步,LCM在训练的采样需要覆盖这 1000 1000 1000步,既然相邻时间步之间的差值小,那么 f θ ( z t n + 1 , c , t n + 1 ) f_{\theta}(z_{t_{n+1}},c,t_{n+1}) fθ(ztn+1,c,tn+1) f θ ( z t n , c , t n ) f_{\theta}(z_{t_{n}},c,t_{n}) fθ(ztn,c,tn)之间的差距也小,这导致计算出来的损失小、收敛慢.

作者介绍了skipping-step 方法,原来度量时间步 t n + 1 t_{n+1} tn+1 t n t_n tn间的差距,改为度量 t n + k t_{n+k} tn+k t n t_n tn间的差距. 至此,LCM训练的损失函数为

L C D ( θ , θ − ; Ψ ) = E z , c , n [ d ( f θ ( z t n + k , ω , c , t n + k ) , f θ − ( z ^ t n Ψ , ω , c , t n ) ] \large \mathcal{L}_{CD}(\theta,\theta^-;\Psi)=\mathbb{E}_{z,c,n}\left[d(f_{\theta}(z_{t_{n+k}},\omega,c,t_{n+k}),f_{\theta^-}(\hat{z}_{t_n}^{\Psi},\omega,c,t_n) \right] LCD(θ,θ;Ψ)=Ez,c,n[d(fθ(ztn+k,ω,c,tn+k),fθ(z^tnΨ,ω,c,tn)]

z ^ t n Ψ \hat{z}_{t_n}^{\Psi} z^tnΨ Ψ ( ⋅ , ⋅ , ⋅ , ⋅ ) \Psi(·,·,·,·) Ψ(⋅,⋅,⋅,⋅)的计算方法对应跨 k k k步,作者分别使用了DDIMDPM-SolverDPM-Solver++ 作为 PF-ODE solver,以DDIM为例,其对应的 Ψ ( ⋅ , ⋅ , ⋅ , ⋅ ) \Psi(·,·,·,·) Ψ(⋅,⋅,⋅,⋅)计算方法为

Ψ ( z t n + k , t n + k , t n , c ) = α t n α t n + k z t n + k − σ t n ( σ t n + k α t n α t n + k σ t n − 1 ) ϵ ^ θ ( z t n + k , c , t n + k ) − z t n + k \large \Psi(z_{t_{n+k}}, t_{n+k}, t_n, c)=\frac{\alpha_{t_n}}{\alpha_{t_{n+k}}}z_{t_{n+k}}-\sigma_{t_n}\left(\frac{\sigma_{t_{n+k}}\alpha_{t_n}}{\alpha_{t_{n+k}}\sigma_{t_n}}-1\right)\hat{\epsilon}_{\theta}(z_{t_{n+k}},c,t_{n+k})-z_{t_{n+k}} Ψ(ztn+k,tn+k,tn,c)=αtn+kαtnztn+kσtn(αtn+kσtnσtn+kαtn1)ϵ^θ(ztn+k,c,tn+k)ztn+k

再加入CFGskipping-step之后,LCM的训练过程用如下算法所示:
在这里插入图片描述

多步采样算法如下:
[图片]

Latent Consistency Fine-tuing for Customized Dataset

全量微调算法:
[图片]

Experiment

测试数据集使用 LAION-Aesthetic-6+ 和 LAION-Aesthetic-6.5+,teacher model 是 Stable Diffusion-v2.1.

[图片]

LCM的推理步数在 1 1 1 4 4 4步的时候效果会比其他 baseline 方法好. 因为DPMDPM++算实践中很常用的 ODE Solver,正常使用时推理步数在 20 20 20以上. 所以综合速度和质量,LCM表现不错.

训练时间 32 A100 GPU Hours

LCM-LoRA

[图片]

原理:在原本的 Latent Diffusion Model (LDM) 中,可以使用 LoRa 训练一个额外结构附加到模型的 TextEncoder 和 Unet 中,做到模型的风格迁移. 即图中所示的 τ ′ \mathbb{\tau}' τ,它是原模型微调后额外结构的参数向量. LCM的 backbone 和被它蒸馏模型的 backbone 结构是一致的,所以LCD过程也可以视作对原模型的微调,所以也可以利用 LoRa,在初始化 student Unet 之后,整个蒸馏过程只训练 LoRa 引入的额外结构,也就是获得 τ L C M \mathbb{\tau}_{\mathrm{LCM}} τLCM. 理论上可以结合 τ ′ \mathbb{\tau}' τ,最终做到既能加速生成,又能风格迁移.

LCD过程仅微调 LoRa,收敛更快,训练消耗显著降低.

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

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

相关文章

Rust-数组

数组是一个容器,它在一块连续空间内存中,存储了一系列的同样类型的数据。 数组中元素的占用空间大小必须是编译期确定的。 数组本身所容纳的元素个数也必须是编译期确定的,执行阶段不可变。 如果需要使用变长的容器,可以使用标…

如何使用程序控制微信发送消息

简介 使用杨中科老师的nuget包NetAutoGUI,控制微信给指定用户发送消息,如果想下面视频一样使用此功能用来轰炸朋友,可以直接跳到最后一节,或者直接下载我的打包好的程序集 【免费】控制微信发送消息的程序资源-CSDN文库 微信轰炸…

复合机器人作为一种新型的智能制造装备高效、精准和灵活的生产方式

随着汽车制造业的快速发展,对于高效、精准和灵活的生产方式需求日益增强。复合机器人作为一种新型的智能制造装备,以其独特的优势在汽车制造中发挥着越来越重要的作用。因此,富唯智能顺应时代的发展趋势,研发出了ICR系列的复合机器…

定岗定编:国有电力企业精细化管理改革方案

某发电厂作为神华国华集团下属单位,位于环渤海地区,成立于20世纪90年代,是国家“八五”、“九五”期间重点电力建设项目。在建立之初,公司引入了两台800MW超临界燃煤机组,总投资超过100亿元,近年开展了二期…

RTSP协议实现发送ACC音频数据

一.AAC音频格式介绍 AAC音频格式:Advanced Audio Coding(高级音频解码),是一种由MPEG—4标准定义的有损音频压缩格式。音频压缩编码的输出码流,以音频帧的形式存在。每个音频帧包含若干个音频采样的压缩数据&#xff0…

Butler for Mac 菜单栏快速启动工具

Butler介绍 Butler for Mac版是一款Mac菜单栏快速启动工具,主要用于加速您的工作流程并简化您的日常任务。 借助Butler的帮助,您可以控制iTunes,启动应用程序,打开文件和文档,在用户之间切换,搜索网络等等…

鸿蒙Harmony-列表组件(List)详解

不要和别人比生活,每个人阶段不同,追求不同,活法自然也不同。只要今天的你能比昨天的你快乐一点点,那你就是自己人生赢家。 目录 一,定义 二,布局与约束 2.1 布局 2.2 约束 三,开发布局 3.1 设置…

基于Python的汽车信息爬取与可视化分析系统

介绍 这款汽车信息网站是基于多项技术和框架设计的全面的汽车信息展示及查询系统。其中,采用了Python Django框架和Scrapy爬虫技术实现数据的抓取和处理,结合MySQL数据库进行数据存储和管理,利用Vue3、Element-Plus、ECharts以及Pinia等前端…

【大数据】Flink 详解(九):SQL 篇 Ⅱ

《Flink 详解》系列(已完结),共包含以下 10 10 10 篇文章: 【大数据】Flink 详解(一):基础篇【大数据】Flink 详解(二):核心篇 Ⅰ【大数据】Flink 详解&…

Codeforces Round 920 (Div. 3)

Codeforces Round 920 (Div. 3) Codeforces Round 920 (Div. 3) A. Square 题意:随机给出正方形在平面坐标系上的四个顶点的坐标,求正方形的面积,正方形边与xy轴平行。 思路:因为正方形与坐标轴平行,所以找出相同的…

React Native 原生组件回调JS层方法和 JS 层调用原生组件的事件方法

一、原生组件回调 JS 层提供的事件方法 比如 TextInput 组件 onChangeText 属性,输入事件是发生在原生层的但是需要通知 JS 层发生了变化,并执行 JS 层的方法。 1、给原生组件添加一个按钮用于触发原生事件方法 在 XML 中添加一个按钮 为了方便让 Inf…

已解决:g++: error: unrecognized command line option ‘-Wnull-dereference‘

VS运行正常的c代码,出现错误: 正在执行任务: C:/Windows/System32/cmd.exe /d /c g -Wall -Wextra -Wpedantic -Wshadow -Wformat2 -Wcast-align -Wconversion -Wsign-conversion -Wnull-dereference -g3 -O0 -c e:\Desktop\C\hdu\1000.cpp -o .\build\…

保姆级ESP-IDF开发环境搭建

1. 手动安装工具链,命令行方式(windows) 1.1 下载离线安装器 进入乐鑫 ESP-IDF Windows Installer Download 下载页面,选择离线版本工具(网络原因,安装过程中使用github下载会出问题)。 1.2 使…

unity C#中使用ref、out区别和使用案例

文章目录 ref 关键字out 关键字 在Unity(以及C#编程语言中), ref 和 out 都是用来传递参数的引用,这意味着它们允许函数修改实参变量,并且这些修改会反映到调用函数的地方。但它们之间确实存在一些关键区别和使用场景…

Flutter开发进阶之并发操作数据库

Flutter开发进阶之并发操作数据库 尽管 Flutter 本身不包含任何数据库功能,但可以使用各种第三方库和插件来在 Flutter 应用程序中实现数据库功能; 以下将使用sqflite作为例子,sqflite允许在 Flutter 应用程序中执行 SQL 查询,创…

【干货】深入剖析冒泡排序算法:原理、步骤与复杂度分析

导语: 排序算法是计算机科学中的重要基础知识,而冒泡排序是最简单、最基础的排序算法之一。虽然冒泡排序的效率相对较低,但它的实现简单易懂,是理解排序算法的入门之选。本文将深入剖析冒泡排序算法的原理、步骤以及时间复杂度分析…

vue 渲染数组,拖拽排序,渲染同一个数组拖拽排序不影响其他选中行状态

当我们能够设置单行状态改变的时候,那么肯定可以拿到选中的当前行的id或者下标index。 只要设定一个初始化值在拖拽开始的时候重新赋值,然后再处理选中状态的时候进行判断即可。 前期写的时候没有注意到这个问题,可以看这个文章。 在复测的时…

Keepalived 双机热备

本章主要内容: Keepalived 双机热备基础知识学会构建双机热备系统学会构建LVSHA 高可用群集 简介 在这个高度信息化的IT时代,企业的生产系统,业务运营,销售和支持,以及日常管理等环节越来越依赖于计算机和服务&#…

uboot工作原理介绍

uboot其实和电脑的BIOS是一个原理,它主要做两件事: (1)初始化硬件; (2)将系统文件(或者说是内核)从flash中读出来加载到DDR里面执行。 给大家解释下面几个问题: 为什么…

IDEA 中搭建 Spring Boot Maven 多模块项目 (父SpringBoot+子Maven)

第1步:新建一个SpringBoot 项目 作为 父工程 [Ref] 新建一个SpringBoot项目 删除无用的 .mvn 目录、 src 目录、 mvnw 及 mvnw.cmd 文件,最终只留 .gitignore 和 pom.xml 第2步:创建 子maven模块 第3步:整理 父 pom 文件 ① …