Openai神作Dalle2理论和代码复现

这篇具有很好参考价值的文章主要介绍了Openai神作Dalle2理论和代码复现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Openai神作Dalle2

注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Spark Flink Kafka Hbase Hive Flume等等~写的都是纯干货,各种顶会的论文解读,一起进步。
今天和大家分享一下Openai神作Dalle2理论和代码复现
论文:https://cdn.openai.com/papers/dall-e-2.pdf
代码:https://github.com/lucidrains/DALLE2-pytorch
#博学谷IT学习技术支持#



前言

今天和大家分享的是一篇2022Openai神作Dalle2,如何输入一句话,生成非常有趣的图片过程。
先来看看论文的最终效果图。

Openai神作Dalle2理论和代码复现

是不是非常有趣?让我们看看Openai团队是如何做到的。


一、Dalle2模型整体框架

Openai神作Dalle2理论和代码复现
其实论文整体架构并不是很复杂,主要是运用
1.对比学习为主的CLIP
2.生成模型Diffusion Model
把这两个技术栈结合起来,这两个技术栈在我之前的博客中都已经有说明。大家可以先看一下。否则可能有一点抽象。
https://blog.csdn.net/weixin_53280379/article/details/125585445?spm=1001.2014.3001.5502
https://blog.csdn.net/weixin_53280379/article/details/126250598?spm=1001.2014.3001.5502

二、预训练模型CLIP

Openai神作Dalle2理论和代码复现
这里模型的上半部分,就是用预训练模型CLIP的结果,得到2个向量

  1. 第一个是text_embed,他是一个(2乘512)的tensor,2表示batch_size,512表示特征向量的维度,text_embed可以看作是对输入这句话的总结。
  2. 第二个是text_encodings,他是一个(2乘256乘512)的tensor,他是输入这句话每个词的特征。2表示batch_size,256表示这句话的长度不够用0代替,512表示特征向量的维度。

对应原文中的:
Openai神作Dalle2理论和代码复现

所以这里预训练模型CLIP的作用就是:输入一句话,通过CLIP,得到2个更接近图片的向量。把这两个向量运用到实际的下游任务中。

1.主要代码

text_embed, text_encodings = self.clip.embed_text(text)

三、先验模型

有了上面通过CLIP得到的2个文本特征向量以后,通过生成模型Diffusion Model,进一步对特征进行处理。
Openai神作Dalle2理论和代码复现
这一步主要就是运用Diffusion Model,但是和传统的Diffusion Model又有一点不一样,原文当中有说,传统的Diffusion Model是通过unet等网络,学到一个噪音,通过噪音一步步进行迭代,而Dalle2没有学噪音,而是直接学习得到x0,省去了中间的计算过程。
Openai神作Dalle2理论和代码复现

Openai神作Dalle2理论和代码复现
通过CLIP得到的2个文本特征向量,1个随机初始的噪音和一个时间步特征学习这个x0,有了这个x0,就和Diffusion Model模型一样,通过xt可以推出xt-1的分布了,在对xt-1的分布经过正太分布重采样技巧,就可以一步步迭代往前推,得到最终的特征向量了。
如何训练得到x0,主要就是通过一个transformer网络:
Openai神作Dalle2理论和代码复现

1.主要代码

这里x是随机初始的噪音,t是时间步特征,text_cond是CLIP文本特征。得到pred就是预测上一步所需要的x0特征。

pred = self.net.forward_with_cond_scale(x, t, cond_scale = cond_scale, **text_cond)

有了x0特征以后,根据Diffusion Model公式推出xt-1的分布,正太分布主要是一个期望和方差。和Diffusion Model公式完全一样。

