dalle3:Improving image generation with better captions

文生图——DALL-E 3 —论文解读——第一版-CSDN博客文章浏览阅读236次。本文主要是DALL·E 3官方第一版技术报告(论文)的解读。 一句话省流版,数据方面,训练时使用95%模型(CoCa)合成详细描述caption + 5%原本人类 caption,测试时使用GPT-4v 扩写人类caption;模型方面使用T5xxl + vae encoder + diffusion latent + 自家decoder 取得最好效果。https://blog.csdn.net/u012863603/article/details/134028230DALL-E 3技术报告阅读笔记 - 知乎在大家都在猜测 DALL-E 3技术架构的时候,没想到OpenAI在最近放出了DALL-E 3的技术报告,这不得不给OpenAI点个赞。但是,DALL-E 3的这篇技术报告重点是放在了如何通过合成图像的文本描述(caption)来提升模型的生…icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/662745543

dalle3,数据方面,训练时使用95%模型(CoCa)合成详细描述caption + 5%原本人类 caption,测试时使用GPT-4v 扩写人类caption;模型方面使用T5xxl + vae encoder + diffusion latent + lcm decoder 取得最好效果,其中lcm decoder已经开源了。

dalle3的技术报告主要是两个问题:1.如何通过合成图像的文本描述caption来提升模型的生成能力,提升的主要是prompt following能力,即生成的图像和输入的text prompt的一致性;2.关于dalle3和其它文生图算法的对比。

1.合成图像caption

文生图算法的文本理解能力,对于稍微复杂的文本,生成的图像往往会容易忽略部分文本描述,甚至无法生成文本所描述的图像,主要是训练数据集的caption不够准确,1.图像常规的文本描述过于简单(coco),大部分只描述图像中的主体而忽略图像中的其它信息,比如背景,物体的位置和数量,图像中的文字等,2.目前训练的图像文本对(laion)都是从网页上爬取的,文本的描述是alt-text(图片替代文本),这种描述很多是不太相关的内容,比如广告。

openai的解决方案是训练一个image caption来合成图像的caption,在合成caption上,blip之前就做过,laion在2022年也推出了基于blip来生成caption的laion-coco数据集,不过是生成的短caption,也没有使用GPT-4V来生成caption。这里选用的模型是谷歌的CoCa,CoCa相比clip额外增加了一个multimodel text encoder来生成caption,训练损失包括clip的对比损失和caption生成的交叉熵损失(自回归损失)。

为了提升模型生成擦菩提哦您的质量,对预训练好的image captioner进行了微调,包括两个部分,1.微调数据是只描述图像主体的短caption,2.微调数据是详细描述图像内容的长caption,相应的两个模型分别生成ssc短caption和dsc长短语。下图中很明显ssc和dsc。

实验部分主要讨论两点,1.合成caption对文生图模型的影响;2.训练中合成caption和原始caption的最佳混合比例。混合主要是为了防止模型过拟合到合成caption的某些范式,比如合成的caption往往以a和an开头,在训练中,在合成caption中混入原始caption,相当于一种模型正则化。

1.合成caption对文生图算法的影响。

训练了三个模型,1.只用原始caption;2.5%的原始caption+95%的合成短caption;3.5%的原始caption和95%的合成长caption。文生图算法是latent diffusion模型,其VAE和sd一样都是8x下采样,text encoder采用T5-XXL,T5-XXL可以编码更长的文本且其编码能力更强,训练图像尺寸为256x256,bs=2048,训练50w步,相当于采样了1B样本,unet结构估计和sdxl差不多,包含了3个stages,sdxl包含了3个sdxl,下采样2次,其中第一个stage是纯卷积,后面2个包含attention。

采用CLIP score来评测, CLIP score是image embedding和text prompt对应的text embedding计算余弦相似度得出的值,基于CLIP ViT-B/32。

左图中计算clip score时text采用原始caption,蓝线是长文本生成的图和原始caption计算的score,还是要好于红线,右图text采样的是长caption,明显长caption>短caption>原始caption。

采用95%长caption>90%长caption>80%长caption。

因此合成的长caption对模型最终的结果帮助很大,不过采用95%合成长caption,也会过拟合到长caption上,如果采用常规的短caption,效果就会差很多,为了解决这个问题,openai采用GPT4来upsample用户的caption,就是用户输入的短caption,进过GPT4之后变成长caption,优化之后效果确实要好一点。

2.dalle3

对于dalle3的实现,1.dalle3采用了95%的合成长caption和5%的原始caption混合训练,这是关键之一,2.dalle3应该是一个更大版本的T5xxl + vae encoder + diffusion latent + lcm decoder模型。目前生成的图片分辨率是1024x1024以上,应该也是类似于sdxl,采用渐进式的训练策略,256->512->1024,采用多尺度训练策略来使模型能够输出各种长宽比的图像,lcm decoder目前已经开源了,主要是提升图像的细节,特别是文字和人脸,为了解决VAE所产生的图像畸变。主要是替换vae decoder,可以和sd的vae encoder一起用。

