QQGC?揭秘QQ的AI绘画大模型技术

news2024/11/17 16:28:48

e9bf88668a65a1f70db23a05c4256f15.png

6d5f74da06d515706228fb356b938910.gif

👉腾小云导读

2022年来,AIGC概念迅速出圈并快速形成产业生态,成为继PGC、UGC之后新的数字内容创作形式。QQ影像中心提出了自研的AI画画技术方案——QQGC,本文将介绍在QQGC基础大模型训练中的实践和探索,接着往下看吧~

👉看目点收藏,随时涨技术

1 背景

    1.1 扩散模型

    1.2 DALLE 2

    1.3 Stable Diffusion

2 技术方案

    2.1 整体架构

    2.2 Prior模型

    2.3 Decoder模型

    2.4 训练加速方案

3 结果展示

    3.1 Text2Image

    3.2 Image Variation

    3.3 融合原图语义信息的img2img

    3.4 CLIP向量编辑

4 总结展望

01

背景

2022年来,随着 DALLE2、ChatGPT 等技术的突破式发展,AIGC 迎来了快速的爆发式的增长,内容生产已经从专业生成内容(PGC)、用户生成内容(UGC),进入到人工智能生成内容 AIGC(AI-Generated Content)的时代。这其中关于AI画画的应用随着生成技术的不断完善、开源社区的推动、以及大量的商业化探索,成为未来最有希望落地并广泛使用的技术方向,为数字内容创作注入新能量。

8cf2bb0547bd5ffdc8b1ff824fc69545.png

而基础大模型作为 AIGC 生态中最底层一环发挥着重要作用,因此QQ影像中心提出了自研的QQGC-AI 画画技术方案,本文将分析现有 text2Image 技术方案,以及在AI画画大模型等探索和相关技术落地案例。

   1.1 扩散模型

Diffusion Model 是近几年兴起的生成式模型,比如 OpenAI 的 GLIDE、DALLE2、Google 的 Imgen、Parti 等,它们都是采用扩散模型的 pipeline 完成高质量的图像生成。

扩散模型通常包括两个过程,从信号逐步到噪声的扩散过程和从噪声逐步到信号的逆向过程。这两个过程建立起了复杂的数据分布与简单的噪声先验分布之间的双向联系。从数据分布到先验分布是一个预先定义好的加噪过程,通过按照预先设置好的规律逐渐融合数据与噪声,将复杂的分布转换为一个简单的分布。

Diffusion Model 的反向过程则是:将原始数据与噪声混合的数据送入模型,模型预测出其中的噪声(或者原始数据),通过逐渐降低先验分布中样本的噪声,实现了从简单分布中样本到数据分布中的样本的转换。

b75010a1c364d6a0da1d08fa9d7971c0.jpeg

相比 GAN、VAE 而言,Diffusion Model 解决了由于对抗训练产生的训练不稳定的问题,并且有更高的生成质量和多样性。

   1.2 DALLE 2

DALLE 2 是 OpenAI 公司发布的 text2image 算法,该算法在之前 GLIDE 生成模型的基础上,大幅提升了生成效果,首次将 text2image 算法提升到一个可用的水平,获得了社会各界的广泛关注。

DALLE 2 沿用了 OpenAI 之前 GLIDE 模型的技术路线,GLIDE 模型中选择transformer 模型提取文本特征,用了 Diffusion 模型作为图像生成模型,进行端到端的训练。DALLE 2 在此基础上,选择 CLIP 模型作为文本-图像桥梁,整体主要可以分为如下几部分:

Prior 模型:使用 CLIP text embedding 作为输入,预测待生成图像的CLIP image embedding;

Decoder 模型:输入 CLIP image embedding ,预测64分辨率的小图;

Upsampler 模型:输入64分辨率的小图,通过两阶段超分,将图片分辨率超分到1024分辨率;

f4157501ae0dc6c68c1f94b5b978c433.jpeg

以上的方式以 CLIP 模型为桥梁,很好地将各部分任务解耦开来。对于每一项任务而言,大大降低了训练的难度。并且使用了 CLIP 作为已知的预训练模型,能够很好的提取文本图像特征,解决了端到端训练的 text transformer 能力不足问题。

   1.3 Stable Diffusion

