惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tenable Blog
Engineering at Meta
Engineering at Meta
The Register - Security
The Register - Security
N
Netflix TechBlog - Medium
D
Docker
Vercel News
Vercel News
云风的 BLOG
云风的 BLOG
月光博客
月光博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
D
DataBreaches.Net
IT之家
IT之家
V
V2EX
人人都是产品经理
人人都是产品经理
F
Fortinet All Blogs
J
Java Code Geeks
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 叶小钗
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
雷峰网
雷峰网
博客园 - Franky
Hugging Face - Blog
Hugging Face - Blog
有赞技术团队
有赞技术团队
aimingoo的专栏
aimingoo的专栏
MongoDB | Blog
MongoDB | Blog
P
Privacy International News Feed
F
Full Disclosure
P
Proofpoint News Feed
B
Blog RSS Feed
T
Tor Project blog
T
The Blog of Author Tim Ferriss
B
Blog
Webroot Blog
Webroot Blog
腾讯CDC
T
Troy Hunt's Blog
T
Tailwind CSS Blog
H
Heimdal Security Blog
AWS News Blog
AWS News Blog
G
Google Developers Blog
Spread Privacy
Spread Privacy
NISL@THU
NISL@THU
A
About on SuperTechFans
SecWiki News
SecWiki News
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
I
InfoQ
M
MIT News - Artificial intelligence
大猫的无限游戏
大猫的无限游戏
美团技术团队
L
LangChain Blog

StudyingLover's Blog

Diffusion Policy笔记 rwkv笔记 act笔记 nanovllm-block_manager opencode多智能体 nanobot-pre-train nanobot-rl nanobot-sft nanobot-checkpoint_manager nanobot-gpt nanobot-mid-train Vision Mamba (Vim)笔记 BPE演示 最后一遍学习Transformer YOLOv5 目标检测笔记 下载根服务器解析记录 Dynaseal A Backend-Controlled LLM API Key Distribution Scheme with Constrained Invocation Parameters 判断链表有环 王道25数据结构勘误 关于perplexity的open-sourcing-r1-1776 AI为什么不像人类一样进行多轮对话 新博客改造日记和功能测试 linuxqq只显示登陆背景图 数字设计和计算机体系结构(机械工业出版社)勘误(自制) Dynaseal:面向未来端侧llm agent的llm api key分发机制 A Definitive Guide to Markdown Style This post is using MDX, Where you can embed JSX and Astro components RT-Patch学习 pydantic实现的LLM ReAct fastapi 和 uvicorn 设置监听 ipv6 pydantic+openai+json 控制大模型输出的最佳范式 解决 Matplotlib Scatter 不支持 Marker 列表的问题:mscatter 实现 roofline model zhipuAI接口兼容openai 在docker部署fastapi宝塔里使用nginx反代套上cloudflare获取请求的真实ip clion搭建libbpf-bootstrap开发环境 coze+coze-discord-proxy+ChatNextWebUI实现AI自由 安卓内核时间使用的是UTC时间 colab运行google最新开源模型Gemma Sora技术报告 视频生成模型作为世界模拟器 笔记 archlinux flutter开发踩坑 fastapi集成google auth登录 linux下NTFS磁盘报错输入输出错误 Venn-Abers 预测器 基于Venn-Abers预测器的系统日志异常检测方法_顾兆军 手机平板远程访问kvm虚拟机的windows phi-2弱智吧测评 poe的gemini pro或是百度开发 google gemini api使用 google gemini api申请 构建用于复杂数据处理的高效UDP服务器和客户端 matplotlib中文字体渲染 TruFor笔记和代码复现 深入分析:GitHub Trending 项目 "multipleWindow3dScene" pua大模型 ggml教程|mnist手写体识别量化推理 xgboost2.0最佳实践 xgboost使用GPU最佳实践 马踏棋盘 cloudlflare推理llama2 docker搭建elasticsearch并使用python连接 FreeU-文字生成图片的免费午餐笔记 使用xgboost的c接口推理模型 Archlinux使用CMake调用xgboost的c接口 m2cgen生成机器学习c语言推理代码 xgboost模型序列化存储并推理 speculative-sampling笔记 prompt2model笔记 RoboTAP笔记 自建obsidian同步服务 MediaPipe即将推出图像生成服务 Dual-Stream Diffusion Net for Text-to-Video Generation笔记 ViT在DDPM取代UNet(DiT) arch4edu搞崩了我的flutter LISA(推理分割)笔记 在终端绘制GPU显存使用曲线 GPTBot介绍 arch蓝牙无法连接 GPU部署llama-cpp-python(llama.cpp通用) 花式求GCD 使用llama构建一个蜜罐(前端) 使用llama构建一个蜜罐(后端) llama-cpp-python快速上手 快速上手llama2.c(更新版) Paper Gestalt笔记 DINO-v2笔记 快速上手llama2.c AnyDoor笔记 Archlinux安装scrcpy加载共享库出错 error while loading shared libraries:libusb-1.0.so.0:wrong ELF class:ELFCLASS32 npc_gzip笔记 python调用c++函数 Filesystem type ntfs3,ntfs not configured in kernel open_clip编码图像和文本 PicGo配置CloudflareR2图片储存 ArchlinuxGnome快捷键打开终端 clip-interrogator代码解析 GroundingDINO安装报错解决 2023华为鲲鹏畅想日暨西安高新国际会议中心零食午饭测评 RoboMaster开源仓库汇总(长期更新) 没有手都可以在腾讯云创建镜像
DALLE2笔记
About the Author StudyingLover · 2023-02-09 · via StudyingLover's Blog