import torch
from diffusers import StableDiffusionPipeline
from consistencydecoder import ConsistencyDecoder, save_image, load_image

# encode with stable diffusion vae
pipe = StableDiffusionPipeline.from_pretrained(
    "runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16, device="cuda:0"
)
pipe.vae.cuda()
decoder_consistency = ConsistencyDecoder(device="cuda:0") # Model size: 2.49 GB

image = load_image("assets/gt1.png", size=(256, 256), center_crop=True)
latent = pipe.vae.encode(image.half().cuda()).latent_dist.mean

# decode with gan
sample_gan = pipe.vae.decode(latent).sample.detach()
save_image(sample_gan, "gan.png")

# decode with vae
sample_consistency = decoder_consistency(latent)
save_image(sample_consistency, "con.png")

3.评测

评测这块还是很值得借鉴,从之前的sd_eval,图像生成如何去评估一直是个值得研究的点。dalle3的测评分为自动评测和人工评测。

自动评测有3个指标,1.CLIP score,测评数据集是从COCO2014中选出的4096个captions,2.采用GPT4V,测评数据集是imagen中所提出的DrawBench,共包括200个不同类型的prompt,将生成的图像和对应的text送入GPT4V,让模型判定图像和text是否一致,一致就正确。3.采用T2I-CompBench,包括6000个组合类型的text prompt,选择了color binding/shape binding/texture binding测评,通过BLIP-VQA model评分,三个方面都是难点,sdxl都搞不定的。

这三个指标可能也不能反应很多图像质量问题吧,直观感觉xl生成的图还是要比dalle2要好的。

第二部分是人工测评:1.给两张图,判断哪一张和文本更相符,2.style,不给文本,判断更喜欢两张图中的哪一张,3.coherence,从两张图中选择包含更多真实物体的图像。

4.问题

1.空间位置关系;2.文字生成能力;3.合成的caption中会幻想图像中的重要细节,可能画出错误类型的植物。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python】【应用】Python应用之一行命令搭建http、ftp服务器

🐚作者简介:花神庙码农(专注于Linux、WLAN、TCP/IP、Python等技术方向)🐳博客主页:花神庙码农 ,地址:https://blog.csdn.net/qxhgd🌐系列专栏:Python应用&…

R语言——taxize(第一部分)

ropensci 系列之 taxize (中译手册) taxize 包1. taxize支持的网络数据源简介目前支持的API:针对Catalogue of Life(COL) 2. 浅尝 taxize 的一些使用例子2.1. **从NCBI上获取唯一的分类标识符**2.2. **获取分类信息**2…

【LeetCode刷题-滑动窗口】-- 643.子数组最大平均数I

643.子数组最大平均数I 方法&#xff1a;滑动窗口 class Solution {public double findMaxAverage(int[] nums, int k) {int n nums.length;int winSum 0;//先求出第一个窗口的和for(int i 0;i<k;i){winSum nums[i];}//通过遍历求出除了第一窗口的和int res winSum;fo…

算法通关村第十六关青铜挑战——原来滑动窗口如此简单!

大家好&#xff0c;我是怒码少年小码。 从本篇开始&#xff0c;我们就要开始算法的新篇章了——四大思想&#xff1a;滑动窗口、贪心、回溯、动态规划。现在&#xff0c;向我们迎面走来的是——滑动窗口思想&#xff01;&#x1f61d; 滑动窗口思想 概念 在数组双指针里&am…

SQL使用

--天空会的像哭过&#xff0c;离开你以后 并没有更自由 SQL进行数据的删除 一、删除delete 语法 delete [from] 表名称 where 条件数据删除&#xff0c;不能删除某一列&#xff0c;因为删除是对记录而言 2.1 删除是一条一条删除&#xff0c;每次删除都会将操作写入日志文件 删…

记录第一次利用CVE-2023-33246漏洞实现RocketMQ宿主机远程代码执行的兴奋

我依然记得自己第一次发现xss漏洞时候的兴奋: 我也记得自己第一次发现sql输入时候的快乐: 直到最近我终于收获了人生的第一个远程代码执行漏洞的利用&#xff08;RCE:remote code execute&#xff09;&#xff0c;虽然这个漏洞的危害远超过了前两个&#xff0c;但是快乐不如前…

RocketMQ(二):基础API

Spring源码系列文章 RocketMQ(一)&#xff1a;基本概念和环境搭建 RocketMQ(二)&#xff1a;基础API 目录 一、RocketMQ快速入门1、生产者发送消息2、消费者接受消息3、代理者位点和消费者位点 二、消费模型特点1、同一个消费组的不同消费者&#xff0c;订阅主题必须相同2、不…

伊朗黑客对以色列科技行业发起恶意软件攻击