Stable Diffusion 模型是由 Stability 公司发布的一个开源的 text2image 模型,该模型以 latent-diffusion 模型为基础,融合了 DALLE2 以及 Imagen 等方法的优点。使用 CLIP text embedding 作为模型输入,预测一个 VAE 的 latent sapce ,然后通过 VAE decode 得到原始分辨率大小。

1469872afdbe5d75d3947f83f5432277.jpeg

通过替换 CLIP 语言模型以及 classifier-free guidance 等方法,Stable Diffusion 做出了非常好的效果。而且由于其相对简洁的 pipeline,不需要超分作为后处理流程,大大降低了训练和部署成本。

很多社区和公司在 Stable Diffusion 的基础上改进衍生出了自己模型,使得 text2image 成功出圈,衍生了很多不同的生成技术和玩法。

02

技术方案

   2.1 整体架构

通过对 DALLE2、Stable Diffusion 等方案的对比,QQ 影像中心探索了自研的  text2image 方案,包含如下几个重要的改进技术方向:

更强的文本特征提取:

通过 DALLE2 和 Stable Diffusion 等模型的改进方案可以看到,语言模型特征提取在图片生成过程中至关重要。包括 Google 的 Imagen 以及 Nvidia 等 ediff 等方案,都尝试在引入了更多更强大的语言模型作为文本特征提取器,并且取得效果上的显著提升;

对训练数据要求较低的技术框架:

高质量 text-image 成对的数据要求文本能够很好地描述图片,同时图片也有足够高的质量,其收集的难度远大于收集单独的高质量图片(或文本)。所以要求将文生图任务尽量解耦,降低对数据收集的要求,让训练更容易收敛;

更轻量低成本的训练部署:

Stable Diffusion 模型能够迅速破圈的原因在于其相对轻量的技术方案,通过减少超分等更大计算量的步骤,大大减少了训练及部署的成本,这一点在当前降本增效的大环境下显得更加重要;

基于以上分析,我们提出了如下的技术架构。核心主要包含 prior 模型和 decoder 模型两部分。在几乎不引入额外计算量的情况下,可以大幅超越 Stable Diffusion 开源模型,达到 DALLE2 等第一梯队 text2image 模型的水平。

eb5306763b6daeeae0c18965ef5d36cf.jpeg

   2.2 Prior模型

经过实验我们发现,直接通过 CLIP text embedding 输入 Stable Diffusion 的方案在图文一致性上存在明显的缺陷。因此我们参考了 DALLE2 的模型设计思路,将 text embedding -> image 一步的思路,拆分成 text embedding -> image embedding -> image 两阶段,增加了 prior 模型作为从 text 特征域到 image 特征域的映射,这样可以显著降低训练难度以及提升生成效果。同时为了增强文本特征的提取能力,我们还融合了 T5 类语言模型作为特征提取模型,实现更强的语意理解能力。

   2.3 Decoder模型

Decoder 模型的输入是 CLIP image embeddings,输出图片。在实现上,我们复用了 Stable Diffusion 的 pipeline,将 Stable Diffusion 的 condition 从CLIP text embedding 替换成 CLIP image embeddings。

在训练 Decoder 模型的过程中,不需要文本数据的参与,只需要收集高质量图片数据即可。对应地,训练 Prior 模型时,更关注训练数据中图文数据的语义匹配程度,对图文 pair 中图片的质量要求不高。这样,训练高质量文生图模型的数据收集要求被拆解、降低。

   2.4 训练加速方案

如何用有限的资源和成本,快速高效的训练 text2image 大模型?这是一项非常有挑战的任务。加速训练的核心在于消除整个训练 pipeline 中的性能短板,提高计算密度和计算效率。因此我们主要从如下几个方面入手进行了加速改进。

  • 提高数据效率:

Text2image 训练依赖海量的数据,不同于传统CV任务,数据量的增加了几个量级,需要设计面向大数据的高效 dataloader,解决数据读取方面的短板。这里我们选取了 tar 包形式的数据组织方式,将数据分层存储,将 百M 条数据分 每10K 数据打包成一个 tar 包,这样就降低了数据读取的难度,数据的 shuffle 等操作仅在 tar 包这一层级进行。

24b8bbe159878dbf0710fe35001189c7.jpeg

  • 提高计算密度/效率:

提高训练速度最有效的方式就是尽量提高计算密度,即在一张 GPU 上部署更大的 batchsize 。我们使用了 FP16 半精度训练、activation checkpoint,以及 ZeRO(零冗余优化器) flash attention算子优化等方法显著的减少了显存占用,单卡 batchsize 增加了8倍,训练速度提升到了4倍。

