笔记|扩散模型(一五)CogVideo 论文解读|文生视频大模型
论文链接:CogVideo:
Large-scale Pretraining for Text-to-Video Generation via
Transformers
官方实现:THUDM/CogVideo(由于目前的仓库里,CogVideo
相关的代码已经被替换为 CogVideoX 的代码,所以如果希望浏览 CogVideo
的代码,包含该方法代码最后一个 commit 为 5f914b7,也就是
这个链接)
和本系列中的 DALL-E 一样,虽然 CogVideo
也并非基于扩散模型的方法,但由于其后续工作 CogVideoX
是基于扩散模型的,所以这篇文章也放到扩散模型系列里。
CogVideo 是基于大规模预训练 Transformer
进行视频生成的工作,也是近期推出的 CogVideoX
的前身。相比于文生图任务,文生视频的主要难点在于两个方面:首先是数据更加稀缺,视频-文本配对数据比较少;其次是视频多了时序信息。
本模型基于文生图模型 CogView2 进行训练,在训练时使用了 5.4 M
视频-文本对数据。在训练时,文本条件是通过 in context
lea ...
笔记|扩散模型(一四)Textual Inversion 理论与实现
论文链接:An Image is
Worth One Word: Personalizing Text-to-Image Generation using Textual
Inversion
官方实现:rinongal/textual_inversion
非官方实现:huggingface/diffusers
Textual Inversion 也是对 diffusion model
进行微调的主要范式之一,从标题中 An Image is Worth One Word
可以猜测,这个方法也是类似 Dreambooth 用某个特别的 text token
来表示所要生成的物体。不过和 Dreambooth 不同的是,Textual Inversion
并不是在 prompt
中插入某个修饰词来表示主体或者风格,而是直接将主体学习为一个
token。这个方法比较特别的是它并不改变原始模型的权重,而只学习了一个额外的
embedding。
Textual Inversion
现有的工作已经证明了 diffusion model 的 text embedding
空间对图像的语义信息有一 ...
笔记|扩散模型(一三)DiT|Diffusion with Transformer
论文链接:Scalable
Diffusion Models with Transformers
官方实现:facebookresearch/DiT
Transformer
在许多领域都有很不错的表现,尤其是近期大语言模型的成功证明了 scaling law
在 NLP 领域的效果。Diffusion Transformer(DiT)把 transformer
架构引入了扩散模型中,并且试图用同样的 scaling
方法提升扩散模型的效果。DiT 提出后就受到了很多后续工作的
follow,例如比较有名的视频生成方法 sora 就采取了 DiT
作为扩散模型的架构。
Diffusion Transformer
在正式开始介绍 DiT 之前,需要先了解一下 DiT 使用的扩散模型架构。DiT
使用的是 latent diffusion,VAE 采用和 Stable Diffusion 相同的
KL-f8,并且使用了 Improved DDPM(详细介绍见这个链接),同时预测噪声的均值和方差。
Patchify
由于 DiT 使用了 latent diffusion,对于 \(256 ...
笔记|扩散模型(一二)U-ViT|Diffusion with Transformer
论文链接:All are
Worth Words: A ViT Backbone for Diffusion Models
官方实现:baofff/U-ViT
扩散模型自从被提出后,主干网络一直都是各种基于卷积的 UNet
的变体。而在其他领域,Transformer 架构则更加流行,尤其是由于 Transformer
多模态性能和缩放能力都很强,因此把 Transformer
架构用于扩散模型是很值得尝试的。这篇 U-ViT
的工作就是一个不错的尝试。
U-ViT 的设计
在开始具体的介绍之前,可以先看一下 U-ViT
整体的架构。可以看出其有几个主要的特点:
所有的元素,包括 latent、timestep、condition 等都以 token
的形式进行了 embedding;
类似于 UNet,在不同的 Transformer Block
层之间添加了长跳跃连接。
虽然理论上来说这两个点都比较简单,但作者进行了一系列实验来选择比较好的设计。
长跳跃连接的实现
将主分支和长跳跃连接分支的特征分别记为 \(h_m\) 和 \(h_s\)。作者选取了几种不同的实现方式进行 ...
笔记|扩散模型(一一)Stable Diffusion XL 理论与实现
论文链接:SDXL:
Improving Latent Diffusion Models for High-Resolution Image
Synthesis
官方实现:Stability-AI/generative-models
非官方实现:huggingface/diffusers
Stable Diffusion XL (SDXL) 是 Stablility AI 对 Stable Diffusion
进行改进的工作,主要通过一些工程化的手段提高了 SD 模型的生成能力。相比于
Stable Diffusion,SDXL
对模型架构、条件注入、训练策略等都进行了优化,并且还引入了一个额外的
refiner,用于对生成图像进行超分,得到高分辨率图像。
Stable Diffusion XL
模型架构改进
SDXL 对模型的 VAE、UNet 和 text encoder
都进行了改进,下面依次介绍一下。
VAE
相比于 Stable Diffusion,SDXL 对 VAE
模型进行了重新训练,训练时使用了更大的 batchsize(256,Stable Diffusion
...
笔记|LoRA 理论与实现|大模型轻量级微调
论文链接:LoRA:
Low-Rank Adaptation of Large Language Models
官方实现:microsoft/LoRA
非官方实现:huggingface/peft、huggingface/diffusers
这篇文章要介绍的是一种大模型/扩散模型的微调方法,叫做低秩适应(也就是
Low-Rank Adaptation,LoRA)。经常使用 stable diffusion webui
的读者应该对这个名词非常熟悉,通过给扩散模型加载不同的
lora,可以让扩散模型生成出不同风格的图像。现在也已经有很多平台(例如 civitai、tensorart 等)可以下载现成的
lora,可以看出 LoRA 的影响力还是比较大的。
LoRA 作为一种高效的参数微调(Parameter-Efficient
Fine-Tuning,PEFT)方法,最初是被用来微调 LLM
的,后来也被用来微调扩散模型。这种方法的主要思想是固定住预训练模型的参数,同时引入额外的可训练低秩分解模块,只训练额外引入的这部分参数,从而大大减小模型的微调成本。
与其他的 Peft 方法相比 ...
笔记|扩散模型(一〇)Dreambooth 理论与实现|主题驱动生成
论文链接:DreamBooth:
Fine Tuning Text-to-Image Diffusion Models for Subject-Driven
Generation
项目主页:https://dreambooth.github.io/
非官方实现:huggingface/diffusers、XavierXiao/Dreambooth-Stable-Diffusion
时隔快两周继续更新一下 AIGC
系列的学习笔记,这篇文章算是比较火的一个工作,而且很多 AI
照相馆应用的背后也是这个算法。这一算法关注的任务是主题驱动生成,也就是给定某个特定物体(或者某个人或动物)的几张图像对模型进行微调,微调后就能生成该主题在各种场景、姿态下的图像。具体效果如下图所示,给出几张柯基的照片对模型进行微调,模型就能生成这只小狗的各种图像。
Dreambooth
Dreambooth
这个方法使用的依然是基础的文生图扩散模型,不过对这类模型进行了「个性化」。具体来说就是用给出的几张图像以及设计好的
prompt 对原始模型进行微调。微调的主要目的是把要生成的目标植入到输出
domain ...
笔记|扩散模型(九)Imagen 理论与实现
论文链接:Photorealistic Text-to-Image
Diffusion Models with Deep Language Understanding
非官方实现:lucidrains/imagen-pytorch
Imagen 是 Google Research 的文生图工作,这个工作并没有沿用 Stable
Diffusion 的架构,而是级联了一系列普通的 DDPM
模型。其主要的贡献有以下几个方面:
使用比较大的文本模型进行文本嵌入,可以获得比使用 CLIP
更好的文本理解能力;
在采样阶段引入了一种动态阈值的方法,可以利用更高的 guidance scale
来生成更真实、细节更丰富的图像(这里的阈值是控制 \(\mathbf{x}\) 的范围);
改良了 UNet,提出 Efficient
UNet,使模型更简单、收敛更快、内存消耗更少。
该模型的架构如下图所示,可以看到使用了一个条件生成的 diffusion
模型以及两个超分辨率模型,每个模型都以文本模型的 embedding
作为条件,先生成一个 64 分辨率的图像,然后逐步超分辨率到 1024 ...
笔记|扩散模型(八)DALL-E 2 (unCLIP) 理论与实现
论文链接:Hierarchical
Text-Conditional Image Generation with CLIP Latents
非官方实现:lucidrains/DALLE2-pytorch
DALL-E 2 是一个比较经典的文生图模型,虽然和 Stable Diffusion
的架构有些区别,但是也利用了 CLIP
的文本-图像对齐能力实现了用文本作为条件进行图像生成。由于 CLIP
是输入文本和图像获得相应的特征,而 DALL-E 2
是将输入的文本转化为特征再转换为图像,相当于把 CLIP
中的图像编码器反转了过来,所以这个方法也被称为
unCLIP。这个模型主要由三个部分组成:
CLIP 模型:负责将条件文本转换到文本-图像的统一特征空间中;
prior 模型:将文本特征转换为图像特征,用于后续的图像生成;
decoer 模型:将从 prior
获得的图像特征转换为具体的生成图像,相当于反转了 CLIP 中的图像
encoder。
模型的架构图如下图所示,虚线的上方是 CLIP 模型,下方是 prior 和
decoder 模型。
DALL-E 2 的训练 ...
笔记|扩散模型(七)Latent Diffusion Models(Stable Diffusion)理论与实现
论文链接:High-Resolution Image Synthesis
with Latent Diffusion Models
官方实现:CompVis/latent-diffusion、CompVis/stable-diffusion
这一篇文章的内容是 Latent Diffusion Models(LDM),也就是大名鼎鼎的
Stable
Diffusion。先前的扩散模型一直面临的比较大的问题是采样空间太大,学习的噪声维度和图像的维度是相同的。当进行高分辨率图像生成时,需要的计算资源会急剧增加,虽然
DDIM 等工作已经对此有所改善,但效果依然有限。Stable Diffusion
的方法非常巧妙,其把扩散过程转换到了低维度的隐空间中,解决了这个问题。
方法介绍
本方法的整体结构如下图所示,主要分为三部分:最左侧的红框对应于感知图像压缩,中间的绿框对应
Latent Diffusion
Models,右侧的白框表示生成条件,下面将分别介绍这三个部分。
感知图像压缩
LDM
把图像生成过程从原始的图像像素空间转换到了一个隐空间,具体来说,对于一个维度为
\(\mathb ...