DALLE2笔记

## Abstract ``` mermaid graph LR; 文本--CLIP模型-->文本特征; 文本特征--prior生成图像特征-->两阶段模型; 两阶段模型--decoder-->图像; 文本--ground truth-->两阶段模型; ``` 基于扩散模型的解码器能够通过给定信息的解码器,生成很多不一样的图片 ,语义信息和风格比较接近,只是细节不一样。

可以直接修改和编辑模型,是zero-shot的,不需要重新训练。

整体上Dalle2都是一个扩散模型

Introduction

扩散模型是一种概率分布模型,生成图片是从一个分布中采样,多样性很高,保真度比不过GAN。20年之后有一系列模型改进了这一点。这一系列工作采用了很多技巧,其中一个比较著名的是引导guideance technique,能够牺牲一部分多样性来达到更好的保真度。

上半部分说的是CLIP,下半部分是DALLE2。

CLIP模型中文本和图像分别通过一个文本编码器和一个图像编码器,得到一个文本特征和一个图像特征。对应的文本特征和图像特征之间就是正样本,不对应的就是负样本。通过这种方式来做对比学习,把文本编码器和图像编码器都学的很好,文本和图像的特征就真的联系在了一起。CLIP模型训练好了之后,文本编码器和图像编码器就锁住了,在Dalle2中就不会再训练了。

两阶段训练方式最暴力的方式其实是中间有个大模型,中间去学一些融合的特征,直接生成就可以了。但如何像作者在摘要所说的,中间有一个显式的生成过程,先从文本生成文本特征,再生成图像特征再由图像特征生成图片效果就会好很多。

训练的时候,先用已有图像(CLIP模型中的图片)生成的图像特征作为ground truth去监督,也就是用文本特征来预测ground truth这个图像特征。推理的时候由文本特征就可以直接生成类似CLIP生成的图像特征。

图像生成

GAN

训练两个网络,一个是生成器,一个是判别器。生成器的目标是生成一个和真实图片尽可能相似的图片,判别器的目标是判断一个图片是真实的还是生成的。两个网络相互竞争,最终生成器生成的图片和真实图片的分布越来越接近。

有一个缺点就是训练不够稳定,因为需要同时训练两个网络。此外多样性比较差。

auto-encoder

给定一个输入x,过一个编码器,然后就能得到一个特征z(特征维度一般会小很多,所以管他叫bottleneck),再过一个解码器,得到一个图像。训练时的目标函数就是尽可能重建原来输入x

denoising auto-encoder

先把原图进行一定的打乱,然后把扰乱之后的特征传给编码器,后续和auto-encoder一样。训练时的目标函数还是尽可能重建原来输入x

varitional auto-encoder