29d4fd910569f11aeb3b5518ed8958cc.jpeg

  • 减少通信开销:

在部署分布式多机训练时,由于模型参数量较大,多机间的通信耗时往往是模型训练的瓶颈。我们采用 GPU RDMA 网络直连通信,能够保证基础的网络通信性能。我们使用梯度累加,以及优化器方面的优化工作,来减少通信量,节约通信的成本。经过上述优化,我们可以在64卡集群上就可以很快的进行超过 2B 参数量模型的训练。

03

结果展示

   3.1 Text2Image

我们在 COCO-30k 上评测了 FID 和 CLIP-score 指标的表现,结果达到同等级SOTA 水平。

0f8d8eea0f1ff656123807a7da169de4.jpeg

以下为一些自研模型的生成效果,可以作为通用大模型已经可以生成非常高质量的不同物体、风格、及抽象概念的图像。

5091946ebf3b51ca1fec25c6537fe147.jpeg

以下是一些模型生成效果示例,在语义贴合度、美观度方面远超 StableDiffusion 模型:

8200d1c0dfff9ebe835d798143c5d167.png

   3.2 Image Variation

Decoder 模型可以根据图片的 CLIP embedding 来重建图片。下面是用我们训练的 Decoder 模型重建各种图片的示例:

b27ad327389520cfad2d95d775543589.jpeg

可以看到,无论是艺术画,还是肢体复杂的自然图片,包括由其它(Parti 和 DALLE2)生成的复杂图片,我们的 Decoder 的模型都能重建还原其神韵,在语义层次很接近。证明我们训练的 Decoder 模型有较强的还原 Clip image embedding 能力,只要 Prior 模型能生成符合 prompt 描述的 Clip image embedding ,组合两者就可以得到一个强大的文生图模型。

   3.3 融合原图语义信息的 img2img

Stable Diffusion 除了可以用来实现文生图生成,也可以通过用加噪的图片取代一部分 Diffusion 过程,实现 img2img。用于加噪的图片也常被称为垫图。但是基于 Stable Diffusion 实现的的 img2img 只利用了输入图片的加噪结果,常常面临保留原图更多信息和保留 prompt 对应效果之间的权衡。而 QQGC-AI 画画模型由于将生成步骤拆分成了两个阶段,可以在 Decoder 生成图片过程中,利用垫图的加噪结果,融合垫图的语义特征和 prompt 对应的特征,实现融合原图语义信息的 img2img。

比如使用如下 prompt:

two women standing next to each other holding hands, portrait, elegant, intricate, digital painting, artstation, concept art, smooth, sharp focus, illustration, art by konstantin korovin and daniel f. gerhartz and john howe

调用 QQGC-AI 画画模型完成文生图任务:

b9eaa74a1d2762130d42210667be7309.png

类似于 Stable Diffsuion 实现的 img2img,QQGC-AI 画画模型也可以给定一个垫图,在由 Prior 生成的 condition 向量控制下实现基础的 img2img:

ac1f5ea9203ac59a46c81bd8c099359a.jpeg

可以注意到,由于这种基础的 img2img 完全不考虑原图的语义信息,只是用了原图的结构(色块),导致生成图只保留了一些比如右边女性的头发区域是黑色这样的信息,但完全忽略了这部分区域是头发的语义信息,生成图对应区域成了黑色的袖子。

为了融合原图的语言信息,可以将 prompt 对应的 image embedding 和原图的 embedding 混合,然后由 Decoder 将混合 image embedding 转化为图片。借此,实现了融合了原图语义信息的 img2img:

c17419c8bdf3665118d5d6a1ca122119.jpeg

   3.4 CLIP 向量编辑

由于二阶段模型提供了两个域很好的解耦性,我们可以直接在 CLIP Embedding 域做向量编辑来达到对图片的精细修改的效果,如下图展示了通过对向量做编辑,实现精准的水印文字去除甚至增加水印的能力:

e842e70d26958e793d9dc6e467f1d399.jpeg

同时,为了让模型生成内容更加健康正能量、主体更美观,在输入 text 包含血腥、色情等描述时,也可以在 diffusion 过程中对 CLIP embbeding 做控制,达到生成内容更加真善美的目的。

7989ca9de066741fa9c58fe1e112bc31.jpeg

04

总结展望

