视觉 文生图模型学习过程

diffusion model

讲解:

【较真系列】讲人话-Diffusion Model全解(原理+代码+公式)_哔哩哔哩_bilibili

stable diffusion【CVPR2022】

原始论文: https://arxiv.org/pdf/2112.10752

讲解:【论文简介】Stable Diffusion的基础论文:2112.High-Resolution Image Synthesis with Latent Diffusion Models_stable diffusion论文-优快云博客

代码:

GitHub - CompVis/stable-diffusion: A latent text-to-image diffusion model

Imagen【NeurIPS 2022】

论文:https://arxiv.org/pdf/2205.11487

讲解:https://zhuanlan.zhihu.com/p/640941181

代码:GitHub - lucidrains/imagen-pytorch: Implementation of Imagen, Google's Text-to-Image Neural Network, in Pytorch

其实挺简单的,就是在后面加入了一个超分的部分。

1. 文本编码:T5模型

2. classifier-free guidance:

3.  对unet进行改进,减小训练过程的计算开销。

4. text-image(base model:64*64);image-image(超分model:64*64->256*256);image-image(超分model:256*256->1024*1024) 三个模块。

在两个超分模块中,除了text embeddings作为条件外,作者还将低分辨率的输出图像作为控制生成过程的条件之一。而对于文本编码的使用,则是先concat到图像后面,然后再作cross attention处理

Dreambooth【CVPR 2023】

论文:https://arxiv.org/pdf/2208.12242v1

讲解:【文生图】DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation-优快云博客
感觉就是sd换了一个损失函数,然后又加上了sr模块。

语言模型也是使用的T5

Textual Inversion

讲解:https://zhuanlan.zhihu.com/p/621437374

类似于dreambooth,这个是输入几张图片,训练文本表示的embedding

IP-Adapter【未发表】

代码:GitHub - tencent-ailab/IP-Adapter: The image prompt adapter is designed to enable a pretrained text-to-image diffusion model to generate images with image prompt.

其实还挺简单的,它是有两个prompt,分别是image和text(可以不要)

两个prompt分别经过cross-attn,并把结果相加后输入到unet中。

SnapFusion【NeurIPs 2023

讲解:https://zhuanlan.zhihu.com/p/650739412
论文:https://arxiv.org/pdf/2306.00980
创新点:

1. 改进unet,将里面的结构去掉,分析效果,然后找到去掉结构后对网络影响最小的那几块使用;

2. 蒸馏,对DDPM的步数进行蒸馏

3. VAE Decoder 优化,使用蒸馏
感觉改进不是很多。

对于文本编码器,好像是用的clip,和sd一样,没有重点在文章中找。

DeepCache【CVPR2024】

论文:https://arxiv.org/pdf/2312.00858

讲解:https://zhuanlan.zhihu.com/p/673114336

代码:GitHub - horseee/DeepCache: [CVPR 2024] DeepCache: Accelerating Diffusion Models for Free

创新点:

找的角度很好,改进并不大,效果很好,就是将上一时刻的特征缓存下来,然后后续直接使用。

对于文本编码器,使用的是clip。 

DiT【ICCV 2023】

论文:https://arxiv.org/pdf/2212.09748

讲解:AIGC专栏9——Scalable Diffusion Models with Transformers (DiT)结构解析_scalable diffusion models with transformers pdf-优快云博客

代码: GitHub - facebookresearch/DiT: Official PyTorch Implementation of "Scalable Diffusion Models with Transformers"

DiT只能按照类别进行图片生成,可以生成imagenet中的1000类。主要的创新点感觉就是改进了一个transformer,其余的没有什么太大的变化.应证了实习的时候和同事们聊的,多模态现在几乎使用一个mlp进行编码了。这边也是将文本数据进行mlp编码。

 DiT还沿用了OpenAI的Improved DDPM扩散思想,与原始DDPM相比不再采用固定的方差,而是采用网络来预测方差。

Stable diffusion3【未发表】

讲解:https://zhuanlan.zhihu.com/p/685457842
论文:

### 文本生成图像模型概述 文本到图像生成模型是一种人工智能技术,能够依据给定的文字描述自动生成相应的视觉内容。这类模型的核心在于理解并解析自然语言中的语义信息,并将其映射至具体的图形表示上。 #### 学习机制与表现力局限性 此类模型通常依赖大量的图像-文本配对数据集进行训练,在这个过程中获取到了丰富的语义关联知识[^2]。然而值得注意的是,尽管拥有强大的泛化能力和创造潜力,它们对于特定对象再现的能力仍然存在一定的限制。即使提供了详尽的目标特征说明,实际产生的结果也可能呈现出较大的差异性和不确定性。 #### 训练过程特性 研究者们发现了一个有趣的现象——所谓的“突然收敛”,即模型并不会逐步改善其对输入指令的理解程度;相反地,会在某个时刻迅速达到较好的效果[^3]。这一特点表明了模型内部可能存在某种阈值效应或者临界状态转换的过程。 #### 控制网络的应用与发展 为了增强模型对外部约束的支持力度以及提高定制化水平,研究人员提出了ControlNet架构的概念。该方法建议在保持原有预训练权重不变的前提下引入一个新的分支用于接收额外条件信号,并据此调整最终输出[^4]。这种方法不仅使得原生的强大表征能力得以保存,同时也赋予了系统更强的灵活性和适应性。 ```python import torch.nn as nn class ControlNet(nn.Module): def __init__(self, base_model_weights, condition_vector_size): super(ControlNet, self).__init__() # Load pretrained weights into the main model structure self.base_model = load_pretrained_model(base_model_weights) for param in self.base_model.parameters(): param.requires_grad = False # Define a new trainable branch that takes conditional vectors as input self.condition_branch = nn.Sequential( nn.Linear(condition_vector_size, hidden_dim), ... ) def forward(self, x, conditions): base_output = self.base_model(x) cond_features = self.condition_branch(conditions) combined_representation = combine_outputs(base_output, cond_features) return final_layer(combined_representation) def train_control_net(controlnet_instance, dataset_with_conditions): optimizer = optim.Adam(filter(lambda p: p.requires_grad, controlnet_instance.parameters())) criterion = loss_function() for epoch in range(num_epochs): for batch_x, batch_conds, targets in dataloader(dataset_with_conditions): predictions = controlnet_instance(batch_x, batch_conds) loss = criterion(predictions, targets) optimizer.zero_grad() loss.backward() optimizer.step() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值