中间不在是学习一个特征,而是去学习了一个分布。作者假设了中间是一个高斯分布,就可以用均值和方差来表示。具体来说就是得到编码器出来的特征之后,在后面加一些fc层,预测一个均值和方差,得到对应的均值和方差之后,我们用公式z=u+σϵz=u+\sigma\epsilon采样一个z出来,然后给解码器。

预测的时候,我们可以把编码器去掉,直接用均值和方差来预测。

从数学角度讲,这个模型是一个概率模型,给定x得到z这一过程就是一个后验概率,学出来的distribution就是一个先验分布,给定z预测x就是likelihood,这里做的就是maximum likelihood。

图像多样性好得多

VQVAE(vector quantised VAE)

将VAE做量化。之前的VAE不好把图片做大,分类也不是很好学,所以取而代之的是不做分布的预测,而是以codebook代替。cookbook可以理解成聚类的中心,cookbook大小一般是K∗DK*D,KK的大小一般是8192,DD的大小一般是512或者768,意思是由8912个长度为D的向量。

输入x先经过一个编码器,得到一个特征图大小为h∗wh*w,将特征图里的向量和cookbook里的特征做对比,看和哪个聚类中心最接近,然后把聚类中心的编码存到矩阵Z中,用矩阵z作为新的特征。

优化起来相对容易。

想做生成的话,就需要再训练一个prior网络.论文作者训练了一个pixelCNN,用来生成图片。

VQVAE2

模型变成了层级式的,加入了全局式的建模,加上了attention,表达能力增强。把pixelCNN换成了GPT.

DALL-E

文本先通过BPE编码,得到一个256维特征。还有一个图像,256256,经过一个VQ-VAE(来自训练好的cookbook,直接拿过来用),得到图像特征3232,维度下降了很多,一共有1024个token,将文本特征和图像特征连接起来,变成了一个1028的序列,将序列给GPT,训练GPT。

推理则是提供一个文本,得到文本特征,用GPT从文本特征徐策图片特征,用自回归的方式生成图片。生成出来的图片用CLIP排序,得到最好的图片。

Diffusion model

假设有一个x0x_0,每次加入一个很小的正态分布噪声,加了很多次之后就会变成一个真正的正态分布的噪声,这就是diffusion的forward过程。

将过程反转,整个模型都是共享参数的。

diffusion model采取了一个比较常见的模型结构U-NET,先用一个编码器把图像一点一点压小,再用一个解码器一点点恢复回来,前后尺寸大小一样。中间加上shortcut。

不足时训练比较贵,推理也比较慢

DDPM

DDPM是对diffusion的改进,不再去预测图片,而是去预测添加的噪声,U-NET的参数除了图像,还加入了一个time embedding用来表示到了反向扩散第几步。

学习正态分布是只需要学习均值,方差设置成常数也可以表现得很好

classifier guidence diffusion

反向扩散过程

训练同时训练一个图像分类器(在加了噪声的ImageNET上训练),当有一个图片,直接扔给图片分类器,可以得到一个交叉熵损失函数,得到一个梯度,用梯度帮助图片生成(暗含了图片是否有物体)

classifier-free guidance

训练的时候生成了两个输出,一个是有条件时生成输出,一个是没有条件时生成输出。训练的时候随机去掉文本,知道有文本输出和无文本输出的差距,就可以从无条件输出得到有条件输出

method

数据集依然是图片文本对

decoder

用了CLIP guidence(这个guidence指的是在decoder的过程中,输入是t时刻的一个带噪声的图像,最终输出是一个图像)和classifier-free guidance,guidence信号要么来自CLIP,要么来自文本。训练的时候有10%的时间把CLIP特征设成0,有50%把文本随机丢掉。

用了级联式生成,训练过程中还加入了噪声。

prior

  • auto-regressive自回归
  • diffusion 扩散模型 不管是auto-regressive还是diffusion,都是用了classifier-free guidance

auto-regressive效率太低

对于diffusion prior,作者训练了一个transformer decoder,输入输出是embedding,U-NET就不合适了。模型输入输入有文本,CLIP的文本特征,还有time step (步数的embedding),还有加过噪声之后的图像特征,transformer本身的embedding(这个embedding被用来预测没有加过噪声的图像特征)。