通过以上结果可以看到,QQ 影像中心自主研发的 QQGC 两阶段生成大模型具备:更好的文本图像域解耦、更精准的生成语意匹配度、更低模型训练部署成本、支持更为复杂丰富的编辑控制操作等特性。

QQGC 基础大模型作为 AIGC 技术落地中的 Foundation 模型将会发挥重要作用,QQ 影像中心也以 QQGC 大模型为基础,上线了小世界“魔法画室”功能。后台回复「QQ」,体验AI绘画。

可以根据用户的自由输入直接生成高质量的生成结果:

39f945203625723c9b1991967d2b1389.jpeg

同时,在业界很关注的在不同风格、场景的生成图片中保留身份特征、更强的生成控制能力上,我们也在持续探索,会在未来的活动中上线,欢迎大家在评论区中反馈讨论交流~

38c2686717d0357be0f4b6c1b285f9b9.png

欢迎在评论区聊一聊对AI绘画的看法。AI绘画的出现会替代某些岗位吗?AI绘画能有哪些应用场景?我们将选取1则最有创意的评论,送出腾讯云开发者-鼠标垫1个(见下图)。6月1日中午12点开奖。

15022c599e3b658fce2ff0569a9e620b.jpeg

d7bbaf74975c13f0bbaf866567b5bc41.png

0708206cfa6662400dee0d18133c2855.png

7f29418a6d42f1bd54f84a14947b9755.png

84585e2ac3e2c562445c1ae87dc83247.png

后台回复「QQ」

体验AI绘画

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

我用AI帮我唱了首“基尼太美”,颠覆了我的认知!太牛逼了

目录 前言 AI唱"基尼太美"是什么感觉 使用so-vits-svc打造自己专属歌手 1.声音素材整理 2.训练模型 3.让AI唱歌​编辑 AI歌手背后的技术 AI歌手会成为主流吗 写到最后 大家好,我是大侠,AI领域的专业博主 前言 在5月份,孙…

第五篇:强化学习基础之马尔科夫决策过程

你好,我是zhenguo(郭震) 今天总结强化学习第五篇:马尔科夫决策过程 基础 马尔科夫决策过程(MDP)是强化学习的基础之一。下面统一称为:MDP MDP提供了描述序贯决策问题的数学框架。 它将决策问题建模为: 状态…

司空见惯 - 使用dBm表示功率的各种现实情况

前面一篇文章介绍过,使用dBm表示功率时,如何转换为mW。 那现实世界的实际情况中,使用dBm来表示电磁波的能量强度,列表如下: Power level Power Notes 526 dBm 3.61049 W 黑洞碰撞后的引力波辐射的功率&#xff0c…

解决缓存与数据库数据不一致的问题,这篇文章告诉你如何做!

缓存是提高应用程序性能和响应速度的关键组件之一。缓存可以帮助减少数据库查询次数,从而减轻服务器负担并加快页面加载速度。然而,缓存与数据库一致性是分布式系统中常见的问题,因为缓存和数据库之间可能存在数据不一致的情况。为了解决这个…

CyberLink的摄像头应用程序YouCam 10.1版本在win10系统的下载与安装配置教程

目录 前言一、YouCam安装二、使用配置总结 前言 YouCam是由CyberLink公司开发的一款实用的摄像头应用程序,它集成了多种实时视频特效、背景虚化、美颜、屏幕录制等功能。 通过使用该软件内置的相机特效,用户可以将视频聊天或自拍照片变得更加精彩和有趣…

oracle表空间、用户、表的关系和创建

目录 一、表空间 二、用户 (1)Oracle和mysql、sqlserver的区别 (2)创建用户 (3)给用户授权 三、表 (1)创建表 (2)用图像化软件添加表约束 1.主键约束…

TikTok正测试名为“Tako”的AI聊天机器人;武汉大学宣布推出CheeseChat

🚀 近日安徽安庆一起利用AI换脸技术的电信诈骗案件 近日安徽安庆一起利用AI换脸技术的电信诈骗案件,3名涉案人员被抓获并返还被骗款132万元。 此前也有多起利用AI换脸技术进行的电信诈骗案件,甚至还出现在明星直播带货中。 专家提示&#…

ChatGPT无限可能性:自然语言生成的奥秘

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! ChatGPT无限可能性:自然语言生成的奥秘 数字化时代:跨越语言和文化障碍 冰岛是北大西洋中部的一个岛国,拥有充满活力的科技产业和…