def q_posterior(self, x_start, x_t, t):
    posterior_mean = (
        extract(self.posterior_mean_coef1, t, x_t.shape) * x_start +
        extract(self.posterior_mean_coef2, t, x_t.shape) * x_t
    )
    posterior_variance = extract(self.posterior_variance, t, x_t.shape)
    posterior_log_variance_clipped = extract(self.posterior_log_variance_clipped

model_mean, posterior_variance, posterior_log_variance = self.noise_scheduler.q_posterior(x_start=x_recon, x_t=x, t=t)

这里就是重采样操作,得到xt-1特征图的image_embed

def p_sample(self, x, t, text_cond = None, clip_denoised = True, cond_scale = 1.):
    b, *_, device = *x.shape, x.device
    model_mean, _, model_log_variance = self.p_mean_variance(x = x, t = t, text_cond = text_cond, clip_denoised = clip_denoised, cond_scale = cond_scale)
    noise = torch.randn_like(x)
    # no noise when t == 0
    nonzero_mask = (1 - (t == 0).float()).reshape(b, *((1,) * (len(x.shape) - 1)))
    return model_mean + nonzero_mask * (0.5 * model_log_variance).exp() * noise#采样 (0.5 * model_log_variance).exp()计算得到标准差
image_embed = self.p_sample(image_embed, times, text_cond = text_cond, cond_scale = cond_scale)

最终不停迭代n次得到先验模型最终的特征图输出

for i in tqdm(reversed(range(0, self.noise_scheduler.num_timesteps)), desc='sampling loop time step', total=self.noise_scheduler.num_timesteps):
    times = torch.full((batch,), i, device = device, dtype = torch.long)
    image_embed = self.p_sample(image_embed, times, text_cond = text_cond, cond_scale = cond_scale)

四、Decoder解码模型

Openai神作Dalle2理论和代码复现
Decoder解码模型和先验模型类似也是运用Diffusion Model,但是运用了2个Diffusion Model,可能一个效果一般,但是这样速度就变慢了。

Openai神作Dalle2理论和代码复现
模型最后做了各种对比实验发现,Diffusion Model会比自回归的方法效果更好。

Openai神作Dalle2理论和代码复现


总结

今天和大家分享一下Openai神作Dalle2理论和代码复现,有点难度,有点抽象,主要是需要有对比学习为主的CLIP和生成模型Diffusion Model的基础,然后把两者所结合起来。文章主要是给大家分享了一下主要思想,还有细节没写。有时间可以读一下,有疑问可以留言进行讨论。文章来源地址https://www.toymoban.com/news/detail-416783.html

到了这里,关于Openai神作Dalle2理论和代码复现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大模型 Dalle2 学习三部曲(二)clip学习

    clip论文比较长48页,但是clip模型本身又比较简单,效果又奇好,正所谓大道至简,我们来学习一下clip论文中的一些技巧,可以让我们快速加深对clip模型的理解,以及大模型对推荐带来革命性的变化。 首选我们来看看clip的结构,如图clip结构比较直观,训练的时候把文本描述

    2024年02月09日
    浏览(29)
  • 大模型 Dalle2 学习三部曲(一)Latent Diffusion Models学习

    Diffusion model 大获成功,但是它的短板也很明显,需要大量的计算资源,并且推理速度比较慢。如何才能提升Diffusion model的计算效率。业界有各种各样的改进,无疑 Latent Diffusion Models(潜在扩散模型,LDMs) 是比较成功的一篇,那就来学习一下LDMS是怎么做的吧 1,与基于变换

    2024年01月18日
    浏览(27)
  • dalle2:hierarchical text-conditional image generation with clip

    DALL·E 2【论文精读】_哔哩哔哩_bilibili 更多论文:https://github.com/mli/paper-reading, 视频播放量 30350、弹幕量 256、点赞数 1767、投硬币枚数 1318、收藏人数 751、转发人数 344, 视频作者 跟李沐学AI, 作者简介 ,相关视频:博一研究生 求偶视频,如何做好文献阅读及笔记整理,在线求

    2024年02月16日
    浏览(73)
  • AI art 实验:同样的Prompt, DALLE2 跟 Disco Diffusion 的创作大比拼

    关门测试的 DALL·E 2 昨日放出消息,说刚向社区投放了 1000 个内测名额,赶紧奔去查我的邮箱!没有!还是没有,向几位我认识搞机器学习的大佬们托了人情也不行,没有插队的!(奔走掩面甩泪) 为什么那么多人在翘首期盼 DALL·E 2,看看下面这个创作实验就明白了。 这个

    2024年02月09日
    浏览(32)
  • 一行代码也不写,拿Github Copliot + DallE3做一个小游戏是什么体验?

    我全程没写一句代码...       乡村爱情15看完了,晚上也没什么事,就寻思折腾点事做,儿子问我小时候最爱玩什么游戏,我毫不犹豫的说1945,正好这个事情给了我一个brain storming,那我自己写一个简单的1945可不可以?       说干就干,但是我也没写过游戏,于是我开启了

    2024年02月03日
    浏览(31)
  • OpenAI取消GPT-4 Turbo每日限制,速率提升一倍;扩散模型的理论基础

    🦉 AI新闻 🚀 OpenAI取消GPT-4 Turbo每日限制,速率提升一倍 摘要 :OpenAI宣布取消GPT-4 Turbo的每日限制,提升速率限制1倍,每分钟可处理高达150万TPM的数据。 OpenAI解释速率限制对防止API滥用、确保公平访问和管理基础设施负载的重要性。 OpenAI发布了避免速率限制的攻略,包括使

    2024年02月21日
    浏览(30)
  • AI大模型日报#04-08:多模态医疗视觉、复现OpenAI RLHF、Mistral Large引入Amazon

    导读: 欢迎阅读《AI大模型日报》,内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了每条资讯的摘要。 标题: 超10秒高分辨率,北大Open Sora视频生成更强了,还支持华为芯片   摘要:  北大团队与兔展联合发起的Open Sora Plan旨在通过开源社区复现OpenAI的Sora视频

    2024年04月17日
    浏览(37)
  • 豆瓣9.7,这部Java神作第3版重磅上市!

    Java 程序员们开年就有重磅好消息,《Effective Java 中文版(原书第 3 版)》要上市啦! 该书的第1版出版于 2001 年,当时就在业界流传开来,受到广泛赞誉。时至今日,已热销近20年,本书第 3 版已是 Java 程序员的必读神书,被誉为“Java 四大名著之一”,甚至连 Java 之父高司

    2024年04月12日
    浏览(23)
  • 【代码复现】TransUNet代码实现流程

    摘要:从图像输入模型开始,梳理TransUNet模型流程。 注:这里n_patches原代码设置196,但自己在分割硬渗出物的时候设置成了1024,不知道会不会使得效果变差 图片开始进入模型所在代码行: 然后进入 类VisionTransformer(nn.Moudle) 这部分实现: features :表示CNN支路中的3个特征图;

    2024年02月04日
    浏览(30)
  • 【代码复现】Windows10复现nerf-pytorch

    由于这段时间正在学习NeRF系列的论文,所以博主决定尝试复现一下原文中实现的效果。 这篇文章将会介绍在win10系统下对NeRF的复现过程。最初是想复现原文作者Ben Mildenhall的源码,不过一直在编译环节报错,参考了几位大佬的blog之后发现是因为原作者使用了tensorflow 1.15,本

    2024年02月08日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包