最近&#xff0c;安全研究人员发现了一场由“Imperial Kitten”发起的新攻击活动&#xff0c;目标是运输、物流和科技公司。 “Imperial Kitten”又被称为“Tortoiseshell”、“TA456”、“Crimson Sandstorm”和“Yellow Liderc”&#xff0c;多年来一直使用“Marcella Flore…

加密磁盘密钥设置方案浅析 — LUKS1

虚拟化加密磁盘密钥设置方案浅析 前言元数据分析元数据格式整体格式头部格式加密算法密码校验key slot格式其它字段 流程验证 前言 我们在虚拟化加密磁盘密钥设置方案浅析 — TKS1中介绍了加密磁盘密钥设置方案&#xff0c;TKS1对密钥设置(Linux Unified Key Setup)的流程和方…

模拟散列表(哈希表拉链法)

维护一个集合&#xff0c;支持如下几种操作&#xff1a; I x&#xff0c;插入一个整数 x&#xff1b;Q x&#xff0c;询问整数 x 是否在集合中出现过&#xff1b; 现在要进行 N 次操作&#xff0c;对于每个询问操作输出对应的结果。 输入格式 第一行包含整数 N&#xff0c;…

举报“将我的电脑控作己用者”!

既然“麻辣800727”都说是“街子电信”干的&#xff0c;那么&#xff0c;我现在就正式举报&#xff1a;请依法管理宽带网&#xff0c;你国营的也不可以随意侵犯用户的人权&#xff0c;更不可以将自己变成法外之地&#xff01; 请公开答复&#xff0c;并改正&#xff0c;否则把…

机器学习线性代数知识补充

线性代数知识补充 正交矩阵与正交变换方阵特征值与特征向量相似矩阵对角化二次型正定二次型 正交矩阵与正交变换 方阵特征值与特征向量 相似矩阵 对角化 二次型 正定二次型

H5游戏源码分享-超级染色体小游戏

H5游戏源码分享-超级染色体小游戏 游戏玩法 不断地扩大发展同颜色的色块 用最少的步数完成游戏 <!DOCTYPE html> <html><head><meta charset"UTF-8"><meta name"viewport"content"widthdevice-width,user-scalableno,init…

应届裁员,天胡开局——谈谈我的前端一年经历

应届裁员&#xff0c;天胡开局——谈谈我的前端一年经历 许久没有更新了&#xff0c;最近一个月都在忙&#xff0c;没错&#xff0c;正如题目所说&#xff0c;裁员然后找工作… 这周刚重新上班&#xff0c;工作第二天&#xff0c;感慨良多&#xff0c;记录些什么吧。 去年十…

学习samba

文章目录 一、samba介绍二、samba的主要进程三、配置文件四、例子 一、samba介绍 1、SMB&#xff08;Server Message Block&#xff09;协议实现文件共享&#xff0c;也称为CIFS&#xff08;Common Internet File System&#xff09;。 2、是Windows和类Unix系统之间共享文件的…

【Linux】gitee仓库的注册使用以及在Linux上远程把代码上传到gitee上的方法

君兮_的个人主页 即使走的再远&#xff0c;也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;今天为大家介绍一个在实际工作以及项目开发过程中非常实用的网站gitee&#xff0c;并教如何正确的使用这个网站以及常见问题的解决方案&#xf…

java基础-数据类型

1、变量 变量就是申请内存来存储值。也就是说&#xff0c;当创建变量的时候&#xff0c;需要在内存中申请空间。 内存管理系统根据变量的类型为变量分配存储空间&#xff0c;分配的空间只能用来储存该类型数据。 因此&#xff0c;通过定义不同类型的变量&#xff0c;可以在内…

MySQL主主复制

主1 192.168.66.15 主2 192.168.66.16 主1&#xff1a; roottest2 ~]# hostname master1 [roottest2 ~]# bash [rootmaster1 ~]# vim /etc/my.cnf server-id11 log-binmysql-bin auto_increment_increment2 auto_increment_offset1 replicate-do-dbdemo_db …

appium+python自动化测试

获取APP的包名 1、aapt即Android Asset Packaging Tool&#xff0c;在SDK的build-tools目录下。该工具可以查看apk包名和launcherActivity 2、在android-sdk里面双击SDK-manager,下载buidl-tools 3、勾选build-tools&#xff0c;随便选一个版本&#xff0c;我这里选的是24的版…

ESP32/ESP8266基于Arduino框架下驱动1.8“tft_oled屏幕仿数码管时钟

ESP32/ESP8266基于Arduino框架下驱动1.8"tft_oled屏幕仿数码管时钟 &#x1f4cd;相关篇《ESP32基于Arduino框架下U8g2驱动I2C OLED 时间显示》&#x1f4fa;效果演示&#xff1a; &#x1f33f;屏幕显示部分&#xff0c;采用使用TFT_eSPI库驱动&#xff0c;利用该库自带的…