网络编程初识

如果这篇有没接触过的知识点,请转到网络编程先导知识_小梁今天敲代码了吗的博客-CSDN博客 目录 IPv4和IPv6的概念: 子网掩码 默认网关 ping命令 端口 OSI网络分层模型 TCP/IP四层模型 字节序转换函数 IP地址转换 上一篇介绍了网络编程的先导知…

chatgpt赋能python:Python动态实时轨迹绘图:让数据可视化更生动

Python 动态实时轨迹绘图:让数据可视化更生动 数据可视化是现代数据分析中不可或缺的一部分。在Python语言中,有许多工具和库可以帮助我们将数据转化为可视化的图表。然而,有些情况下,静态图表难以准确有效地展现数据的变化趋势和…

chatgpt赋能python:Python动态Import:优化你的编程体验

Python 动态 Import:优化你的编程体验 在 Python 中, Import 是一个非常常见的操作。它允许你从其他模块中引入需要的函数或者变量,从而避免在不同模块中重复编写代码。在大型项目中, Import 操作可能会变得很混乱,导…

Java内存管理:垃圾回收算法和内存分配的原理和优化

章节一:引言 在当今的软件开发领域,Java是一门广泛应用的编程语言。Java虚拟机(JVM)负责管理Java应用程序的内存,并通过垃圾回收算法和内存分配策略来优化内存使用。本文将详细介绍Java内存管理的原理、垃圾回收算法的…

【熬夜送书 | 第一期】Java生日快乐,不负代码不负君,面向对象面向卿

文章目录 前言一、java是什么?二、好书推荐《Java核心技术》《Java编程思想》Effective Java 中文版(原书第3版)Java语言程序设计基础篇进阶篇(原书第12版)Java并发编程实战软件架构实践(原书第4版&#xf…

ThingsBoard教程(五三):规则节点解析 Kafka Node, MQTT Node

Kafka Node Since TB Version 2.0 Kafka节点将消息发送到Kafka代理。它可以接收任何类型的消息。该节点会通过Kafka生产者将记录发送到Kafka服务器。 配置 主题模式 - 可以是静态字符串,也可以是使用消息元数据属性解析的模式。例如${deviceType}引导服务器 - 用逗号分隔的…

fork/join框架

文章目录 前言一、fork/join是什么?二、使用步骤总结 前言 使用Fork/Join框架首先要考虑到的是如何分割任务,分割之后,根据join 再进行任务结果的合并,也就是类似二分法的,分而治之的理念; 一、fork/join是什么? fork 拆分任务,将大任务拆分成小任务,拆…

Linux学习笔记---编辑器Vim

Vim是Linux中功能十分强大的文本编辑器,熟练地使用Vim可以让你高效地在Shell界面编写代码,接下来我们开始一步一步地学习Vim的使用方法: 一、文本编辑器vim的使用 1. 打开Vim 打开终端直接输入vim,即可打开Vim编辑器主界面 它是原始vi编辑…

简单谈谈BIO,NIO,AIO

目录 IO 概述 阻塞 IO (BIO) 基本理解 非阻塞 IO(NIO) ​核心部分 Channel Buffer Selector Channel Buffer Selector 三者关系 异步非阻塞 IO(AIO) IO 概述 IO 的操作方式通常分为几种:同步阻塞 BIO、同步非阻塞 NIO、异步非阻塞 AIO。 (1…

如何检查Linux硬盘大小、类型和硬件详细信息?

在Linux系统中,了解硬盘的大小、类型和硬件详细信息对于系统管理和故障排除非常重要。本文将详细介绍如何使用命令行工具来检查Linux硬盘的大小、类型和硬件详细信息。 1. 检查硬盘大小 要检查Linux硬盘的大小,可以使用lsblk命令。该命令显示了系统中所…

chatgpt赋能python:Python取位:介绍和应用

Python取位:介绍和应用 Python是一种解释型,高级,通用编程语言。它在最近几年中变得越来越受欢迎,因为它易于学习和使用,并且具有很强的可读性和简洁性。在Python编程中,取位是一种很常见的操作。在本文中…

chatgpt赋能python:Python中如何取空格之前的内容?

Python中如何取空格之前的内容? 在Python中,我们经常需要从文本中提取关键信息,但有时这些信息的位置并不是固定的,而是被包围在一些无用的字符中,比如空格。那么,在Python中,如何取空格之前的…